#include using namespace std; //*/ #include using namespace atcoder; //*/ #define rep(i,n) for(int i=0;i; using ll = long long; using ull = unsigned long long; //*/ template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } typedef pair pii; typedef pair pll; typedef vector vll; typedef vector vint; random_device rnd; mt19937 rng(rnd()); using mint = modint998244353; class Timer { public: Timer() { begin(); elapsed_time_ = 0.0; } void begin() { start_time_ = chrono::system_clock::now(); } double get_time() { chrono::system_clock::time_point end_time = chrono::system_clock::now(); elapsed_time_ = chrono::duration_cast(end_time - start_time_).count(); elapsed_time_ *= 1e-9; // nanoseconds -> seconds return elapsed_time_; } double get_last_time() const { return elapsed_time_; } bool yet(double time_limit) { return get_time() < time_limit; } double progress(double time_limit) { return get_time() / time_limit; } private: chrono::system_clock::time_point start_time_; double elapsed_time_; }; constexpr double time_limit = 1.8; void solve(){ Timer timer; int n; cin >> n; vint a(n); rep(i,n) cin >> a[i]; vint p(n),q(n); rep(i,n) p[i] = i+1,q[i] = i+1; while(timer.yet(time_limit)){ int i = rng()%n; int j = rng()%n; while(i==j) j = rng()%n; if(((a[i]+p[i])^(a[j]+p[j])) == ((a[i]+p[j])^(a[j]+p[i]))){ //cout << ((a[i]+p[i])^(a[j]+p[j])) << " " << ((a[i]+p[i])^(a[j]+p[j])) << endl; swap(q[i],q[j]); dbgv(p); dbgv(q); return; } } cout << -1 << endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; //cin >> t; rep(dirc,t) solve(); }