M00PAIR - 0 0 Pairs
Tác giả: flashmt
Ngôn ngữ: Pascal
const fi='';
fo='';
maxn=1000;
base=1000000000;
digit=9;
type bignum=array[0..40] of longint;
var a,b:array[0..maxn] of bignum;
t,i,l,j,num,k:longint;
c:array[1..10000] of longint;
s:string;
procedure double(k:integer);
var i:integer; mem:byte;
begin
b[k,0]:=b[k-1,0];
mem:=0;
for i:=1 to b[k,0] do
begin
b[k,i]:=b[k-1,i]+b[k-1,i]+mem;
if b[k,i]<base then mem:=0
else
begin
b[k,i]:=b[k,i]-base; mem:=1;
end;
end;
if mem>0 then
begin
inc(b[k,0]);
b[k,b[k,0]]:=mem;
end;
end;
procedure plus(k:integer);
var i:integer; mem:byte;
begin
if a[k-2,0]<=b[k-2,0] then a[k,0]:=b[k-2,0]
else a[k,0]:=a[k-2,0];
mem:=0;
for i:=1 to a[k,0] do
begin
a[k,i]:=a[k-2,i]+b[k-2,i]+mem;
if a[k,i]<base then mem:=0
else
begin
a[k,i]:=a[k,i]-base; mem:=1;
end;
end;
if mem>0 then
begin
inc(a[k,0]);
a[k,a[k,0]]:=mem;
end;
end;
procedure init;
var i:integer;
begin
b[0,0]:=1; b[1,0]:=1; b[0,1]:=1; b[1,1]:=1;
a[1,0]:=1;
for i:=2 to j do
begin
double(i);
plus(i);
end;
end;
begin
assign(input,fi);
reset(input);
assign(output,fo);
rewrite(output);
i:=0; j:=0;
while not eof(input) do
begin
inc(i);
readln(c[i]);
if c[i]>j then j:=c[i];
end;
num:=i;
init;
for k:=1 to num do
begin
t:=c[k];
for i:=a[t,0] downto 1 do
begin
if i<a[t,0] then
begin
str(a[t,i],s);
l:=length(s);
for j:=l+1 to digit do write(0);
end;
write(a[t,i]);
end;
writeln;
end;
close(output);
close(input);
end.