#include #include using namespace std; using namespace atcoder; #define rep(i, l, r) for (ll i = (l); i < (r); ++i) #define all(x) (x).begin(), (x).end() using ll = long long; using pl = pair; using vl = vector; using vvl = vector>; using vvvl = vector>>; using vvvvl = vector>>>; #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include using mint=modint998244353; int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); ll n; cin>>n; vvl a(n,vl(n)); vvl b(n,vl(n)); vvl c(n,vl(n)); rep(i,0,n){ rep(j,0,n){ if(i%2==0){ if(j%2==0){ a[i][j]=i/2+1; } else a[i][j]=n+1-(i/2+1); } else{ if(j%2==1){ a[i][j]=i/2+1; } else a[i][j]=n+1-(i/2+1); } } } rep(i,0,n){ rep(j,0,n){ b[i][j]=a[j][i]; } } if(n%2==0){ rep(i,0,n){ rep(j,0,n){ if(true){ if(j%2==0){ a[i][j]=i/2+1; } else a[i][j]=n+1-(i/2+1); } else{ if(j%2==1){ a[i][j]=i/2+1; } else a[i][j]=n+1-(i/2+1); } } } } else{ if(n%4==1){ rep(i,0,n/2){ c[(2*i)%(n-1)]=a[i]; } rep(i,n/2,n-1){ c[(2*i)%(n-1)+1]=a[i]; } c[n-1]=a[n-1]; } else{ rep(i,0,n){ c[(2*i)%(n)]=a[i]; } } swap(a,c); } rep(i,0,n){ rep(j,0,n){ cout<