#include constexpr int MAX_N = 1000 + 2; constexpr int MAX_ID = 10; constexpr char *ans[4] = { "1\n0\n0\n0\n1\n1", "10\n01\n00\n01\n10\n11", "024\n135\n135\n445\n232\n100", "0223\n1554\n1005\n2334\n1664\n6777" }; int t = 0; char s[6][MAX_N]; void placeVertical(int x, int y, int _t=-1) { int id = _t < 0 ? t : _t; for (int i = 0; i < x - 2; i++) { s[i][y] = s[i + 3][y]; } for (int i = x; i > x - 3; i--) { s[i][y] = '0' + id; } t = (t + 1) % MAX_ID; } void placeHorizonal(int x, int y, int _t=-1) { int id = _t < 0 ? t : _t; for (int i = 0; i < x; i++) { for (int j = y; j < y + 3; j++) { s[i][j] = s[i + 1][j]; } } for (int j = y; j < y + 3; j++) { s[x][j] = '0' + id; } t = (t + 1) % MAX_ID; } int main() { int n; scanf("%d", &n); if (n <= 4) { return puts(ans[n - 1]), 0; } placeHorizonal(5, 0); placeVertical(5, 0); placeHorizonal(4, 0); placeVertical(4, 1); placeHorizonal(3, 0); int y = 2; n -= 2; while (n != 1 && n != 3 && n != 4 && n != 6) { placeHorizonal(5, y); placeVertical(5, y + 1); placeHorizonal(4, y); placeHorizonal(5, y + 2); placeHorizonal(5, y); placeHorizonal(5, y + 2); placeVertical(5, y + 3); placeHorizonal(4, y + 2); y += 4; n -= 4; } if (n == 1) { placeVertical(5, y); } if (n == 3) { placeHorizonal(5, y); placeVertical(5, y + 1); placeHorizonal(4, y); placeVertical(4, y + 2); placeHorizonal(3, y); } if (n == 4) { for (int i = 0; i < 3; i++) { placeHorizonal(5, y); placeHorizonal(5, y + 1); } placeVertical(5, y + 3); } if (n == 6) { placeHorizonal(5, y); placeHorizonal(5, y + 1); placeHorizonal(5, y + 3, (t + 5) % MAX_ID); placeVertical(5, y + 5, (t + 5) % MAX_ID); placeHorizonal(4, y + 3); placeVertical(4, y + 4); placeHorizonal(3, y + 3); placeHorizonal(5, y + 1, (t + 6) % MAX_ID); placeHorizonal(5, y, (t + 6) % MAX_ID); placeHorizonal(5, y + 1); placeHorizonal(5, y); } for (int i = 0; i < 6; i++) { printf("%s\n", s[i]); } return 0; }