Problem: Given an integer N, find two permutations:

  1. Permutation p of numbers from 1 to N such that pi ≠ i and pi & i = 0 for all i = 1, 2, ..., N. 
  2. Permutation q of numbers from 1 to N such that qi ≠ i and qi & i ≠ 0 for all i = 1, 2, ..., N. 



& is the [bitwise AND operation](https://en.wikipedia.org/wiki/Bitwise_operation#AND).

Input

The input consists of one line containing a single integer N (1 ≤ N ≤ 105).

Output

For each subtask, if the required permutation doesn't exist, output a single line containing the word "NO"; otherwise output the word "YES" in the first line and N elements of the permutation, separated by spaces, in the second line. If there are several possible permutations in a subtask, output any of them.

Examples

Input

3


Output

NO
NO


Input

6


Output

YES
6 5 4 3 2 1 
YES
3 6 2 5 1 4

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
void calc(vector<int> &result, int N) {
  if (N == 0) return;
  int exp = 1;
  while (N >= 2 * exp) {
    exp *= 2;
  }
  for (int i = 0; i < N - exp + 1; i++) {
    result[exp + i] = exp - i - 1;
    result[exp - i - 1] = exp + i;
  }
  return calc(result, exp - N + exp - 2);
}
int main() {
  int N;
  cin >> N;
  if (N % 2 == 1) {
    cout << "NO" << endl;
  } else {
    cout << "YES" << endl;
    vector<int> result(N + 1, 0);
    calc(result, N);
    for (int i = 1; i <= N; i++) {
      cout << result[i] << " ";
    }
    cout << endl;
  }
  int exp = 1;
  while (2 * exp < N) {
    exp *= 2;
  }
  if (N < 6 || 2 * exp == N) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  if (N == 6) {
    cout << "3 6 2 5 1 4" << endl;
    return 0;
  }
  if (N == 7) {
    cout << "3 6 7 5 4 2 1" << endl;
    return 0;
  }
  vector<int> result = {3, 6, 7, 5, 4, 2, 1};
  int ex = 8;
  while (true) {
    result.push_back(min(2 * ex - 1, N));
    int i;
    for (i = ex; i < min(2 * ex - 1, N); i++) {
      result.push_back(i);
    }
    if (i == N) break;
    ex *= 2;
  }
  for (int i = 0; i < result.size(); i++) {
    cout << result[i] << " ";
  }
  cout << endl;
  return 0;
}