#include <vector>
#include <iostream>
using V=std::vector<int>;void s(std::vector<V>&m,V&v,int n,int h){int r=h,c=h,i=0,j,l=n-2*h-1;if(l>-1){do{v.push_back(m[r][c]);l?(j=i/l)<1?c++:j<2?r++:j<3?c--:r--:l;}while(++i<4*l);s(m,v,n,h+1);}}
std::vector<V> x{{1, 2, 3, 4}, {12, 13, 14, 5}, {11, 16, 15, 6}, {10, 9, 8, 7}};
std::vector<V> y{{1, 2, 3}, {8, 9, 4}, {7, 6, 5}};
std::vector<V> z;
int main()
{
V v, w, t;
s(x, v, x.size(), 0);
for (auto i : v) std::cout << i << " ";
std::cout << "\n";
s(y, w, y.size(), 0);
for (auto i : w) std::cout << i << " ";
std::cout << "\n";
s(z, t, z.size(), 0);
for (auto i : t) std::cout << i << " ";
std::cout << "\n";
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgVj1zdGQ6OnZlY3RvcjxpbnQ+O3ZvaWQgcyhzdGQ6OnZlY3RvcjxWPiZtLFYmdixpbnQgbixpbnQgaCl7aW50IHI9aCxjPWgsaT0wLGosbD1uLTIqaC0xO2lmKGw+LTEpe2Rve3YucHVzaF9iYWNrKG1bcl1bY10pO2w/KGo9aS9sKTwxP2MrKzpqPDI/cisrOmo8Mz9jLS06ci0tOmw7fXdoaWxlKCsraTw0KmwpO3MobSx2LG4saCsxKTt9fQoKc3RkOjp2ZWN0b3I8Vj4geHt7MSwgMiwgMywgNH0sIHsxMiwgMTMsIDE0LCA1fSwgezExLCAxNiwgMTUsIDZ9LCB7MTAsIDksIDgsIDd9fTsKc3RkOjp2ZWN0b3I8Vj4geXt7MSwgMiwgM30sIHs4LCA5LCA0fSwgezcsIDYsIDV9fTsKc3RkOjp2ZWN0b3I8Vj4gejsKCmludCBtYWluKCkKewogICAgViB2LCB3LCB0OwogICAgcyh4LCB2LCB4LnNpemUoKSwgMCk7CiAgICBmb3IgKGF1dG8gaSA6IHYpIHN0ZDo6Y291dCA8PCBpIDw8ICIgIjsKICAgIHN0ZDo6Y291dCA8PCAiXG4iOwogICAgcyh5LCB3LCB5LnNpemUoKSwgMCk7CiAgICBmb3IgKGF1dG8gaSA6IHcpIHN0ZDo6Y291dCA8PCBpIDw8ICIgIjsKICAgIHN0ZDo6Y291dCA8PCAiXG4iOwogICAgcyh6LCB0LCB6LnNpemUoKSwgMCk7CiAgICBmb3IgKGF1dG8gaSA6IHQpIHN0ZDo6Y291dCA8PCBpIDw8ICIgIjsKICAgIHN0ZDo6Y291dCA8PCAiXG4iOwp9Cgo=