1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
   | #include <bits/stdc++.h>
  using namespace std; typedef pair<int, int> pii;
  void run(int n){ 	printf("%d %d\n", n, n); 	for(int i = 2; i <= n; i++){ 		printf("%d %d\n", i - 1, i); 	} 	printf("1 %d\n", n); }
  void run(int n, int m){ 	vector<pii> e; 	for(int i = 1; i <= n; i++){ 		for(int j = i + 1; j <= n; j++){ 			e.push_back({i, j}); 		} 	} 	for(int i = n + 2; i <= n + m; i++){ 		e.push_back({i, i - 1}); 	} 	e.push_back({1, n + 1}); 	e.push_back({n, n + m}); 	printf("%d %d\n", n + m, (int)e.size()); 	for(pii i : e){ 		printf("%d %d\n", i.first, i.second); 	} }
  void solve(){ 	int k; 	scanf("%d", &k); 	if(k == 1){ 		printf("2 1\n1 2\n"); 		return; 	} 	if(k == 2){ 		printf("4 4\n1 3\n2 3\n3 4\n1 2\n"); 		return; 	} 	if(k <= 20){ 		run(k);	 	}else{ 		for(int i = 2; i <= 20; i++){ 			for(int j = 2; j <= 20; j++){ 				if(i + j > 20) break; 				int res = i * (i - 1) / 2 - 1 + j - 1 + 2 * (i - 1); 				if(res == k){ 					run(i, j); 					return;	 				} 			} 		} 	} }
  int main(){ 	int T = 1; 	while(T--) solve(); 	return 0; }
 
   |