#include <bits/stdc++.h> #define INF 1000000001LL #define LNF 1000000000000000001LL #define MOD 998244353LL #define MAX 1005 #define long long long #define all(x) x.begin(),x.end() using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> p(n); vector<int> pos[4]; for(int i = 0; i<n; i++) { int x; cin >> x; p[i] = x; pos[x&3].push_back(i); } if(n <= 4) { map<int, vector<int>> mp; vector<int> arr; for(int i = 1; i<=n; i++) arr.push_back(i); do { int x = 0; for(int i = 0; i<n; i++) x^=(arr[i]+p[i]); if(mp.count(x)) { for(int i = 0; i<n; i++) { cout << mp[x][i] << " "; } cout << "\n"; for(int i = 0; i<n; i++) { cout << arr[i] << " "; } cout << endl; return 0; } mp[x] = arr; } while (next_permutation(all(arr))); cout << "-1\n"; return 0; } int a = 1; int b = 2; int c = 3; int res1 = 0; int res2 = 0; if(pos[0].size() > 1) { res1 = pos[0][0]; res2 = pos[0][1]; } else if(pos[1].size() > 1) { res1 = pos[1][0]; res2 = pos[1][1]; } else if(pos[2].size() > 1) { res1 = pos[2][0]; res2 = pos[2][1]; a = 3; c = 1; } else if(pos[3].size() > 1) { res1 = pos[3][0]; res2 = pos[3][1]; } int index = 4; for(int i = 0; i<n; i++) { if(index > n) index = c; if(i == res1) cout << a << " "; else if(i == res2) cout << b << " "; else { cout << index << " "; index++; } } cout << "\n"; index = 4; for(int i = 0; i<n; i++) { if(index > n) index = c; if(i == res1) cout << b << " "; else if(i == res2) cout << a << " "; else { cout << index << " "; index++; } } return 0; }