#include #include #include using namespace std; int main() { int n, m, k; cin >> n >> m >> k; vector> a(n, vector (n)); vector> cntk(k, vector (k)); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { ++cntk[i % k][j % k]; } } vector>> p; for (int i = 0; i < k; ++i) { for (int j = 0; j < k; ++j) { p.push_back({cntk[i][j], {i, j}}); } } sort(p.begin(), p.end()); vector cnt(m + 1, n * n / m); cnt[0] = 0; for (int i = 0; i < m; ++i) { auto [c, xy] = p[i]; if (c > cnt[i + 1]) { cout << -1 << endl; return 0; } c -= cnt[i + 1]; auto [bx, by] = xy; for (int v = bx; v < n; v += k) { for (int j = by; j < n; j += k) { a[v][j] = i + 1; } } } int num = 0; vector nok; for (int i = 1; i <= m; ++i) { if (cnt[i] < 0) { cout << -1 << endl; return 0; } while (cnt[i] > 0) { --cnt[i]; nok.push_back(i); } } for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (a[i][j] == 0) { a[i][j] = nok.back(); nok.pop_back(); } } } for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cout << a[i][j] << " \n"[j == n - 1]; } } }