#include using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair; using pll = pair; using vll = vector; const ll INF = LLONG_MAX / 4; bool chmin(auto& a, const auto& b) { return a > b ? a = b, 1 : 0; } bool chmax(auto& a, const auto& b) { return a < b ? a = b, 1 : 0; } auto sz(const auto& a) { return ssize(a); } #define OVERLOAD_REP(a, b, c, d, name, ...) name #define rep(...) OVERLOAD_REP(__VA_ARGS__, REP3, REP2, REP1, REP0)(__VA_ARGS__) #define REP0(x) for (ll _rep_counter = 0; _rep_counter < (x); ++_rep_counter) #define REP1(i, x) for (ll i = 0; (i) < (x); ++(i)) #define REP2(i, l, r) for (ll i = (l); (i) < (r); ++(i)) #define REP3(i, l, r, c) for (ll i = (l); ((c) > 0 ? (i) < (r) : (i) > (r)); i += (c)) #define each(x,a) for (auto&& x : a) #define MOD 998244353 #define ll0 ((ll)0) void solve() { ll n; cin >> n; vector r(n, vll(n, -1)); vector b(n, vll(n, -1)); if(n % 2 == 0) { rep(i, n) rep(j, n) { r[i][j] = j+1; } rep(i, n) rep(j, n) { b[i][j] = i+1; } } else { rep(i, n) rep(j, n) { if(i % 2 == 0) r[i][j] = j+1; else r[i][j] = n-j; if(j % 2 == 0) b[i][j] = i+1; else b[i][j] = n-i; } } rep(i, n) { rep(j, n) { cout << r[i][j] << " \n"[j==n-1]; } } rep(i, n) { rep(j, n) { cout << b[i][j] << " \n"[j==n-1]; } } cout << flush; } int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); solve(); }