#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int n;
pair<int, int> nxt[maxn][maxn];
pair<int, int> bef[maxn][maxn];
pair<int, int> tail = make_pair(-1, -1);
void addToTail(int i, int j) {
  if (i > j) swap(i, j);
  if (tail.first != -1) nxt[tail.first][tail.second] = make_pair(i, j);
  bef[i][j] = tail;
  tail = make_pair(i, j);
}
int main() {
  scanf("%d", &n);
  if ((n / 2) % 2) {
    puts("NO");
    return 0;
  }
  memset(nxt, -1, sizeof(nxt));
  memset(bef, -1, sizeof(bef));
  for (int i = 0; i < n - 1; i += 4) {
    for (int j = 0; j < i; j++) addToTail(i, j);
    addToTail(i, i + 1);
    for (int j = i - 1; j >= 0; j--) addToTail(i + 1, j);
    addToTail(i, i + 2);
    addToTail(i + 1, i + 3);
    addToTail(i, i + 3);
    addToTail(i + 1, i + 2);
    for (int j = 0; j < i; j++) addToTail(i + 2, j);
    addToTail(i + 2, i + 3);
    for (int j = i - 1; j >= 0; j--) addToTail(i + 3, j);
  }
  if (n % 2) {
    for (int j = 0; j < n / 2 * 2; j += 2) {
      int i = n - 1;
      pair<int, int> rbef = bef[j][j + 1];
      bef[j][i] = rbef;
      nxt[j][i] = make_pair(j, j + 1);
      bef[j][j + 1] = make_pair(j, i);
      if (rbef.first != -1) nxt[rbef.first][rbef.second] = make_pair(j, i);
      pair<int, int> rnxt = nxt[j][j + 1];
      bef[j + 1][i] = make_pair(j, j + 1);
      nxt[j + 1][i] = rnxt;
      nxt[j][j + 1] = make_pair(j + 1, i);
      if (rnxt.first != -1) bef[rnxt.first][rnxt.second] = make_pair(j + 1, i);
    }
  }
  puts("YES");
  pair<int, int> head = make_pair(0, 1);
  while (bef[head.first][head.second].first != -1) {
    head = bef[head.first][head.second];
  }
  if (n == 1) return 0;
  while (head.first != -1) {
    printf("%d %d\n", head.first + 1, head.second + 1);
    head = nxt[head.first][head.second];
  }
  return 0;
}
