#include <bits/stdc++.h>
using namespace std;
const pair<int, int> DD[] = {{1, 0},  {1, 1},   {0, 1},  {-1, 1},
                             {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
template <class T>
T smin(T &a, T b) {
  if (a > b) a = b;
  return a;
}
template <class T>
T smax(T &a, T b) {
  if (a < b) a = b;
  return a;
}
int main(void) {
  srand(time(0));
  cout << fixed << setprecision(7);
  cerr << fixed << setprecision(7);
  int n;
  cin >> n;
  if ((n % 4) == 2 || (n % 4) == 3) return puts("NO") * 0;
  puts("YES");
  auto go = [&](int a, int b) {
    cout << min(a, b) << ' ' << max(a, b) << '\n';
  };
  for (int i = 1; i + 3 <= n; i += 4) {
    if (n % 4)
      go(i, n), go(i, i + 1), go(i + 1, n), go(n, i + 2), go(i + 2, i + 3),
          go(i + 3, n);
    else
      go(i, i + 1), go(i + 2, i + 3);
    go(i + 1, i + 2);
    go(i, i + 3);
    go(i, i + 2);
    go(i + 1, i + 3);
  }
  vector<pair<int, int> > v;
  v.push_back(make_pair(3, 2));
  v.push_back(make_pair(2, 2));
  v.push_back(make_pair(3, 1));
  v.push_back(make_pair(0, 1));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 3));
  v.push_back(make_pair(1, 2));
  v.push_back(make_pair(1, 1));
  v.push_back(make_pair(3, 0));
  v.push_back(make_pair(3, 3));
  v.push_back(make_pair(0, 2));
  v.push_back(make_pair(0, 3));
  v.push_back(make_pair(2, 0));
  v.push_back(make_pair(2, 1));
  v.push_back(make_pair(1, 0));
  v.push_back(make_pair(0, 0));
  for (int i = 1; i + 3 <= n; i += 4)
    for (int j = i + 4; j + 3 <= n; j += 4)
      for (auto it : v) go(i + it.first, j + it.second);
  cerr << "Time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms"
       << '\n';
  return 0;
}
