卡特兰数三大公式
C(n)=C(n-1)*(4*n-2)/(n+1)
C(n)=C(2n-1,n+1)-C(2n-1,n-1)
C(n)=C(2n,n)/(n+1)
Program p2084;
Const
F=10000;
Type
arr=record
a:array[1..10000] of longint;
len:longint;
end;
var
n,i,j:longint;
c:array[1..101] of arr;
Procedure Mulpily(a:arr;b:longint;var c:arr);
var
i,j:longint;
begin
fillchar(c,sizeof(c),0);
for i:=1 to a.len do
begin
inc(c.a[i],a.a[i]*b);
inc(c.a[i+1],c.a[i] div F);
c.a[i]:=c.a[i] mod F;
end;
c.len:=a.len;
while c.a[c.len+1]>0 do
begin
inc(c.len);
inc(c.a[c.len+1],c.a[c.len] div F);
c.a[c.len]:=c.a[c.len] mod F;
end;
while (c.len>1) and (c.a[c.len]=0) do dec(c.len);
end;
Procedure Divede(a:arr;b:longint;var c:arr);
var
i,j,d:longint;
begin
fillchar(c,sizeof(c),0);
d:=0;
for i:=a.len downto 1 do
begin
d:=d*F+a.a[i];
c.a[i]:=d div b;
d:=d mod b;
end;
c.len:=a.len;
while (c.len>1) and (c.a[c.len]=0) do dec(c.len);
end;
Procedure prin(a:arr);
var
i,j:longint;
begin
write(a.a[a.len]);
for i:=a.len-1 downto 1 do
begin
if a.a[i]<1000 then write('0');
if a.a[i]<100 then write('0');
if a.a[i]<10 then write('0');
write(a.a[i]);
end;
writeln;
end;
begin
fillchar(c,sizeof(c),0);
c[1].len:=1;
c[1].a[1]:=1;
c[2].len:=1;
c[2].a[1]:=1;
for i:=3 to 101 do
begin
Mulpily(c[i-1],4*i-2,c[i]);
divede(c[i],i+1,c[i]);
end;
read(n);
while (n<>-1) do
begin
prin(c[n+1]);
read(n);
end;
end.