#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 51;
int n, x;
int res[MAXN];
inline int read() {
  register int num = 0, neg = 1;
  register char ch = getchar();
  while (!isdigit(ch) && ch != '-') {
    ch = getchar();
  }
  if (ch == '-') {
    neg = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    num = (num << 3) + (num << 1) + (ch - '0');
    ch = getchar();
  }
  return num * neg;
}
inline void calc1(int n) {
  if (n <= 0) {
    return;
  }
  int x = 31 - __builtin_clz(n);
  reverse(res + (1 << x + 1) - n - 1, res + n + 1);
  calc1((1 << x + 1) - n - 2);
}
inline void solve1() {
  if (n & 1) {
    return (void)puts("NO");
  }
  puts("YES");
  for (register int i = 1; i <= n; i++) {
    res[i] = i;
  }
  calc1(n);
  for (register int i = 1; i <= n; i++) {
    printf("%d ", res[i]);
  }
  puts("");
}
inline void solve2() {
  if (n == 3 || n == 5 || n == (n & -n)) {
    return (void)puts("NO");
  }
  puts("YES");
  for (register int i = 1; i <= n; i++) {
    res[i] = i;
  }
  if (n & 1) {
    printf("3 6 1 5 7 2 4 ");
    for (register int i = 8; i <= n; i += 2) {
      swap(res[i], res[i ^ 1]);
    }
    for (register int i = 8; i <= n; i++) {
      printf("%d ", res[i]);
    }
  } else {
    for (register int i = 2; i <= n - 3; i += 2) {
      swap(res[i], res[i + 1]);
    }
    swap(res[1], res[n - 1]), swap(res[n], res[n - 2]);
    for (register int i = 1; i <= n; i++) {
      printf("%d ", res[i]);
    }
  }
  puts("");
}
int main() { n = read(), solve1(), solve2(); }
