using System; using System.Collections.Generic; using System.IO; using System.Linq; class Solution { static void Main(String[] args) { int n = Convert.ToInt32(Console.ReadLine()); // your code goes here for (int i = 1; i < n; i++) { for (int j = 1; j < n; j++) { Console.Write(NumMoves(n, i, j) + " "); } Console.WriteLine(""); } } static int NumMoves(int n, int a, int b) { List> moves = new List>(); moves.Add(new Tuple(a,b)); moves.Add(new Tuple(a,-b)); moves.Add(new Tuple(-a,b)); moves.Add(new Tuple(-a,-b)); if (a != b) { moves.Add(new Tuple(b,a)); moves.Add(new Tuple(b,-a)); moves.Add(new Tuple(-b,a)); moves.Add(new Tuple(-b,-a)); } int[,] board = new int[n,n]; Queue queue = new Queue(); queue.Enqueue(0); queue.Enqueue(0); queue.Enqueue(0); while (queue.Count > 0) { int r = queue.Dequeue(); int c = queue.Dequeue(); int cnt = queue.Dequeue(); if (r < 0 || r >= n || c < 0 || c >= n || board[r,c] != 0) continue; board[r,c] = cnt; foreach (Tuple move in moves) { queue.Enqueue(r + move.Item1); queue.Enqueue(c + move.Item2); queue.Enqueue(cnt + 1); } } return board[n-1, n-1] > 0 ? board[n-1,n-1] : -1; } }