Problem: Example

Input

4


Output

4
0 0
1 0
2 0
1 1

Solution (in CPP):

Solution:
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

int goal;

int N;

vector<int> ans;

int main(){
	scanf("%d",&goal);
	if(goal==7){
		printf("6\n");
		printf("0 0\n");
		printf("0 3\n");
		printf("0 6\n");
		printf("3 0\n");
		printf("6 0\n");
		printf("2 2\n");
		return 0;
	}else if(goal==9){
		printf("6\n");
		printf("0 0\n");
		printf("2 0\n");
		printf("0 2\n");
		printf("2 2\n");
		printf("1 1\n");
		printf("4 2\n");
		return 0;
	}else if(goal==2){
		printf("-1\n");
		return 0;
	}
	for(int i=1;;i++){
		if(i*(i-1)/2>=goal){
			N=i;
			break;
		}
	}
	int init=N;
	while(true){
		if(N-init>=2) break;
		int d=N*(N-1)/2-goal;
		int a=0,b=0;
		for(;;a++){
			if((d-a*2)%5==0){
				b=(d-a*2)/5;
				break;
			}
		}/*
		if(b<0||1+2*a+3*b>N){
			N++;
			continue;
		}*/
		if(b<0){
			N++;
			continue;
		}
		if(1+2*a+3*b>N+1){
			N++;
			continue;
		}
//		printf("%d %d %d\n",N,a,b);
		bool flg=(2*a+3*b==N);
		int c=0;
		if(flg==false){
			for(int i=0;i<a;i++){
				for(int k=0;k<2;k++) ans.push_back(c);
				c++;
			}
		}else{
			for(int i=0;i<a-1;i++){
				for(int k=0;k<2;k++) ans.push_back(c);
				c++;
			}
		}
		for(int i=0;i<b;i++){
			for(int k=0;k<3;k++) ans.push_back(c);
			c++;
		}
		int num=N-a*2-3*b-1;
		for(int i=0;i<N-a*2-3*b-1;i++){
			ans.push_back(c);
			c++;
		}
		int x=0,y=0;
		if(flg==false){
			printf("%d\n",N);
			printf("%d %d\n",x,y);
			for(int i=0;i<ans.size();i++){
				printf("%d %d\n",x+1,y+ans[i]);
				x++;
				y+=ans[i];
			}
			return 0;
		}
		printf("%d\n",N);
		printf("%d %d\n",x,y);
		for(int i=0;i<ans.size();i++){
			printf("%d %d\n",x+2,y+ans[i]*2);
			x+=2;
			y+=ans[i]*2;
		}
		printf("2 1\n");
		return 0;
	}
	printf("-1\n");
	return 0;
}