#include <bits/stdc++.h>
const int N = 100009;
int n;
std::vector<int> e[N];
int euler[N], tot;
int ans[N], ansn;
void dfs(int now) {
  while ((int)(e[now]).size()) {
    int to = *e[now].rbegin();
    e[now].pop_back();
    dfs(to);
  }
  euler[tot++] = now;
}
inline int id(int x) {
  if (x < (n >> 1))
    return x;
  else
    return x - (n >> 1);
}
inline int nex(int x) {
  if (x == tot - 1)
    return 0;
  else
    return x + 1;
}
inline void init() { std::cin >> n; }
inline void solve() {
  if (n & 1)
    puts("-1");
  else if (n == 2)
    puts("0 1 0");
  else {
    for (int i = 0; i < (n >> 1); ++i) {
      e[i].push_back(id(2 * i % n));
      e[i].push_back(id((2 * i + 1) % n));
    }
    dfs(0);
    std::reverse(euler, euler + tot);
    int pos = 0, cur, v = 0;
    while (euler[pos] != 0) pos++;
    cur = pos;
    do {
      ans[ansn++] = v;
      if (id(v * 2 % n) == euler[nex(cur)])
        v = v * 2 % n;
      else
        v = (v * 2 + 1) % n;
      cur = nex(cur);
    } while (cur != pos);
    for (int i = 0; i < ansn; ++i)
      printf("%d%c", ans[i], i == ansn - 1 ? '\n' : ' ');
  }
}
int main() {
  init();
  solve();
  return 0;
}
