/*
//memoization
#include<stdio.h>
int main()
{
int n,i,a,j,max=-10000000;
int arr[100001]= {};
int memo[100001]= {}; //memo[i]= arr[i]까지의 연속 최대합
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&arr[i]);
}
for(i=1; i<=n; i++)
{
memo[1]=arr[1];
if(memo[i-1]>0)
memo[i]=memo[i-1]+arr[i];
else
memo[i]=arr[i];
if(memo[i]>max)
{
max=memo[i];
}
}
printf("%d",max);
}
#include<stdio.h>
int main()
{
int n,i;
double max;
double arr[10001];
double memo[10001];
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%lf",&arr[i]);
}
max=memo[1]=arr[1];
for(i=2; i<=n; i++)
{
if(memo[i-1]>1)
memo[i]=memo[i-1]*arr[i];
else
memo[i]=arr[i];
if(memo[i]>max)
{
max=memo[i];
}
}
printf("%.3lf",max);
}
*/
#include<stdio.h>
int memo[51][51]={};
int fib(int n,int m)
{
if(memo[n][m]!=0) return memo[n][m];
if(n==1||m==1) return memo[n][m]=1;
return memo[n][m]=(fib(n-1,m)+fib(n,m-1))%100000000;
}
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
printf("%d ",fib(i,j));
}
printf("\n");
}
return 0;
}