#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int N6 = 1e6 + 6; const int N9 = 1e9 + 7; typedef unsigned long long ull; typedef long long ll; typedef double ld; typedef pair PII; typedef pair PIl; typedef pair PlI; typedef pair Pll; #define F first #define S second #define pb push_back #define p push #define mp make_pair #define re(x, a) for (__typeof(a) x = 1; x <= a; ++x) #define reo(x, a) for (__typeof(a) x = 1; x <= a; ++x) #define rep(x, a) for (__typeof(a) x = 1; x <= a; ++x) #define erp(x, a) for (__typeof(a) x = 1; x <= a; ++x) #define repp(x, a) for (__typeof(a) x = 0; x < a; ++x) #define epo(x, a) for (__typeof(a) x = 1; x <= a; ++x) #define itn int #define for1(x, a, b) for (int x = b; x >= a; --x) #define sz(x) (int)x.size() #define siz size #define skip continue #define gg exit(0) #define boost ios_base::sync_with_stdio(0),cin.tie(NULL) #define task "A" const ll N = 1e5 + 200; const int INF = (int)1e9 + 100; const ll mod = 1e9 + 7; const ll BLOCK = 316; int n,dem,d[1111]; map< pair< int, int >, int > cnt; vectorg[1111]; int main(){ // #ifndef ONLINE_JUDGE // #endif boost; cin >> n; for(int i = 1; i <= n; ++i){ for(int j = 1; j <= n; ++j){ cnt[mp(i,j)] = ++dem; } } for(int i = 1; i < n; ++i){ for(int j = 1; j < n; ++j){ for(int ii = 1; ii <= dem; ++ii) g[ii].clear(); for(int ii = 1; ii <= n; ++ii){ for(int jj = 1; jj <= n; ++jj){ if( ii + i <= n && jj + j <= n ){ g[cnt[mp(ii,jj)]].pb(cnt[mp(ii+i,jj+j)]); g[cnt[mp(ii+i,jj+j)]].pb(cnt[mp(ii,jj)]); } if( ii + j <= n && jj + i <= n ){ g[cnt[mp(ii,jj)]].pb(cnt[mp(ii+j,jj+i)]); g[cnt[mp(ii+j,jj+i)]].pb(cnt[mp(ii,jj)]); } if( ii + i <= n && jj - j >= 1 ){ g[cnt[mp(ii,jj)]].pb(cnt[mp(ii+i,jj-j)]); g[cnt[mp(ii+i,jj-j)]].pb(cnt[mp(ii,jj)]); } if( ii + j <= n && jj - i >= 1 ){ g[cnt[mp(ii,jj)]].pb(cnt[mp(ii+j,jj-i)]); g[cnt[mp(ii+j,jj-i)]].pb(cnt[mp(ii,jj)]); } if( ii - i >= 1 && jj + j <= n ){ g[cnt[mp(ii,jj)]].pb(cnt[mp(ii-i,jj+j)]); g[cnt[mp(ii-i,jj+j)]].pb(cnt[mp(ii,jj)]); } if( ii - j >= 1 && jj + i <= n ){ g[cnt[mp(ii,jj)]].pb(cnt[mp(ii-j,jj+i)]); g[cnt[mp(ii-j,jj+i)]].pb(cnt[mp(ii,jj)]); } if( ii - i >= 1 && jj - j >= 1 ){ g[cnt[mp(ii,jj)]].pb(cnt[mp(ii-i,jj-j)]); g[cnt[mp(ii-i,jj-j)]].pb(cnt[mp(ii,jj)]); } if( ii - j >= 1 && jj - i >= 1 ){ g[cnt[mp(ii,jj)]].pb(cnt[mp(ii-j,jj-i)]); g[cnt[mp(ii-j,jj-i)]].pb(cnt[mp(ii,jj)]); } } } set< pair > s; for(int ii = 1; ii <= dem; ++ii) d[ii] = 999999999; d[1] = 0; s.insert(mp(0,1)); while( !s.empty() ){ int v = s.begin() -> second; s.erase(s.begin()); repp(ii,sz(g[v])){ int to = g[v][ii]; if( d[to] > d[v] + 1 ){ s.erase(mp(d[to],to)); d[to] = d[v] + 1; s.insert(mp(d[to],to)); } } } if( (d[dem] - d[1]) == 999999999 ) cout << -1 << ' '; else cout << d[dem] - d[1] << ' '; } cout << '\n'; } return 0; }