#include <stdio.h>
int f(int n,int a[][n],int*b){static d,j,k,s,f,i;int m=n-1;for(;i<n*n;i++,s++)s==m?d++,d%=4,s=0,f++,f%3==0?m--,f=1:m:m,b[i]=!d?a[j][k++]:d==1?a[j++][k]:d==2?a[j][k--]:a[j--][k];}
/* The spiral function from RosettaCode. */
int spiral(int w, int h, int x, int y) {
return y ? w + spiral(h - 1, w, y - 1, w - x - 1) : x;
}
int main(void) {
#define N 5
/* Generation of the input array. */
#if N == 0
int a[1][1];
#else
int a[N][N];
for (size_t i = 0; i < N; i++) {
for (size_t j = 0; j < N; j++) {
a[i][j] = spiral(N, N, j, i) + 1;
}
}
#endif
/* Declaration of the output array. */
#if N != 0
int b[N*N];
#else
int b[1];
#endif
/* Process. */
f(N, a, b);
/* Print the result. */
#if N != 0
for (size_t i = 0; i < N*N; i++)
#endif
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgZihpbnQgbixpbnQgYVtdW25dLGludCpiKXtzdGF0aWMgZCxqLGsscyxmLGk7aW50IG09bi0xO2Zvcig7aTxuKm47aSsrLHMrKylzPT1tP2QrKyxkJT00LHM9MCxmKyssZiUzPT0wP20tLSxmPTE6bTptLGJbaV09IWQ/YVtqXVtrKytdOmQ9PTE/YVtqKytdW2tdOmQ9PTI/YVtqXVtrLS1dOmFbai0tXVtrXTt9CgovKiBUaGUgc3BpcmFsIGZ1bmN0aW9uIGZyb20gUm9zZXR0YUNvZGUuICovCmludCBzcGlyYWwoaW50IHcsIGludCBoLCBpbnQgeCwgaW50IHkpIHsKCXJldHVybiB5ID8gdyArIHNwaXJhbChoIC0gMSwgdywgeSAtIDEsIHcgLSB4IC0gMSkgOiB4Owp9CgppbnQgbWFpbih2b2lkKSB7CgkjZGVmaW5lIE4gNQoKCS8qIEdlbmVyYXRpb24gb2YgdGhlIGlucHV0IGFycmF5LiAqLwkKCSNpZiBOID09IDAKCQlpbnQgYVsxXVsxXTsKCSNlbHNlCgkJaW50IGFbTl1bTl07CgkKCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE47IGkrKykgewoJCQlmb3IgKHNpemVfdCBqID0gMDsgaiA8IE47IGorKykgewoJCQkJYVtpXVtqXSA9IHNwaXJhbChOLCBOLCBqLCBpKSArIDE7CgkJCQlwcmludGYoIiU0ZCIsIGFbaV1bal0pOwoJCQl9CgoJCQlwdXRjaGFyKCdcbicpOwoJCX0KCSNlbmRpZgoKCS8qIERlY2xhcmF0aW9uIG9mIHRoZSBvdXRwdXQgYXJyYXkuICovCgkjaWYgTiAhPSAwCgkJaW50IGJbTipOXTsKCSNlbHNlCgkJaW50IGJbMV07CgkjZW5kaWYKCgkvKiBQcm9jZXNzLiAqLwoJZihOLCBhLCBiKTsKCgkvKiBQcmludCB0aGUgcmVzdWx0LiAqLwoJI2lmIE4gIT0gMAoJCXB1dGNoYXIoJ1xuJyk7CgkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOKk47IGkrKykKCQkJcHJpbnRmKCIlZCAiLCBiW2ldKTsKCSNlbmRpZgp9Cg==