#include using namespace std; #define rep(i, l, r) for (int i = (int)(l); i < (int)(r); i++) #define siz(x) (int)(x).size() int main() { int N; cin >> N; vector P(N); rep(i, 0, N) { cin >> P[i]; P[i]--; } vector S(N); rep(i, 0, N) S[i] = (P[i] + 1) % N; vector seen(N, false); vector>> cycles(N+1); rep(i, 0, N) { if (seen[i]) continue; int v = i; vector cycle; do { cycle.push_back(v); seen[v] = true; v = S[v]; } while(v != i); cycles[siz(cycle)].push_back(cycle); } vector R(N); rep(l, 1, N+1) { if (l%2 == 0) { if ((int)cycles[l].size()%2 == 1) { cout << -1 << endl; return 0; } rep(i, 0, siz(cycles[l])/2) { vector c1 = cycles[l][i*2], c2 = cycles[l][i*2+1]; rep(t, 0, l) { R[c1[t]] = c2[t]; R[c2[t]] = c1[(t+1)%l]; } } } else { for (vector c : cycles[l]) { rep(i, 0, siz(c)) { //((l+1)/2) * 2 = (l + 1) = l (mod l) R[c[i]] = c[(i+(l+1)/2)%l]; } } } } vector Q(N); rep(i, 0, N) { Q[i] = (R[i] - 1 + N) % N; } rep(i, 0, N) { cout << Q[i] + 1 << " "; } cout << endl; }