#include <vector>
#include <iostream>
#define c(k,r,c) for(i=0;i<k;++i)v.push_back(m[r][c]);
using V= std:: vector < int > ; void s( std:: vector < V> & m,V& v,int h) { int r= h,c= h,i,n= m.size ( ) ,k= n- 2 * h- 1 ; if ( ! k) c( 1 ,r,c) else if ( k> 0 ) { c( k,r,c++ ) c( k,r++ ,c) c( k,r,c-- ) c( k,r-- ,c) s( m,v,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, 0 ) ;
for ( auto i : v) std:: cout << i << " " ;
std:: cout << "\n " ;
s( y, w, 0 ) ;
for ( auto i : w) std:: cout << i << " " ;
std:: cout << "\n " ;
s( z, t, 0 ) ;
for ( auto i : t) std:: cout << i << " " ;
std:: cout << "\n " ;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKI2RlZmluZSBjKGsscixjKSBmb3IoaT0wO2k8azsrK2kpdi5wdXNoX2JhY2sobVtyXVtjXSk7CnVzaW5nIFY9c3RkOjp2ZWN0b3I8aW50Pjt2b2lkIHMoc3RkOjp2ZWN0b3I8Vj4mbSxWJnYsaW50IGgpe2ludCByPWgsYz1oLGksbj1tLnNpemUoKSxrPW4tMipoLTE7aWYoIWspYygxLHIsYyllbHNlIGlmKGs+MCl7YyhrLHIsYysrKWMoayxyKyssYyljKGsscixjLS0pYyhrLHItLSxjKXMobSx2LGgrMSk7fX0KCnN0ZDo6dmVjdG9yPFY+IHh7ezEsIDIsIDMsIDR9LCB7MTIsIDEzLCAxNCwgNX0sIHsxMSwgMTYsIDE1LCA2fSwgezEwLCA5LCA4LCA3fX07CnN0ZDo6dmVjdG9yPFY+IHl7ezEsIDIsIDN9LCB7OCwgOSwgNH0sIHs3LCA2LCA1fX07CnN0ZDo6dmVjdG9yPFY+IHo7CgppbnQgbWFpbigpCnsKICAgIFYgdiwgdywgdDsKICAgIHMoeCwgdiwgMCk7CiAgICBmb3IgKGF1dG8gaSA6IHYpIHN0ZDo6Y291dCA8PCBpIDw8ICIgIjsKICAgIHN0ZDo6Y291dCA8PCAiXG4iOwogICAgcyh5LCB3LCAwKTsKICAgIGZvciAoYXV0byBpIDogdykgc3RkOjpjb3V0IDw8IGkgPDwgIiAiOwogICAgc3RkOjpjb3V0IDw8ICJcbiI7CiAgICBzKHosIHQsIDApOwogICAgZm9yIChhdXRvIGkgOiB0KSBzdGQ6OmNvdXQgPDwgaSA8PCAiICI7CiAgICBzdGQ6OmNvdXQgPDwgIlxuIjsKfQo=