#include <stdio.h>
int f(int n,int a[][n],int *b){static int d,j,k,s,f,i;int m=n-1;for(;i<n*n;i++,s++){if(s==m){d++;d%=4;s=0;f++;if(f%3==0){m--;f=1;}}b[i]=!d?a[j][k++]:d==1?a[j++][k]:d==2?a[j][k--]:a[j--][k];}}
/* The 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 7
/* 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+CgppbnQgZihpbnQgbixpbnQgYVtdW25dLGludCAqYil7c3RhdGljIGludCBkLGosayxzLGYsaTtpbnQgbT1uLTE7Zm9yKDtpPG4qbjtpKysscysrKXtpZihzPT1tKXtkKys7ZCU9NDtzPTA7ZisrO2lmKGYlMz09MCl7bS0tO2Y9MTt9fWJbaV09IWQ/YVtqXVtrKytdOmQ9PTE/YVtqKytdW2tdOmQ9PTI/YVtqXVtrLS1dOmFbai0tXVtrXTt9fQoKLyogVGhlIGZ1bmN0aW9uIGZyb20gUm9zZXR0YUNvZGUuICovCmludCBzcGlyYWwoaW50IHcsIGludCBoLCBpbnQgeCwgaW50IHkpIHsKCXJldHVybiB5ID8gdyArIHNwaXJhbChoIC0gMSwgdywgeSAtIDEsIHcgLSB4IC0gMSkgOiB4Owp9CgppbnQgbWFpbih2b2lkKSB7CgkjZGVmaW5lIE4gNwoKCS8qIEdlbmVyYXRpb24gb2YgdGhlIGlucHV0IGFycmF5LiAqLwkKCSNpZiBOID09IDAKCQlpbnQgYVsxXVsxXTsKCSNlbHNlCgkJaW50IGFbTl1bTl07CgkKCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE47IGkrKykgewoJCQlmb3IgKHNpemVfdCBqID0gMDsgaiA8IE47IGorKykgewoJCQkJYVtpXVtqXSA9IHNwaXJhbChOLCBOLCBqLCBpKSArIDE7CgkJCQlwcmludGYoIiU0ZCIsIGFbaV1bal0pOwoJCQl9CgoJCQlwdXRjaGFyKCdcbicpOwoJCX0KCSNlbmRpZgoKCS8qIERlY2xhcmF0aW9uIG9mIHRoZSBvdXRwdXQgYXJyYXkuICovCgkjaWYgTiAhPSAwCgkJaW50IGJbTipOXTsKCSNlbHNlCgkJaW50IGJbMV07CgkjZW5kaWYKCgkvKiBQcm9jZXNzLiAqLwoJZihOLCBhLCBiKTsKCgkvKiBQcmludCB0aGUgcmVzdWx0LiAqLwoJI2lmIE4gIT0gMAoJCXB1dGNoYXIoJ1xuJyk7CgkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOKk47IGkrKykKCQkJcHJpbnRmKCIlZCAiLCBiW2ldKTsKCSNlbmRpZgp9Cg==