# include # include #include # include #include #include #include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include #include #include #include #include //#include using namespace std; using LL = long long; using ULL = unsigned long long; constexpr long long MOD = 1000000000 + 7; constexpr long long INF = std::numeric_limits::max(); const double PI = acos(-1); #define fir first #define sec second #define thi third #define debug(x) cerr<<#x<<": "< Pll; typedef pair> Ppll; typedef pair>> Pbll; typedef pair>> Pvll; typedef pair Vec2; struct Tll { LL first, second, third; }; typedef pair Ptll; #define rep(i,rept) for(LL i=0;i=0;i--) LL h, w, n, m, k, s, t, q, sum, last, cnt, ans, a,dt[100]; string str,ss; struct Edge { LL cost, from, to; }; vectorvec; bool f; char c; void YN(bool f) { if (f) cout << "YES" << endl; else cout << "NO" << endl; } void yn(bool f) { if (f) cout << "Yes" << endl; else cout << "No" << endl; } struct edge { LL to, cap, rev,f; }; struct Maxflow { //vec[e.to][e.rev]で逆辺 vector>vec; Maxflow(LL n) :vec(n + 1) {} void addedge(LL from, LL to, LL cap) { vec[from].push_back(edge{ to, cap, (LL)vec[to].size(),0 }); vec[to].push_back(edge{ from, 0, (LL)vec[from].size() - 1,1 }); } LL dfs(vector &used, LL v, LL t, LL f) { if (v == t)return f; used[v] = true; rep(i, vec[v].size()) { edge& e = vec[v][i]; if (!used[e.to] && e.cap > 0) { LL d = dfs(used, e.to, t, min(f, e.cap)); if (d > 0) { e.cap -= d; if (e.f == 0&&v>0&&v<100)dt[v] = e.to; vec[e.to][e.rev].cap += d; return d; } } } return 0; } LL ford(LL s, LL t) { LL flow = 0; for (;;) { vector used(10000, false); LL f = dfs(used, s, t, INF); if (f == 0)return flow; flow += f; } } }; int main() { cin >> n; Maxflow mf(1000); rep(i, n) { mf.addedge(0, i + 1, 1); } rep(i, n) { mf.addedge(i + 100, 900, 1); } rep(i, n) { LL x; cin >> x; rep(j, n)if (x != j)mf.addedge(i + 1, j + 100, 1); } if (mf.ford(0, 900) == n) { rep(i, n)cout << dt[i + 1]-100 << endl; } else cout << -1 << endl; return 0; }