#include <bits/stdc++.h>
using namespace std;
int vis[27][27];
int x1[4] = {1,1,-1,-1}; 
int yl[4] = {1,-1,1,-1};
bool isvalid(int x,int y,int n){
    if(x >= 0 && y >= 0 && x<n && y <n){
        return true;
    }
    else
        return false;
}
int bfs(int a,int b,int n){ 
   // cout << "Go " << a << " " << b << endl;
    queue<pair<int,pair<int,int> > > q;
    q.push(make_pair(0,make_pair(0,0)));
    vis[0][0] = 1;
    while(!q.empty()){ 
        int lev = q.front().first;
        int x = q.front().second.first;
        int y = q.front().second.second;
        q.pop();
        for(int i=0;i<4;i++){ 
            int x2 = x + x1[i]*a;
            int y2 = y + yl[i]*b; 
            if(x2 == n-1 && y2 == n-1){
                //cout << n << endl;
                return lev+1;}
            if(isvalid(x2,y2,n)){
                if(!vis[x2][y2]){
                    vis[x2][y2] = 1;
               //     cout << x2 << " " << y2 << endl;
                    q.push(make_pair(lev+1,make_pair(x2,y2)));
                }
            }
            x2 = x + x1[i]*b;
            y2 = y + yl[i]*a; 
            if(x2 == n-1 && y2 == n-1){
                //cout << n << endl;
                return lev+1;}
            if(isvalid(x2,y2,n)){
                if(!vis[x2][y2]){
                    vis[x2][y2] = 1;
                  //  cout << x2 << " " << y2 << endl;
                    q.push(make_pair(lev+1,make_pair(x2,y2)));
                }
            }
          //  cout << "-1" << endl;
        }
    }
    return -1;
}
int main(){
    int n;
    cin >> n;
    // your code goes here
    for(int i=1;i<n;i++){
        for(int j = 1;j<n;j++){
            memset(vis,0,sizeof(vis));
            int ans = bfs(i,j,n);
            
            cout << ans << " ";
            //return 0;
        }
        cout << endl;
    }
    return 0;
}