void serpentineArray(vector<int> array, int n, vector<vector<int>> &out) {
int count = 0;
if(n==1){
out[0][0]=array[count++];
}
else{
for(int i=0;i<n/2;i++){
for(int j=i;j<n-i;j++){
out[i][j]=array[count++];
}
for(int k=i+1;k<n-i-1;k++){
out[k][n-i-1]=array[count++];
}
for(int m=n-i-1;m>i;m--){
out[n-i-1][m]=array[count++];
}
for(int w=n-i-1;w>i;w--){
out[w][i]=array[count++];
}
}
if(n%2 == 1){
out[n/2][n/2] = array[count++];
}
}
}
void serpentineArray2(vector<int> array, int n, vector<vector<int>> &result) {
vector<vector<int>> out(n * 2 - 1,vector<int>(n));
int count = 0;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<=i;j++)
{
out[i][j]=array[count++];
}
}
for(int i=n-1;i<2*n-1;i++)
{
for(int j=0;j<2*n-1-i;j++)
{
out[i][j]=array[count++];
}
}
for(int i=0;i<n;i+=2)
{
int temp=0;
for(int j=0;j<=i/2;j++)
{
temp=out[i][j];
out[i][j]=out[i][i-j];
out[i][i-j]=temp;
}
}
for(int i=(n+1)/2*2;i<2*n-1;i+=2)
{
int temp=0;
for(int j=0;j<(2*n-1-i)/2;j++)
{
temp=out[i][j];
out[i][j]=out[i][2*n-2-i-j];
out[i][2*n-2-i-j]=temp;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
result[i-j][j]=out[i][j];
}
}
for(int i=n;i<2*n-1;i++)
{
for(int j=i-n+1;j<n;j++)
{
result[i-j][j]=out[i][j-i+n-1];
}
}
}
void makematrix(int &N, vector<vector<int>> &matrix, int &K, int &layers, int &posi,int &posj)
{
if(N == 0)
{
return;
}
if(N == 1)
{
matrix[posi][posj] =K;
return;
}
if(layers%2 != 0)
{
for(int i = 0; i < N; i++)
{
matrix[posi][posj] = K;
posi++;
K++;
}
posi--;
posj++;
for(int i = 0; i < N-1; i++)
{
matrix[posi][posj] = K;
posj++;
K++;
}
posj--;
posi--;
for(int i = 0; i < N-1; i++)
{
matrix[posi][posj] = K;
posi--;
K++;
}
posi++;
posj--;
for(int i = 0; i < N-2; i++)
{
matrix[posi][posj] = K;
posj--;
K++;
}
posi++;
posj++;
}else
{
for(int i = 0; i < N; i++)
{
matrix[posi][posj] = K;
posj++;
K++;
}
posj--;
posi++;
for(int i = 0; i < N-1; i++)
{
matrix[posi][posj] = K;
posi++;
K++;
}
posi--;
posj--;
for(int i = 0; i < N-1; i++)
{
matrix[posi][posj] = K;
posj--;
K++;
}
posj++;
posi--;
for(int i = 0; i < N-2; i++)
{
matrix[posi][posj] = K;
posi--;
K++;
}
posi++;
posj++;
}
layers++;
N = N - 2;
makematrix(N,matrix,K,layers,posi,posj);
}