#include<stdio.h>
int a[30][30] = { 0 };
void init() {
int i, j;
for (i = 0; i < 30; i++) {
a[i][0] = 1;
a[i][i] = 1;
}
}
void yanghui(int start, int end) {
int i, j;
for (i = start; i < end; i++) {
for (j = 1; j < i; j++) {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
}
int main() {
int n, m;
int max = 0;
int i, j;
init();
while (~scanf("%d", &n)) {
if (n > max) {//为避免重复计算,将之前已经计算的保存下来,当需要输出的大于之前已经保存的最大值时
//才需要重新计算,否则可以直接输出
yanghui(max, n);
max = n - 1;
}
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
if (j != i) {
printf("%d ", a[i][j]);
}
else {
printf("%d", a[i][j]);
}
}
printf("\n");
}
printf("\n");
}
return 0;
}