#include <bits/stdc++.h>
using namespace std;

struct  node{
    int x,y,t;
}p;

int n;

bool check( int x,int y){
    
    if(x>=n ||y>=n || x<0 || y<0)
        return false;
    return true;
}

int main(){
    
    cin >> n;
    
    
    for(int i=0; i<n-1; i++){
        for(int j=0; j<n-1; j++){
            
            
                int p1=0;
                queue<node> q;
                p.x = 0;
                p.y = 0;
                p.t = 0;
                
                q.push(p);
                
                
                int a = i+1; int b = j+1;
                bool visited[50][50];
                
                memset(visited,false,sizeof visited);
                
                while(!q.empty()){
                    
                    int xt = q.front().x;
                    int yt = q.front().y;
                    int t1 = q.front().t;
                    
                    if(xt == n-1 && yt == n-1){
                        cout<<t1<<" ";
                        p1=1;
                        break;
                    }
                    q.pop();
                    
                    if(check(xt+a,yt+b) && visited[xt+a][yt+b] == false){
                        p.x = xt+a;
                        p.y = yt+b;
                        p.t = t1+1;
                        q.push(p);
                        visited[p.x][p.y] = true;
             
                    }
                    
                     if(check(xt-a,yt+b) && visited[xt-a][yt+b] == false){
                        p.x = xt-a;
                        p.y = yt+b;
                        p.t = t1+1;
                        q.push(p);
                        visited[p.x][p.y] = true;
             
                    }
                     if(check(xt+a,yt-b) && visited[xt+a][yt-b] == false){
                        p.x = xt+a;
                        p.y = yt-b;
                        p.t = t1+1;
                        q.push(p);
                        visited[p.x][p.y] = true;
             
                    }
                    
                     if(check(xt-a,yt-b) && visited[xt-a][yt-b] == false){
                        p.x = xt-a;
                        p.y = yt-b;
                        p.t = t1+1;
                        q.push(p);
                        visited[p.x][p.y] = true;
             
                    }
                     if(check(xt+b,yt+a) && visited[xt+b][yt+a] == false){
                        p.x = xt+b;
                        p.y = yt+a;
                        p.t = t1+1;
                        q.push(p);
                        visited[p.x][p.y] = true;
             
                    }
                     if(check(xt-b,yt+a) && visited[xt-b][yt+a] == false){
                        p.x = xt-b;
                        p.y = yt+a;
                        p.t = t1+1;
                        q.push(p);
                        visited[p.x][p.y] = true;
             
                    }
                     if(check(xt+b,yt-a) && visited[xt+b][yt-a] == false){
                        p.x = xt+b;
                        p.y = yt-a;
                        p.t = t1+1;
                        q.push(p);
                        visited[p.x][p.y] = true;
             
                    }
                     if(check(xt-b,yt-a) && visited[xt-b][yt-a] == false){
                        p.x = xt-b;
                        p.y = yt-a;
                        p.t = t1+1;
                        q.push(p);
                        visited[p.x][p.y] = true;
             
                    }
                }
                
                if(p1 == 0)
                    cout<<-1<<" ";
            }
            
           
        
         cout<<endl;
    }
    
    return 0;
}