/* -*- coding: utf-8 -*- * * 3721.cc: No.3721 Absurd Basic Constructive - yukicoder */ #include #include #include using namespace std; /* constant */ const int MAX_N = 1000; /* typedef */ /* global variables */ int as[MAX_N][MAX_N], xs[MAX_N + 1][MAX_N + 1]; /* subroutines */ bool check(int n, int k) { int cnt = 0; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { xs[i + 1][j + 1] = max({xs[i][j + 1], xs[i + 1][j], as[i][j]}); if (xs[i + 1][j + 1] == as[i][j]) cnt++; } //printf(" k=%d, cnt=%d\n", k, cnt); return cnt == k; } /* main */ int main() { int n, k; scanf("%d%d", &n, &k); if (k <= 0) { puts("-1"); return 0; } int nn = n * n; for (int i = 0, a = nn - k + 1; i < n; i++) for (int j = 0; j < n; j++) { as[i][j] = a++; if (a > nn) a = 1; } for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) printf("%d%c", as[i][j], (j + 1 < n) ? ' ' : '\n'); //assert(check(n, k)); return 0; }