#include <bits/stdc++.h>
using namespace std;
inline void qrint(int *t, int *r) {
  printf("%d %d\n", t[0], r[0]);
  printf("%d %d\n", t[1], r[1]);
  printf("%d %d\n", t[0], r[1]);
  printf("%d %d\n", t[1], r[0]);
  printf("%d %d\n", t[0], r[2]);
  printf("%d %d\n", t[1], r[3]);
  printf("%d %d\n", t[0], r[3]);
  printf("%d %d\n", t[1], r[2]);
  printf("%d %d\n", t[2], r[0]);
  printf("%d %d\n", t[3], r[1]);
  printf("%d %d\n", t[2], r[1]);
  printf("%d %d\n", t[3], r[0]);
  printf("%d %d\n", t[2], r[2]);
  printf("%d %d\n", t[3], r[3]);
  printf("%d %d\n", t[2], r[3]);
  printf("%d %d\n", t[3], r[2]);
}
inline void brint(int *t) {
  printf("%d %d\n", t[0], t[1]);
  printf("%d %d\n", t[2], t[3]);
  printf("%d %d\n", t[0], t[3]);
  printf("%d %d\n", t[1], t[2]);
  printf("%d %d\n", t[0], t[2]);
  printf("%d %d\n", t[1], t[3]);
}
inline void drint(int *t) {
  printf("%d %d\n", t[0], t[1]);
  printf("%d %d\n", t[2], t[3]);
  printf("%d %d\n", t[0], t[3]);
  printf("%d %d\n", t[1], t[2]);
  printf("%d %d\n", t[0], t[4]);
  printf("%d %d\n", t[1], t[4]);
  printf("%d %d\n", t[0], t[2]);
  printf("%d %d\n", t[1], t[3]);
  printf("%d %d\n", t[3], t[4]);
  printf("%d %d\n", t[2], t[4]);
}
int main() {
  static int t[5], r[5];
  int n;
  bool f;
  scanf("%d", &n);
  if ((n & 3) > 1)
    puts("NO");
  else {
    puts("YES");
    if (f = (n & 1)) t[4] = n--;
    for (int i = 0; i < n; i += 4) {
      for (int j = 0; j < 4; ++j) t[j] = i + j + 1;
      f ? drint(t) : brint(t);
    }
    for (int i = 0; i < n; i += 4)
      for (int j = i + 4; j < n; j += 4) {
        for (int k = 0; k < 4; ++k) t[k] = i + k + 1;
        for (int k = 0; k < 4; ++k) r[k] = j + k + 1;
        qrint(t, r);
      }
  }
  return 0;
}
