program Meelo;

type
  integers = array of integer;

function TwoMerge(rij1,rij2 : integers) : integers;
{
  Two-way merge.
  Described on page 160 of "The Art of Computer Programming"
  volume 3 / "Sorting and Searching" by Donald E. Knuth.
}
var
  LIM1,LIM2,LIM3 : integer;
  max1,max2,sentinel : integer;
  k, k1, k2, L : integer;
  rij3 : integers;
begin
  LIM1 := Length(rij1);
  LIM2 := Length(rij2);
  LIM3 := LIM1 + LIM2;
  SetLength(rij3,LIM3);
  if (LIM2 = 0) and (LIM1 > 0 )then
  for k := 0 to LIM1-1 do
    rij3[k] := rij1[k];
  if (LIM1 = 0) and (LIM2 > 0 )then
  for k := 0 to LIM2-1 do
    rij3[k] := rij2[k];
  if (LIM1 > 0) and (LIM2 > 0) then
  begin
    max1 := rij1[LIM1-1];
    max2 := rij2[LIM2-1];
    sentinel := max1;
    if max2 > max1 then sentinel := max2;
    sentinel := sentinel + 1;
  
    k1 := 0;
    k2 := 0;
    for L := 0 to LIM3-1 do
    begin
      if rij1[k1] <= rij2[k2] then
      begin
        rij3[L] := rij1[k1];
        rij1[k1] := sentinel;
        if k1 < LIM1-1 then k1 := k1+1;
      end else begin
        rij3[L] := rij2[k2];
        rij2[k2] := sentinel;
        if k2 < LIM2-1 then k2 := k2+1;
      end;
    end;
  end;
  TwoMerge := rij3;
end;

function plus(a,b : integers) : integers;
{
  Summation with sorted arrays
}
var
  q,r,rij,som : integers;
  L,k,P : integer;
begin
  L := Length(a);
  SetLength(q,L);
  for k := 0 to L-1 do
    q[k] := a[k];
  L := Length(b);
  SetLength(r,L);
  for k := 0 to L-1 do
    r[k] := b[k];
  rij := TwoMerge(q,r);
  L := Length(rij);
  if L = 0 then
  begin
    plus := rij;
    Exit;
  end;

  SetLength(som,L);
  P := 1;
  som[0] := rij[0];
  for k := 1 to L-1 do
  begin
    if rij[k] > som[P-1] then
    begin
      som[P] := rij[k]; P := P+1; Continue;
    end;

    if rij[k] = som[P-1] then
    begin
      som[P-1] := rij[k]+1; Continue;
    end;

    if rij[k] < som[P-1] then
    begin
      som[P] := som[P-1]; som[P-1] := rij[k]; P := P+1; Continue;
    end;
  end;
  SetLength(som,P);
  plus := som;
end;

function maal(a,b : integers) : integers;
{
  Multiplication with sorted arrays
}
var
  M,N,i,j,links : integer;
  h,produkt : integers;
begin
  M := Length(a);
  N := Length(b);
  SetLength(h,N);
  SetLength(produkt,0);
  for i := 0 to M-1 do
  begin
    links := a[i];
    for j := 0 to N-1 do
      h[j] := b[j] + links;
    produkt := plus(produkt,h);
  end;
  maal := produkt;
end;

function dubbel(getal : string; carry : boolean) : string;
{
  Make decimal number representation twice as large
}
var
  G,H : string;
  rest : boolean;
  c : byte;
  k,L : integer;
begin
  G := getal;
  L := Length(G);
  rest := carry;
  for k := L downto 1 do
  begin
    c := byte(G[k])-48;
    c := c*2;
    if rest then c := c+1;
    rest := (c > 9);
    if rest then c := c-10;
    G[k] := char(c+48);
   end;
   H := G;
   if rest then H := '1' + G;
   dubbel := H;
end;

function decimaal(rij : integers) : string;
{
  Convert sorted array to decimal string
}
var
  G : string;
  L,p,k : integer;
  rest : boolean;
begin
  decimaal := '0';
  L := Length(rij);
  if L = 0 then Exit;
  G := '0';
  p := L-1;
  k := rij[p];
  while (p >= 0) do
  begin
    rest := false;
    if rij[p] = k then
    begin
       rest := true;
       p := p-1;
    end;
    G := dubbel(G,rest);
    k := k-1;
  end;
  while k >= 0 do
  begin
    G := dubbel(G,false);
    k := k-1;
  end;
  decimaal := G;
end;

function let(n : integer) : integers;
{
  Convert integer to sorted array
}
var
  k,m,L : integer;
  uit : integers;
begin
  m := n;
  SetLength(uit,32);
  for k := 0 to 31 do
    uit[k] := 0;
  L := 0;
  for k := 0 to 31 do
  begin
    if (m and 1) = 1 then
    begin
      uit[L] := k;
      L := L + 1;
    end; 
    m := m shr 1;
  end; 
  SetLength(uit,L);
  let := uit;
end;

function macht(x,n : integer) : string;
{
  Power x^n
}
var
  m : integer;
  p, y : integers;
begin
  m := n;
  SetLength(p,1);
  p[0] := 0;
  SetLength(y,0);
  y := let(x);
  while m > 0 do begin
    if (m and 1) > 0 then p := maal(p,y);
    m := m shr 1;
    y := maal(y,y);
  end;
  macht := decimaal(p);
end;

procedure doen;
var
  ff : TextFile;
begin
  AssignFile(ff,'drie5.txt');
  Rewrite(ff);
  Writeln(ff,macht(3,100000));
  CloseFile(ff);
end;

procedure lezen;
var
  ff : TextFile;
  alles : string;
begin
  AssignFile(ff,'drie5.txt');
  Reset(ff);
  Readln(ff,alles);
  CloseFile(ff);
  Writeln(Length(alles));
  Writeln(alles[1],' ',alles[23857],' ',alles[47713]);
end;

begin
  doen;
  lezen;
end.