{ MaxonPASCAL3-Anpassung / Test:  Falk Zühlsdorff (PackMAN) 1994 }

Program Bernoulli(input,output);

{ Long-Integer-Version }

Const max = 50;

Type Bruch = Record z,n:longint End;

Var B:Array[0..max] Of Bruch;
    anz,m,i:integer;
    j,k:longint;


Function Binoko(n,k:integer):longint;
  Var nf,kf,nkf:longint;
      i:integer;
  Begin
    nf:=1; kf:=1; nkf:=1;
    For i:=1 To n Do
      Begin
        nf:=nf*i;
        If i=k   Then  kf:=nf;
        If i=n-k Then nkf:=nf
      End;
    Binoko:=nf Div (kf*nkf)
  End;

Function ggt(a,b:longint):longint;
  Var c:longint;
  Begin
    While b<>0 Do
      Begin
        c:=a mod b;
        a:=b;
        b:=c
      End;
    ggt:=a
  End;

Procedure Add(Var b:Bruch; x,y:longint);
  Var g:longint;
  Begin
    If x<>0 Then
      If b.z=0 Then
        Begin b.z:=x; b.n:=y End
      Else
      Begin
        g:=ggt(b.n,y);
        b.z:=(y div g)*b.z + (b.n div g)*x;
        b.n:=(b.n div g)*y;
        If b.n<0 Then Begin b.z:=-b.z;b.n:=-b.n End;
        If b.z=0 Then b.n:=1
         Else
          Begin
            g:=ggt(abs(b.z),b.n);
            b.n := b.n div g;
            b.z := b.z div g
          End
      End
  End;

Begin
  write('Anzahl:');readln(anz);
  writeln;
  B[0].z:=1;
  B[0].n:=1;
  For m:=1 to anz do
    Begin
      B[m].z:=0;
      B[m].n:=1;
      For i:=0 to m-1 Do
        Begin
          j:= binoko(m+1,i)*B[i].z;
          If j<>0 Then
            Begin
              k:= ggt(abs(j),abs(B[i].n));
              add(b[m], j div k, B[i].n div k)
            End
        End;
      If B[m].z=0 Then k:=m+11 Else k:=ggt(abs(B[m].z), m+1);
      B[m].z := (-B[m].z) Div k;
      B[m].n := B[m].n * ((m+1) Div k);
      write('B(', m:2 , ') = ' , B[m].z:10);
      If B[m].z=0 Then writeln Else writeln('/',B[m].n:1)
    End;
  writeln
End.

