program Cat;
uses SysUtils;
var
i: Integer ;
s: String ;
function Catalan ( n : Integer ) : Integer ;
function Binom ( n, k : Integer ) : Integer ;
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 *)
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 .
cHJvZ3JhbSBDYXQ7Cgp1c2VzIFN5c1V0aWxzOwp2YXIKCWk6IEludGVnZXI7CglzOiBTdHJpbmc7CglmdW5jdGlvbiBDYXRhbGFuIChuIDogSW50ZWdlcikgOiBJbnRlZ2VyOwoJCWZ1bmN0aW9uIEJpbm9tIChuLCBrIDogSW50ZWdlcikgOiBJbnRlZ2VyOwoJCQlmdW5jdGlvbiBGYWN0b3JpYWwgKG4gOiBJbnRlZ2VyKSA6IEludDY0OwoJCQliZWdpbgoJCQkJaWYgKG4gPCAyKSB0aGVuCgkJCQkJRmFjdG9yaWFsIDo9IDEKCQkJCWVsc2UKCQkJCQlGYWN0b3JpYWwgOj0gbiAqIEZhY3RvcmlhbChuIC0gMSk7CgkJCWVuZDsKCQliZWdpbgoJCSAgICAoKiBUaGUgLyBjaGFyYWN0ZXIgZG9lcyByZWFsIGRpdmlzaW9uLiBUbyBkbyBpbnRlZ2VyIGRpdmlzaW9uLCB1c2UgZGl2ICopCgkJCUJpbm9tIDo9IEZhY3RvcmlhbChuKSBkaXYgKEZhY3RvcmlhbChrKSAqIEZhY3RvcmlhbChuIC0gaykpOwoJCWVuZDsKCWJlZ2luCgkJbiA6PSBCaW5vbSgyICogbiwgbikgZGl2IChuICsgMSk7CgllbmQ7CmJlZ2luCglmb3IgaSA6PSAwIHRvIDkgZG8KCWJlZ2luCgkJcyA6PSBmb3JtYXQoJ0NhdGFsYW4gbnVtYmVyICVkIGlzICVkJywgW2ksIENhdGFsYW4oaSldKTsKCQl3cml0ZWxuKHMpOwoJZW5kOwplbmQuCgo=