/* -*- coding: utf-8 -*- * * 3734.cc: No.3734 No Flat Notes - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_H = 500; const int MAX_W = 500; /* typedef */ /* global variables */ int as[MAX_H][MAX_W]; /* subroutines */ void forward(int w, int &y, int &x, int &dx) { x += dx; if (x >= w) x = w - 1, dx = -1, y++; else if (x < 0) x = 0, dx = 1, y++; } bool check(int h, int w, int m) { int dxs[] = {1, 0, -1, 0}, dys[] = {0, -1, 0, 1}; int yc = 0, tc = 0; for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) { int nbc = 0, lc = 0, gc = 0; for (int di = 0; di < 4; di++) { int vy = y + dys[di], vx = x + dxs[di]; if (vy >= 0 && vy < h && vx >= 0 && vx < w) { nbc++; if (as[vy][vx] < as[y][x]) lc++; else gc++; } } if (nbc == lc) yc++; else if (nbc == gc) tc++; } printf(" check(%d,%d,%d) = %d,%d\n", h, w, m, yc, tc); return yc == m && tc == m; } /* main */ int main() { int h, w, m; scanf("%d%d%d", &h, &w, &m); if (m <= 0 || m * 2 > h * w) { puts("-1"); return 0; } int mn = 1, mx = h * w; int y = 0, x = 0, dx = 1; if (! ((h * w) & 1)) { for (int i = 1; i < m; i++) { as[y][x] = mn++; forward(w, y, x, dx); as[y][x] = mx--; forward(w, y, x, dx); } while (y < h) { as[y][x] = mn++; forward(w, y, x, dx); } } else { for (int i = 0; i < m; i++) { as[y][x] = mn++; forward(w, y, x, dx); as[y][x] = mx--; forward(w, y, x, dx); } as[y][x] = mn + 1; forward(w, y, x, dx); as[y][x] = mn; forward(w, y, x, dx); mn += 2; while (y < h) { as[y][x] = mn++; forward(w, y, x, dx); } } for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) printf("%d%c", as[y][x], (x + 1 < w) ? ' ' : '\n'); //assert(check(h, w, m)); return 0; }