#include <bits/stdc++.h>
using namespace std;
struct node {
  int u, v;
  int nt;
  bool flag;
} e[500005];
int node[100005];
int eid = 0;
void addedge(int i, int j) {
  e[eid].u = i;
  e[eid].v = j;
  e[eid].nt = node[i];
  e[eid].flag = true;
  node[i] = eid++;
}
int ans[100005];
int ed = 0;
int mul[100005];
int n;
void dfs(int i) {
  int j;
  for (j = node[i]; j != -1; j = e[j].nt) {
    if (e[j].flag == false) continue;
    e[j].flag = false;
    dfs(e[j].v);
  }
  ans[ed++] = i;
}
int main() {
  int i;
  scanf("%d", &n);
  if (n % 2) {
    puts("-1");
    return 0;
  }
  if (n == 2) {
    printf("0 1 0\n");
    return 0;
  }
  eid = 0;
  ed = 0;
  memset(node, -1, sizeof(node));
  for (i = 0; i < n; ++i) {
    addedge(i / 2, i % (n / 2));
  }
  for (i = 0; i < n; ++i) mul[i] = 0;
  dfs(0);
  for (i = ed - 1; i >= 0; --i) {
    if (i == ed - 1)
      printf("%d", ans[i]);
    else {
      if (ans[i] == (2 * ans[i + 1]) % n || ans[i] == (2 * ans[i + 1] + 1) % n)
        printf(" %d", ans[i]);
      else
        printf(" %d", ans[i] + n / 2);
    }
  }
}
