#include <bits/stdc++.h>
int nxt[100001], n, tag[100001], x = 1;
void dfs(int now, int sv) {
  if (now == sv) return;
  if (sv != 0) nxt[now] = sv;
  tag[now] = 1;
  if (tag[(2 * now) % n] != 1 && x < n) {
    if (tag[(2 * now) % n] != 2) x++;
    nxt[now] = (2 * now) % n;
    dfs((now * 2) % n, sv);
  }
  if (tag[(2 * now + 1) % n] != 1 && x < n) {
    if (nxt[now] != -1) sv = nxt[now];
    if (tag[(2 * now + 1) % n] == 0 ||
        (tag[(2 * now + 1) % n] == 2 && (2 * now + 1) % n == sv)) {
      x++;
      nxt[now] = (2 * now + 1) % n;
      dfs((now * 2 + 1) % n, sv);
    }
  }
  tag[now] = 2;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) nxt[i] = -1;
  if (n % 2)
    printf("-1\n");
  else {
    nxt[0] = 1;
    dfs(1, 0);
    printf("0 1 ");
    int now = 1;
    while (now != 0) {
      now = nxt[now];
      printf("%d ", now);
    }
  }
  return 0;
}
