// 二時間くらい寝落ちしたことを後悔している // 赤-青を-N~Nの範囲でとってx+yが同じラインを同じ値で適当に詰めてみると // なぜか上手くいっているように見えるので、それを実装する #include #include #include #define rep(i, n) for(i = 0; i < n; i++) using namespace std; typedef pair P; int main() { int n; cin >> n; int i, j; vector> a(n, vector(n)); rep(i, n) { rep(j, n) { if (i + j <= n - 1) { int d = n - 1 - i - j; if (d % 2 == 1) d *= -1; a[i][j] = d; } else { int d = i + j - n + 1; if (d % 2 == 0) d *= -1; a[i][j] = d; } } } map> mp; vector> red(n, vector(n)); vector> blue(n, vector(n)); rep(i, n) rep(j, n) mp[i - j].push_back(P(i + 1, j + 1)); rep(i, n) { rep(j, n) { P val = mp[a[i][j]].back(); red[i][j] = val.first; blue[i][j] = val.second; mp[a[i][j]].pop_back(); } } rep(i, n) { rep(j, n) { cout << red[i][j]; if (j + 1 < n) cout << " "; } cout << endl; } rep(i, n) { rep(j, n) { cout << blue[i][j]; if (j + 1 < n) cout << " "; } cout << endl; } return 0; }