fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define MAX 105
  5. vector<int> adj[MAX];
  6. int k;
  7.  
  8. void solve() {
  9. scanf("%d", &k);
  10.  
  11. if (k % 2 == 0) {
  12. // handshaking lemma
  13. printf("NO\n");
  14. return;
  15. }
  16.  
  17. printf("YES\n");
  18.  
  19. if (k == 1) {
  20. printf("2 1\n");
  21. printf("1 2\n");
  22. return;
  23. }
  24.  
  25. printf("%d %d\n", 2 * k + 4, k * k + 2 * k);
  26.  
  27. for (int i = 2; i <= k; i++) {
  28. adj[1].push_back(i);
  29. adj[i].push_back(1);
  30. }
  31.  
  32. for (int i = 2; i < k; i++) {
  33. for (int j = i + 1; j <= k; j++) {
  34. if (j != i + 1) {
  35. adj[i].push_back(j);
  36. adj[j].push_back(i);
  37. }
  38. }
  39. }
  40.  
  41. for (int i = 2; i <= k; i++) {
  42. adj[i].push_back(k + 1);
  43. adj[i].push_back(k + 2);
  44. adj[k + 1].push_back(i);
  45. adj[k + 2].push_back(i);
  46. }
  47.  
  48. adj[k + 1].push_back(k + 2);
  49. adj[k + 2].push_back(k + 1);
  50.  
  51. for (int u = 1; u <= k + 2; u++) {
  52. for (int v : adj[u]) printf("%d %d\n", u, v);
  53. }
  54.  
  55. for (int u = 1; u <= k + 2; u++) {
  56. for (int v : adj[u]) printf("%d %d\n", u + k + 2, v + k + 2);
  57. }
  58.  
  59. printf("%d %d\n", 1, 1 + k + 2);
  60. printf("%d %d\n", 1 + k + 2, 1);
  61. }
  62.  
  63. signed main() {
  64. solve();
  65. }
Success #stdin #stdout 0.01s 5292KB
stdin
3
stdout
YES
10 15
1 2
1 3
2 1
2 4
2 5
3 1
3 4
3 5
4 2
4 3
4 5
5 2
5 3
5 4
6 7
6 8
7 6
7 9
7 10
8 6
8 9
8 10
9 7
9 8
9 10
10 7
10 8
10 9
1 6
6 1