#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("O0")
#pragma GCC optimize("O1")
template <typename T>
void vec_SUN(vector<T> &Vec) {
  vector<T> X;
  X = Vec;
  sort(X.begin(), X.end());
  X.resize(unique(X.begin(), X.end()) - X.begin());
  for (auto &u : Vec) u = lower_bound(X.begin(), X.end(), u) - X.begin() + 1;
}
template <typename T>
void arr_SUN(T *A, int n) {
  vector<T> B(n);
  for (int i = 0; i < n; i++) B[i] = A[i];
  sort(B.begin(), B.end());
  B.resize(unique(B.begin(), B.end()) - B.begin());
  for (int i = 0; i < n; i++)
    A[i] = lower_bound(B.begin(), B.end(), A[i]) - B.begin() + 1;
}
template <typename T>
void vec_012(vector<T> &A, int n) {
  A.resize(n);
  for (int i = 0; i < n; i++) A[i] = (T)i;
}
template <typename T>
void arr_012(T *A, int n) {
  for (int i = 0; i < n; i++) A[i] = (T)i;
}
template <typename T>
void vec_123(vector<T> &A, int n) {
  A.resize(n);
  for (int i = 0; i < n; i++) A[i] = (T)(i + 1);
}
template <typename T>
void arr_123(T *A, int n) {
  for (int i = 0; i < n; i++) A[i] = (T)(i + 1);
}
template <typename T>
void arr_equal(T *A, T *P, int n) {
  for (int i = 0; i < n; i++) P[i] = A[i];
}
template <typename T>
void setTOvec(set<T> &S, vector<T> &V) {
  V.resize(S.size());
  int i = 0;
  for (auto it = S.begin(); it != S.end(); it++) V[i++] = *it;
}
const int N = 1e5 + 5;
struct X {
  int A[N];
  int s = 0;
  void add(int x) { A[s++] = x; }
  void del() { s--; }
  void print() {
    cout << 0 << ' ';
    for (int i = s - 1; i >= 0; i--) cout << A[i] << ' ';
  }
};
bitset<N> M;
int n;
bool f(X &ANS, int s) {
  if (s == 0 && ANS.s == n) {
    ANS.print();
    return true;
  }
  if (M[s]) return false;
  M[s] = true;
  ANS.add(s);
  if (f(ANS, s / 2)) return true;
  if (f(ANS, (s + n) / 2)) return true;
  ANS.del();
  M[s] = false;
  return false;
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  X ANS;
  if (n % 2 == 1)
    cout << -1;
  else
    f(ANS, 0);
  return 0;
}
