#include
#include
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define MAXQSIZE 100
typedef int Status;
typedef struct{
int *base;
int front;
int rear;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.base=(int *)malloc(MAXQSIZE*sizeof(int));
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
Status EnQueue(SqQueue &Q,int e)
{
if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue &Q,int &e)
{
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
Status GetHead(SqQueue Q,int &e)
{
e=Q.base[Q.front];
return OK;
}
void Print(int n)
{
SqQueue Q;
int i,s,e;
InitQueue(Q);
EnQueue(Q,0);
EnQueue(Q,1);
EnQueue(Q,0);
for(i=1;i<=n;i++)
{
do
{
DeQueue(Q,s);
GetHead(Q,e);
if (e!=0)
printf ("%d ", e);
EnQueue(Q,s+e);
}while(e!=0);
printf("\n");
EnQueue(Q,0);
}
}
int main()
{
int n;
scanf("%d",&n);
Print(n);
return 0;
}