#include <iostream>
#include<bits/stdc++.h>
#define maxsize 100
using namespace std;
typedef struct{
int *data;
int front;
int rear;
}myqueue;
void init(myqueue &m){
m.data=new int[maxsize];
m.front=m.rear=0;
}
void enqueue(myqueue &m,int x){
m.data[m.rear]=x;
m.rear=(m.rear+1)%maxsize;
}
int gettop(myqueue m){
return m.data[m.front];
}
void dequeue(myqueue &m){
m.front=(m.front+1)%maxsize;
}
int queuelen(myqueue m){
return (m.rear-m.front+maxsize)%maxsize;
}
int main()
{
myqueue m,t;
int n,i=1,x;
cin>>n;
init(m);
init(t);
while(i<=n){
for(int j=0;j<=n-i;j++)
printf(" ");
if(i==1){
enqueue(m,0);
enqueue(m,1);
enqueue(m,0);
int a=1;
// for(int j=0;j<=n-i;j++)
// printf(" ");
printf("%d \n",a);
}else{
// for(int j=0;j<=n-i;j++)
// printf(" ");
enqueue(t,0);
while(queuelen(m)!=1){
x=gettop(m);
// printf("%d**\n",x);
dequeue(m);
x+=gettop(m);
printf("%d ",x);
enqueue(t,x);
}
// x=gettop(m);
// printf("%d ",x);
enqueue(t,0);
cout<<endl;
m=t;
init(t);
}
i++;
}
//cout << "Hello world!" << endl;
return 0;
}