#include <bits/stdc++.h>   using namespace std;   const int N = 100010;   int n, ans[N], an;   struct edge {     int to, nx, id, dl;   } ee[N];   int eq[N], en = 1;   void dfs(int d) {     for (int j = eq[d], k; k = ee[j].to, j; j = ee[j].nx)       if (!ee[j].dl) {         ee[j].dl = 1;         dfs(k);         ans[--an] = ee[j].id;       }   }   int main() {     scanf( %d , &n);     if (n & 1) {       printf( -1 n );       return 0;     }     for (int x = 0, t1, t2; x < n; x++) {       t1 = (x * 2 + 0) % n;       t2 = (x * 2 + 1) % n;       ee[++en] = (edge){((t1) / 2 + 1), eq[((x) / 2 + 1)], x, 0},       eq[((x) / 2 + 1)] = en;     }     an = n;     dfs(1);     for (int s = 0; s < n; s++)       if (ans[s] == 0) {         for (int i = 0; i < n; i++) printf( %d  , ans[(s + i) % n]);         printf( 0 n );         return 0;       }   }   