#include <bits/stdc++.h>
using namespace std;
const int MAXN = 111111;
const int oo = (int)(1e9);
const long double PI = 3.141592653589793;
template <class T>
inline bool chkmin(T &a, T b) {
  return a > b ? a = b, true : false;
}
template <class T>
inline bool chkmax(T &a, T b) {
  return a < b ? a = b, true : false;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <typename T>
T gcd(T x, T y) {
  for (T t; x; t = x, x = y % x, y = t)
    ;
  return y;
}
template <typename TT>
void read(TT &x) {
  char ch;
  for (ch = getchar(); ch > '9' || ch < '0'; ch = getchar())
    ;
  for (x = 0; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - 48;
}
int n, v[1111111];
vector<int> A, B;
void Init() {
  memset(v, 0, sizeof(v));
  ;
  v[0] = 1;
  scanf("%d", &n);
  ;
  int i = 0, j = 0, s = 0;
  A.push_back(i), B.push_back(j);
  while (1) {
    int a = (i + i) % n, b = (i + i + 1) % n;
    int c = j / 2, d = (j + n) / 2;
    if (v[a] + v[b] == 2 || v[c] + v[d] == 2) break;
    if (v[a] + v[b] == 1) {
      if (!v[a])
        v[i = a] = 1;
      else
        v[i = b] = 1;
      A.push_back(i);
      s++;
      continue;
    } else {
      if (!v[c] && (c > d || v[d]))
        v[j = c] = 1;
      else
        v[j = d] = 1;
      B.push_back(j);
      s++;
      continue;
    }
  }
  if (s < n - 1)
    cout << -1;
  else {
    for (__typeof(A.begin()) it = A.begin(); it != A.end(); it++)
      cout << *it << ' ';
    for (int i = 0; i < B.size(); i++) {
      cout << B[B.size() - i - 1];
      cout << ((i < B.size()) ? ' ' : '\n');
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  Init();
  return 0;
}
