#include <bits/stdc++.h> #define LL long long #define L long #define I int #define FOR(i,s,n) for(int i=s;i<n;i++) #define FORR(i,n,s) for(int i=n-1;i>=s;i--) #define max_size_segTree(n) 2*(int)pow(2, (int)(ceil(log2(n)))) - 1 #define m(a,b) memset(a,b,sizeof(a)) #define mp make_pair #define pb push_back #define MAX 1000000007 #define INF 1e18+1 using namespace std; I visited[27][27] = {0}; I one,two; I n; void dfs(I pos1, I pos2, I go){ if(pos1 <= 0 || pos1 > n || pos2 <= 0 || pos2 > n){ //cout<<"coming"; return; } //cout<<pos1<<" "<<pos2<<" "; //cout<<visited[pos1][pos2]<<endl; if(visited[pos1][pos2] == 0 || visited[pos1][pos2] > go){ visited[pos1][pos2] = go; //cout<<"calling with"<<pos1+one<<" "<<pos2+two<<endl; dfs(pos1+one, pos2+two, go+1); //cout<<"call1"<<endl; dfs(pos1+one, pos2-two, go+1); //cout<<"call2"<<endl; dfs(pos1-one, pos2+two, go+1); //cout<<"call3"<<endl; dfs(pos1-one, pos2-two, go+1); //cout<<"call4"<<endl; dfs(pos1+two, pos2+one, go+1); dfs(pos1+two, pos2-one, go+1); dfs(pos1-two, pos2+one, go+1); dfs(pos1-two, pos2-one, go+1); } } int main() { cin>>::n; FOR(i,1,n){ FOR(j,1,n){ FOR(l,0,n+1){ FOR(m,0,n+1){ visited[l][m] = 0; } } ::one = i; ::two = j; dfs(1,1,1); cout<<visited[n][n]-1<<" "; } cout<<endl; } return 0; }