#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define error 1
#define ok 0
typedef int elem;
typedef int status;
typedef struct qnode
{
elem data;
struct qnode *next;
}qnode,*queueptr;
typedef struct
{
queueptr front;
queueptr rear;
}linkqueue;
status init_queue(linkqueue &q)
{
q.front=q.rear=(queueptr)malloc(sizeof(qnode));
q.rear->next=NULL;
return ok;
}
status push_queue(linkqueue &q,elem e)
{
q.rear->data=e;
queueptr s;
s=(queueptr)malloc(sizeof(qnode));
q.rear->next=s;
q.rear=s;
q.rear->next=NULL;
return ok;
}
status pop_queue(linkqueue &q)
{
queueptr t;
t=q.front->next;
q.front=t;
return ok;
}
void print_yanghui(linkqueue &q,elem n)
{
queueptr t;
t=q.front->next;
printf("%d",t->data);
t=t->next;
while(t->next!=NULL)
{
if(t->data!=0)
{
if(n>=1&&n<=5)
printf("%2d",t->data);
else if(n>=6&&n<=9)
printf("%3d",t->data);
else if(n>=10&&n<=13)
printf("%4d",t->data);
else if(n>=14&&n<=16)
printf("%5d",t->data);
else if(n>=17&&n<=20)
printf("%6d",t->data);
else if(n>=21&&n<=23)
printf("%7d",t->data);
else if(n>=24&&n<=26)
printf("%8d",t->data);
else if(n>=27&&n<=30)
printf("%9d",t->data);
}
else
printf("");
t=t->next;
}
printf("\n");
}
void yanghui_queue(elem n)
{
elem m=n;
linkqueue q;
init_queue(q);
for(int i=1;i<=n;i++)
{
if(i==1)
{
push_queue(q,0);
push_queue(q,1);
push_queue(q,0);
print_yanghui(q,m);
}
else if(i>1)
{
for(int j=1;j<=i+2;j++)
{
if(j==1) push_queue(q,0);
else if(j==i+2)
{
push_queue(q,0);
pop_queue(q);
}
else
{
push_queue(q,q.front->data+q.front->next->data);
pop_queue(q);
}
}
print_yanghui(q,m);
}
}
}
int main()
{
elem n;
while(scanf("%d",&n)!=EOF)
{
yanghui_queue(n);
printf("\n");
}
return 0;
}