#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, ans[N], an;
struct edge {
  int to, nx, id, dl;
} ee[N];
int eq[N], en = 1;
void dfs(int d) {
  for (int j = eq[d], k; k = ee[j].to, j; j = ee[j].nx)
    if (!ee[j].dl) {
      ee[j].dl = 1;
      dfs(k);
      ans[--an] = ee[j].id;
    }
}
int main() {
  scanf("%d", &n);
  if (n & 1) {
    printf("-1\n");
    return 0;
  }
  for (int x = 0, t1, t2; x < n; x++) {
    t1 = (x * 2 + 0) % n;
    t2 = (x * 2 + 1) % n;
    ee[++en] = (edge){((t1) / 2 + 1), eq[((x) / 2 + 1)], x, 0},
    eq[((x) / 2 + 1)] = en;
  }
  an = n;
  dfs(1);
  for (int s = 0; s < n; s++)
    if (ans[s] == 0) {
      for (int i = 0; i < n; i++) printf("%d ", ans[(s + i) % n]);
      printf("0\n");
      return 0;
    }
}
