#include <bits/stdc++.h>
using namespace std;
//2^10=1024
int a[1030][1030];
void paint(int x1, int y1, int x2, int y2) {
//涂 只涂左上角
//同时避免出现右下角单个数被涂 加上if判断 也就是说 操作最小单元是2*2的
if (x2 - x1 >= 1 && y2 - y1 >= 1) {
//注意i起始不是1而是x1,j起始不是1而是y1
for (int i = x1; i <= (x1 + x2) / 2; i++) {
for (int j = y1; j <= (y1 + y2) / 2; j++) {
a[i][j] = 0;
}
}
}
//涂剩下3个的左上角
if (x1 != x2 && y1 != y2) {
//涂右上方块
paint(x1, (y1 + y2) / 2, (x1 + x2) / 2, y2);
//涂左下方块
paint((x1 + x2) / 2, y1, x2, (y1 + y2) / 2);
//涂右下方块
//别忘了+1 不+1就涂到左上的边了
paint((x1 + x2) / 2 + 1, (y1 + y2) / 2 + 1, x2, y2);
}
}
int main() {
int n;
cin >> n;
//先涂满1
for (int i = 1; i <= pow(2, n); i++) {
for (int j = 1; j <= pow(2, n); j++) {
a[i][j] = 1;
}
}
//开始涂0
paint(1, 1, pow(2, n), pow(2, n));
//输出
for (int i = 1; i <= pow(2, n); i++) {
for (int j = 1; j <= pow(2, n); j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}