#include <bits/stdc++.h>
int next[100010];
int mark[100010];
int n;
void solve() {
  scanf("%d", &n);
  if (n % 2) {
    puts("-1");
    return;
  }
  memset(next, -1, sizeof(next));
  memset(mark, -1, sizeof(mark));
  next[0] = 0;
  for (int i = 1; i < n; ++i) {
    int j = (i + n / 2) % n;
    if (next[j] == -1)
      next[i] = ((2 * i) % n + (rand() & 1)) % n;
    else
      next[i] = ((2 * i) % n + 1 - (next[j] - (2 * i) % n)) % n;
  }
  mark[0] = 0;
  for (int i = 0; i < n; ++i) {
    if (mark[i] == -1) continue;
    int j = (i + n / 2) % n;
    if (mark[j] == 0) continue;
    while (mark[j] == -1) {
      mark[j] = 0;
      j = next[j];
    }
    next[i] ^= next[j];
    next[j] ^= next[i];
    next[i] ^= next[j];
  }
  int i = 0;
  printf("0 ");
  while (next[i]) {
    printf("%d ", next[i]);
    i = next[i];
  }
  puts("0");
}
int test() {
  memset(next, -1, sizeof(next));
  memset(mark, -1, sizeof(mark));
  for (int i = 0; i < n; ++i) {
    int j = (i + n / 2) % n;
    if (next[j] == -1)
      next[i] = ((2 * i) % n + (rand() & 1)) % n;
    else
      next[i] = ((2 * i) % n + 1 - (next[j] - (2 * i) % n)) % n;
  }
  int cnt = 0;
  for (int i = 0; i < n; ++i) {
    if (mark[i] != -1) continue;
    mark[i] = cnt;
    int j = next[i];
    while (mark[j] == -1) {
      mark[j] = cnt;
      j = next[j];
    }
    cnt++;
  }
  return cnt;
}
int main() {
  srand(time(NULL));
  solve();
  return 0;
}
