#include using namespace std; #define PB push_back #define ZERO (1e-10) #define INF ll(1e18+666) #define CL(A,I) (memset(A,I,sizeof(A))) #define DEB printf("DEB!\n"); #define D(X) cout<<" "<<#X": "<B&&A-ZERO pll; typedef vector vi; typedef pair ii; typedef vector vii; #define IN(n) int n;scanf("%d",&n); #define FOR(i, m, n) for (int i(m); i < n; i++) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define FT(m, n) FOR(k, m, n) #define aa first #define bb second void ga(int N,int *A){F(N)scanf("%d",A+i);} #define MX 512 #define FL 447 #define HH 100 ll X[MX][MX],Y[MX][MX],N,K,Z[MX][MX],dx[]={0,0,1,-1},dy[]={1,-1,0,0},M,S,A; pair O[MX*MX]; vii W; ll sum(int x,int y){ if(!~X[x][y])return -1; ll S=X[x][y]; F(4)if(~X[x+dx[i]][y+dy[i]])S=min(S+X[x+dx[i]][y+dy[i]],INF); return S; } void go(){ F(MX)FF(MX)Y[i][j]=sum(i,j); F(MX)FF(MX)X[i][j]=Y[i][j]; } int main(void){ scanf("%lld",&N),K=35; M=S=0,W.clear(),CL(X,-1); F(FL)FF(FL)X[i+1][j+1]=0; F(HH)X[rand()%FL+1][1+rand()%FL]=1; F(MX)FF(MX)Z[i][j]=X[i][j]; F(K)go(); F(MX)FF(MX)if(X[i][j]>0&&X[i][j]<=N)O[M++]={X[i][j],{i,j}}; sort(O,O+M,greater>()); F(M)if(S+O[i].aa<=N)S+=O[i].aa,W.PB(O[i].bb); assert(S==N); F(MX)FF(MX)A+=-1!=Z[i][j]; printf("%lld\n",A); F(MX)FF(MX)if(~Z[i][j])printf("%d %d %lld\n",i,j,Z[i][j]); //TODO HAVE printf("%lu %lld\n",W.size(),K); for(auto&h:W)printf("%d %d\n",h.aa,h.bb); return 0; }