Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, column and both main diagonals are odd.
Input
The only line contains odd integer n (1 ≤ n ≤ 49).
Output
Print n lines with n integers. All the integers should be different and from 1 to n2. The sum in each row, column and both main diagonals should be odd.
Examples
Input
1
Output
1
Input
3
Output
2 1 4
3 5 7
6 9 8
#include <iostream>
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
long long int s[50][50];
long long int n[3000];
long long int m[3000];
int main()
{
long long int a,i,x=0,y=0,t,k,j;
cin >> a;
t=(a/2)+1;
k=(a/2)+1;
memset(s,0,sizeof(s));
for(i=1; i<=a*a; i++)
{
if(i%2==0)
{
n[++x]=i;
}
else
{
m[++y]=i;
}
}
x=0;
y=0;
for(i=1; i<=a/2; i++)
{
for(j=t; j<=k; j++)
{
s[i][j]=m[++y];
}
t--;
k++;
}
t++;
k--;
for(i=1; i<=a; i++)
{
s[(a/2)+1][i]=m[++y];
}
for(i=(a/2)+2; i<=a; i++)
{
for(j=t; j<=k; j++)
{
s[i][j]=m[++y];
}
t++;
k--;
}
for(i=1; i<=a; i++)
{
for(j=1; j<=a; j++)
{
if(s[i][j]==0)
{
s[i][j]=n[++x];
}
}
}
for(i=1; i<=a; i++)
{
for(j=1; j<=a; j++)
{
if(j==a)
{
cout << s[i][j] << endl;
}
else
{
cout << s[i][j] << " ";
}
}
}
return 0;
}