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();
}
}
}
}