/*用队列生成杨辉三角*/
#include <iostream>
using namespace std;
typedef struct Node{
int element;
Node* pNext;
}Node,*LinkList;
typedef struct
{
LinkList head;
LinkList tail;
}Queue;
void InitQueue(Queue& queue)
{
queue.head=(LinkList)malloc(sizeof(Node));
queue.head->pNext=NULL;
queue.tail=queue.head;
}
void EnQueue(Queue& queue,int element)
{
LinkList temp=(LinkList)malloc(sizeof(Node));
temp->element=element;
temp->pNext=NULL;
queue.tail->pNext=temp;
queue.tail=temp;
}
void DeQueue(Queue& queue,int &element)
{
if (queue.head->pNext==queue.tail)
{
element=queue.tail->element;
free(queue.tail);
queue.tail=queue.head;
return;
}
LinkList temp=queue.head->pNext;
element=temp->element;
queue.head->pNext=temp->pNext;
free(temp);
}
int EmptyQueue(Queue queue)
{
if (queue.head==queue.tail)
{
return 1;
}
return 0;
}
void DestroyQueue(Queue& queue)
{
free(queue.head);
queue.head=queue.tail=NULL;
}
int GetHead(Queue queue)
{
return queue.head->pNext->element;
}
void main()
{
int N;
cin>>N;
Queue queue;
InitQueue(queue);
EnQueue(queue,1);
EnQueue(queue,1);
int flag=0;
for (int i=1;i<N;i++ )
{
while(true)
{
int element;
DeQueue(queue,element);
cout<<element<<" ";
if (element==1)
{
if (flag==0)
{
EnQueue(queue,1);
EnQueue(queue,element+GetHead(queue));
flag++;
}else
{
flag=0;
EnQueue(queue,1);
break;
}
}else
EnQueue(queue,element+GetHead(queue));
}
cout<<endl;
}
while (!EmptyQueue(queue))
{
int element;
DeQueue(queue,element);
cout<<element<<" ";
}
cout<<endl;
DestroyQueue(queue);
}