using System; namespace challenge153 { class Program { static void Main(string[] args) { uint n = uint.Parse(Console.ReadLine()); if (n == 1) { Console.WriteLine(1); } else { uint[][] layer = getLayer(n); for (uint i = 2; i < n - 1; i++) { } printLayer(layer); } Console.ReadLine(); } public static uint[][] getLayer(uint n) { uint[][] layer = new uint[n][]; for (int i = 0; i < n; i++) { layer[i] = new uint[i+1]; } //get Perimeter layer[0][0] = layer[n-1][0] = layer[n-1][n-1] = 1; uint ratioX = 1; uint ratioY = n - 1; uint currentNumber = 1; do { currentNumber = (currentNumber * ratioY) / ratioX; layer[ratioX][0] = layer[n-1][ratioX] = layer[n-1-ratioX][n-1-ratioX] = layer[ratioX][ratioX] = layer[n-1-ratioX][0] = layer[n-1][n-1-ratioX] = currentNumber; ratioX++; ratioY--; } while (ratioX <= ratioY); //fill in the rest for (uint i = 2; i < n-1; i++) { ratioX = 1; ratioY = i; currentNumber = layer[i][0]; do { currentNumber = (currentNumber * ratioY) / ratioX; layer[i][ratioX] = layer[i][i-ratioX] = currentNumber; ratioX++; ratioY--; } while (ratioX <= ratioY); } return layer; } public static void printLayer(uint[][] layer) { for (int i = 0; i < layer.Length; i++) { for (int j = 0; j < layer.Length - i - 1; j++) { Console.Write(' '); } for (int j = 0; j < layer[i].Length; j++) { Console.Write("" + layer[i][j] + " "); } Console.WriteLine(); } } } }