program Cat;
uses SysUtils;
var
i: Integer ;
s: String ;
function Catalan ( n : Integer ) : Integer ;
function Binom ( n, k : Integer ) : Int64;
function Factorial ( n : Integer ) : Int64;
begin
if ( n < 2 ) then
Factorial : = 1
else
Factorial : = n * Factorial( n - 1 ) ;
end ;
begin
(* The / character does real division. To do integer division, use div *)
writeln ( Factorial( n) div ( Factorial( k) * Factorial( n - k) ) ) ;
Binom : = Factorial( n) div ( Factorial( k) * Factorial( n - k) ) ;
end ;
begin
n : = Binom( 2 * n, n) div ( n + 1 ) ;
end ;
begin
for i : = 0 to 9 do
begin
s : = format( 'Catalan number %d is %d' , [ i, Catalan( i) ] ) ;
writeln ( s) ;
end ;
end .
cHJvZ3JhbSBDYXQ7Cgp1c2VzIFN5c1V0aWxzOwp2YXIKCWk6IEludGVnZXI7CglzOiBTdHJpbmc7CglmdW5jdGlvbiBDYXRhbGFuIChuIDogSW50ZWdlcikgOiBJbnRlZ2VyOwoJCWZ1bmN0aW9uIEJpbm9tIChuLCBrIDogSW50ZWdlcikgOiBJbnQ2NDsKCQkJZnVuY3Rpb24gRmFjdG9yaWFsIChuIDogSW50ZWdlcikgOiBJbnQ2NDsKCQkJYmVnaW4KCQkJCWlmIChuIDwgMikgdGhlbgoJCQkJCUZhY3RvcmlhbCA6PSAxCgkJCQllbHNlCgkJCQkJRmFjdG9yaWFsIDo9IG4gKiBGYWN0b3JpYWwobiAtIDEpOwoJCQllbmQ7CgkJYmVnaW4KCQkgICAgKCogVGhlIC8gY2hhcmFjdGVyIGRvZXMgcmVhbCBkaXZpc2lvbi4gVG8gZG8gaW50ZWdlciBkaXZpc2lvbiwgdXNlIGRpdiAqKQoJCSAgICB3cml0ZWxuKEZhY3RvcmlhbChuKSBkaXYgKEZhY3RvcmlhbChrKSAqIEZhY3RvcmlhbChuIC0gaykpKTsKCQkJQmlub20gOj0gRmFjdG9yaWFsKG4pIGRpdiAoRmFjdG9yaWFsKGspICogRmFjdG9yaWFsKG4gLSBrKSk7CgkJZW5kOwoJYmVnaW4KCQluIDo9IEJpbm9tKDIgKiBuLCBuKSBkaXYgKG4gKyAxKTsKCWVuZDsKYmVnaW4KCWZvciBpIDo9IDAgdG8gOSBkbwoJYmVnaW4KCQlzIDo9IGZvcm1hdCgnQ2F0YWxhbiBudW1iZXIgJWQgaXMgJWQnLCBbaSwgQ2F0YWxhbihpKV0pOwoJCXdyaXRlbG4ocyk7CgllbmQ7CmVuZC4KCg==