#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>

using namespace std;

void move(int *Map, int n, int a, int b) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (true) {
                int O[8] = {100, 100, 100, 100, 100, 100, 100, 100};
                if (0 <= i + a && i + a < n && 0 <= j + b && j + b < n  && *(Map + n*i + j + n*a + b) >= 0) O[0] = *(Map + n*i + j + n*a + b) + 1;
                if (0 <= i + a && i + a < n && 0 <= j - b && j - b < n  && *(Map + n*i + j + n*a - b) >= 0) O[1] = *(Map + n*i + j + n*a - b) + 1;
                if (0 <= i - a && i - a < n && 0 <= j + b && j + b < n  && *(Map + n*i + j - n*a + b) >= 0) O[2] = *(Map + n*i + j - n*a + b) + 1;
                if (0 <= i - a && i - a < n && 0 <= j - b && j - b < n  && *(Map + n*i + j - n*a - b) >= 0) O[3] = *(Map + n*i + j - n*a - b) + 1;
                if (0 <= i + b && i + b < n && 0 <= j + a && j + a < n  && *(Map + n*i + j + n*b + a) >= 0) O[4] = *(Map + n*i + j + n*b + a) + 1;
                if (0 <= i + b && i + b < n && 0 <= j - a && j - a < n  && *(Map + n*i + j + n*b - a) >= 0) O[5] = *(Map + n*i + j + n*b - a) + 1;
                if (0 <= i - b && i - b < n && 0 <= j + a && j + a < n  && *(Map + n*i + j - n*b + a) >= 0) O[6] = *(Map + n*i + j - n*b + a) + 1;
                if (0 <= i - b && i - b < n && 0 <= j - a && j - a < n  && *(Map + n*i + j - n*b - a) >= 0) O[7] = *(Map + n*i + j - n*b - a) + 1;
                
                if(*(Map + n*i + j) == -1) {
                    *(Map + n*i + j) = min(min(min(min(min(min(min(O[0], O[1]), O[2]), O[3]), O[4]), O[5]), O[6]), O[7]);
                }
                else *(Map + n*i + j) = min(min(min(min(min(min(min(min(O[0], O[1]), O[2]), O[3]), O[4]), O[5]), O[6]), O[7]), *(Map + n*i + j));
                if (*(Map + n*i + j) == 100) *(Map + n*i + j) = -1;
            }
        }    
    }
}

int main(){
    int n;
    cin >> n;
    
    int *Map = (int *) malloc(sizeof(int) * n * n);
    
    for (int a = 1; a < n; a++) {
        for (int b = 1; b < n; b++) {
            for(int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    *(Map + n*i + j) = -1;
                }
            }
            *Map = 0;
            
            for (int k = 0; k < 3*n; k++) {
                move(Map, n, a, b);
            }
            cout << *(Map + n*n - 1) << ' ';
        }
        cout << '\n';
    }
    return 0;
}