#include using namespace std; using ll=long long; vector> rot(vector> G){ ll sz=G.size(); ll N=sqrt(sz+1); vector> NG; for(int i=0;iint { int uy=(u-1)/N; int ux=(u-1)%N; return ux*N+(N-1-uy)+1; }; NG.push_back({rt(u),rt(v)}); } return NG; } vector> add(vector> G){ ll sz=G.size(); int N=sqrt(sz+1); vector> NG; for(int i=0;iint { int uy=(u-1)/N; int ux=(u-1)%N; return uy*(N+2)+ux+1; }; NG.push_back({ad(u),ad(v)}); } for(int i=0;i int { return y*(N+2)+x+1; }; NG.push_back({mp(N,0),mp(N+1,0)}); NG.push_back({mp(0,N),mp(0,N+1)}); NG.push_back({mp(N-1,N-1),mp(N-1,N)}); NG.push_back({mp(N-1,N-1),mp(N,N-1)}); NG.push_back({mp(N,N),mp(N+1,N)}); NG.push_back({mp(N+1,N+1),mp(N,N+1)}); cerr<> adod(vector> G){ ll sz=G.size(); int N=sqrt(sz+1); vector> NG; for(int i=0;i(v-1)%N)swap(u,v); auto ad=[&](int u) ->int { int uy=(u-1)/N; int ux=(u-1)%N; return uy*(N+1)+ux+1; }; if((u-1)/N==N-1&&(v-1)/N==N-1&&((u-1)%N)%2==0){ } else{ NG.push_back({ad(u),ad(v)}); } } for(int i=0;i int { return y*(N+1)+x+1; }; NG.push_back({mp(0,N),mp(0,N-1)}); cerr<>N; vector> G={ {1,2}, {3,4}, {1,5}, {3,7}, {4,8}, {5,6}, {6,7}, {7,11}, {10,11}, {11,12}, {9,13}, {10,14}, {12,16}, {13,14}, {15,16} }; for(int i=4;i+2<=N;i+=2){ G=add(G); G=rot(G); } if(N%2==1){ G=adod(G); } for(auto [y,x]:G){ cout<