#include <bits/stdc++.h> #define FOR(i,bg,ed) for(ll i=(bg);i<(ed);i++) #define REP(i,n) FOR(i,0,n) #define MOD 1000000007 //#define int long long using namespace std; typedef long long ll; const int INF = 1e9; const int MAX_V = 110; int V; vector<int> G[MAX_V]; int match[MAX_V]; bool used[MAX_V]; //uとvを結ぶ辺をグラフに追加する void add_edge(int u, int v) { G[u].push_back(v); G[v].push_back(u); } //増加パスをDFSで探す bool dfs(int v) { used[v] = true; for (int i=0; i<G[v].size(); i++) { int u = G[v][i], w = match[u]; if (w < 0 || !used[w] && dfs(w)) { match[v] = u; match[u] = v; return true; } } return false; } //二部グラフの最大マッチングを求める int bipartite_matching() { int res = 0; memset(match, -1, sizeof(match)); for (int v=0; v<V; v++) { if (match[v] < 0) { memset(used, 0, sizeof(used)); if (dfs(v)) { res++; } } } return res; } signed main() { int N; int A; cin >> N; V = N; REP(i,N) { cin >> A; REP(j,N) { if (j != A) { add_edge(i, N + j); } } } if (bipartite_matching() != N) { cout << -1 << endl; } else { REP(i,N) { cout << match[i] - N << endl; } } }