#include using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; if(N>20){ return 1; } constexpr ll P = 2503; constexpr ll G = 709; constexpr ll M = P * (P - 1); // Sidon set vector a; a.reserve(P - 1); ll pw = 1; for (ll k = 1; k <= P - 1; k++) { pw = pw * G % P; ll x = (k * P - pw * (P - 1)) % M; if (x < 0) x += M; a.push_back(x); } sort(a.begin(), a.end()); // 蛇行順での番号 auto id = [&](int r, int c) -> int { if (r % 2 == 0) { return r * N + c; } else { return r * N + (N - 1 - c); } }; auto weight = [&](int r1, int c1, int r2, int c2) -> ll { return abs(a[id(r1, c1)] - a[id(r2, c2)]); }; // v_{i,j} // (r,c) - (r+1,c) for (int r = 0; r + 1 < N; r++) { for (int c = 0; c < N; c++) { if (c) cout << ' '; cout << weight(r, c, r + 1, c); } cout << '\n'; } // h_{i,j} // (r,c) - (r,c+1) for (int r = 0; r < N; r++) { for (int c = 0; c + 1 < N; c++) { if (c) cout << ' '; cout << weight(r, c, r, c + 1); } cout << '\n'; } return 0; }