#include <stdio.h>

void Enqueue(int *Q,int *f,int *r,int item)
{
	if(*r==-1)
		(*f)++;
	Q[++(*r)]=item;
}

int Dequeue(int *Q,int *f,int *r)
{
	int ret=Q[*f];
	if(*f==*r)
	{
		*f=-1;*r=-1;
	}
	else
		(*f)++;
	return ret;
}

int isEmpty(int *r)
{
	if(*r==-1)
		return 1;
	return 0;
}

void printPascalTriangle(int n)
{
	int line=1,Q[50]={0},f=-1,r=-1,prev,t;
	
	Enqueue(Q,&f,&r,1);
	Enqueue(Q,&f,&r,0);

	prev=0;
	while(line!=n)
	{
		t = Dequeue(Q,&f,&r);

		if( !t )
		{
			line++;
			prev = 0;
			Enqueue(Q,&f,&r,1);

			if(!isEmpty(&r))
				Enqueue(Q,&f,&r,0);

			printf("\n");
		}
		else
		{
			printf("%d ", t);
			Enqueue(Q,&f,&r,prev+t);
			prev = t;
		}
	}
}

int main()
{
	int n;
	scanf("%d",&n);

	printPascalTriangle(n);
	return 0;
}