#include <bits/stdc++.h>
using namespace std;
int N;
int nxt[100100];
int rot[100100];
bool used[100100];
int findrot(int x) {
  if (rot[x] == x) return x;
  return rot[x] = findrot(rot[x]);
}
void dfs(int x) {
  if (nxt[x] != -1) return;
  int l = x * 2 % N, r = (x * 2 + 1) % N;
  if (!used[l]) {
    nxt[x] = l;
    used[l] = true;
  } else {
    nxt[x] = r;
    used[r] = true;
  }
  rot[findrot(nxt[x])] = findrot(x);
  dfs(nxt[x]);
  int y = (x + N / 2) % N;
  if (nxt[y] != -1) {
    if (findrot(x) != findrot(y)) {
      rot[rot[x]] = rot[y];
      swap(nxt[x], nxt[y]);
    }
  }
}
int main() {
  while (scanf("%d", &N) != EOF) {
    if (N & 1)
      printf("-1\n");
    else {
      memset(nxt, -1, sizeof(nxt));
      memset(used, 0, sizeof(used));
      for (int i = 0; i < N; i++) rot[i] = i;
      for (int i = 0; i < N; i++) {
        if (nxt[i] == -1) dfs(i);
      }
      int s = 0;
      for (int i = 0; i < N; i++) {
        printf("%d ", s);
        s = nxt[s];
      }
      printf("%d\n", s);
    }
  }
  return 0;
}
