#include #define fi first #define se second #define rep(i,s,n) for (int i = (s); i < (n); ++i) #define rrep(i,g,n) for (int i = (n)-1; i >= (g); --i) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define len(x) (int)(x).size() #define dup(x,y) (((x)+(y)-1)/(y)) #define pb push_back #define eb emplace_back #define Field(T) vector> using namespace std; using ll = long long; using ull = unsigned long long; template using pq = priority_queue,greater>; using P = pair; templatebool chmax(T&a,T b){if(abool chmin(T&a,T b){if(b p(h*w); iota(all(p), 0); do { vector> a(h, vector(w)); rep(i,0,h) rep(j,0,w) a[i][j] = p[i*w+j]; int c1 = 0, c2 = 0; rep(i,0,h) rep(j,0,w) { int x = 0, y = 0; if (i+1 < h && a[i][j] < a[i+1][j]) ++x; if (j+1 < w && a[i][j] < a[i][j+1]) ++x; if (i > 0 && a[i][j] < a[i-1][j]) ++x; if (j > 0 && a[i][j] < a[i][j-1]) ++x; if (i+1 < h && a[i][j] > a[i+1][j]) ++y; if (j+1 < w && a[i][j] > a[i][j+1]) ++y; if (i > 0 && a[i][j] > a[i-1][j]) ++y; if (j > 0 && a[i][j] > a[i][j-1]) ++y; if (x > 0 && y == 0) ++c1; if (y > 0 && x == 0) ++c2; } if (c1 == m && c2 == m) { rep(i,0,h) { rep(j,0,w) { cout << a[i][j]+1 << " "; } cout << endl; } return; } } while(next_permutation(all(p))); } int main() { int h, w, m; cin >> h >> w >> m; if ((h*w)%2 == 0) { if (m == 0) { cout << -1 << endl; return 0; } int is_flip = 0; if (h%2 == 1 || w == 2) { swap(h, w); is_flip = 1; } vector> a(h, vector(w)); if (m >= h/2) { int val = 0; rep(i,0,w) { rep(j,0,h/2) { if (i%2 == 0) a[2*j][i] = ++val; else a[h-2*j-1][i] = ++val; } } val = h*w; rep(i,0,w) { rep(j,0,h/2) { if (i%2 == 0) a[2*j+1][i] = val--; else a[h-2*j-2][i] = val--; } } // rep(i,0,h) { // rep(j,0,w) cout << a[i][j] << " "; // cout << endl; // } int c = (h*w-2*m)/2; int k = ((h*w-2*m)/2)/(h/2); // cout << k << endl; if ((w-k-1)%2 == 1) { rep(i,0,h/2) { if (i < c%(h/2)) { swap(a[2*i][w-k-1], a[2*i+1][w-k-1]); rep(j,0,k) { if (j%2 == 1) swap(a[2*i][w-k+j], a[2*i+1][w-k+j]); } } else { rep(j,0,k) { if (j%2 == 0) swap(a[2*i][w-k+j], a[2*i+1][w-k+j]); } } } } else { rrep(i,0,h/2) { if ((h/2-i-1) < c%(h/2)) { swap(a[2*i][w-k-1], a[2*i+1][w-k-1]); rep(j,0,k) { if (j%2 == 1) swap(a[2*i][w-k+j], a[2*i+1][w-k+j]); } } else { rep(j,0,k) { if (j%2 == 0) swap(a[2*i][w-k+j], a[2*i+1][w-k+j]); } } } } } else { int val = 0; rep(i,0,w) { rep(j,0,h) { if (i%2 == 0) a[j][i] = ++val; else a[h-j-1][i] = ++val; } } rep(i,0,m) { if (i%2 == 0) { a[m-i-1][0] = i+1; a[(w%2 == 0 ? m-i-1 : h-(m-i-1)-1)][w-1] = h*w-i; } else { a[m-i-1][0] = h*w-i; a[(w%2 == 0 ? m-i-1 : h-(m-i-1)-1)][w-1] = i+1; } } } if (is_flip) { vector> na(w, vector(h)); rep(i,0,h) rep(j,0,w) na[j][i] = a[i][j]; swap(a, na), swap(h, w); } rep(i,0,h) { rep(j,0,w) cout << a[i][j] << " "; cout << endl; } return 0; } // naive(h, w, m); int is_flip = 0; if (h < w) swap(h, w), is_flip = 1; vector> a(h, vector(w)); if (w == 1) { if (h == 1) { a[0][0] = 1; } else { if (m == 0) { cout << -1 << endl; return 0; } rep(i,0,h) a[i][0] = i+1; rep(i,0,m) { if (i%2 == 0) { a[m-i-1][0] = i+1; a[h-(m-i-1)-1][0] = h*w-i; } else { a[m-i-1][0] = h*w-i; a[h-(m-i-1)-1][0] = i+1; } } } } else { if (m == 0) { cout << -1 << endl; return 0; } if (m <= h) { int val = 0; rep(i,0,w) { rep(j,0,h) { if (i%2 == 0) a[j][i] = ++val; else a[h-j-1][i] = ++val; } } rep(i,0,m) { if (i%2 == 0) { a[m-i-1][0] = i+1; a[(w%2 == 0 ? m-i-1 : h-(m-i-1)-1)][w-1] = h*w-i; } else { a[m-i-1][0] = h*w-i; a[(w%2 == 0 ? m-i-1 : h-(m-i-1)-1)][w-1] = i+1; } } } else if (m < ((h-1)/2)*w) { int flag = 0; if (h%4 == 3 && m == ((h-1)/2)*w-1) { --m; flag = 1; } int val = 0; rep(i,0,h) { rep(j,0,w) { if (i%2 == 0) a[i][j] = ++val; else a[i][w-j-1] = ++val; } } int cnt = m/2; // cout << cnt << endl; int i0 = -1, j0 = -1; rep(i,0,h) { if (i%2 == 0) { rep(j,0,w) { if (j%2 == 1) { if (cnt) swap(a[i][j], a[h-i-1][w-j-1]), --cnt; if (cnt == 0 && i0 == -1) i0 = i, j0 = j; } } } else { rrep(j,0,w) { if (j%2 == 0) { if (cnt) swap(a[i][j], a[h-i-1][w-j-1]), --cnt; if (cnt == 0 && i0 == -1) i0 = i, j0 = j; } } } } // cout << i0 << " " << j0 << endl; if ((m < ((h-1)/2)*w && m%2 == 0) || flag) { int i1 = 0, j1 = 0, j2 = 0; if (flag) { i1 = (h-3)/2, j1 = w-1, j2 = w-2; } else if (i0%2 == 0) { if (j0 == w-2) { i1 = i0+1, j1 = w-2, j2 = w-1; } else { i1 = i0, j1 = j0+1, j2 = j0+2; } } else { if (j0 == 0) { i1 = i0+1, j1 = 0, j2 = 1; } else { i1 = i0, j1 = j0-1, j2 = j0-2; } } // cout << i1 << " " << j1 << " " << j2 << endl; swap(a[i1][j1], a[i1][j2]); swap(a[h-i1-1][w-j1-1], a[h-i1-1][w-j2-1]); } } else { int v1 = 0, v2 = h*w; rep(i,0,h) rep(j,0,w) { if ((i+j)%2 == 0) a[i][j] = ++v1; else a[i][j] = v2--; } sort(all(a[h-1])); int d = m-((h-1)/2)*w; if (2*m == h*w-1) { cout << -1 << endl; return 0; } swap(a[h-1][0], a[h-1][1]); rep(i,0,d) { swap(a[h-1][w-(2*i)-1], a[h-1][w-(2*i+1)-1]); } } } if (is_flip) { vector> na(w, vector(h)); rep(i,0,h) rep(j,0,w) na[j][i] = a[i][j]; swap(a, na), swap(h, w); } rep(i,0,h) { rep(j,0,w) cout << a[i][j] << " "; cout << endl; } return 0; }