#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int main() { int n; scanf("%d", &n); int a[n]; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } bool check = false; for (int i = 0; i < n-1; i++) { if (a[i] != a[i+1]) { check = true; break; } } if (!check && a[0] < n) { puts("-1"); return 0; } pair memo[n]; for (int i = 0; i < n; i++) { if (a[i] >= n) { memo[i] = {-1, i}; }else { memo[i] = {a[i], i}; } } sort(memo, memo+n); int ans[n]; memset(ans, -1, sizeof(ans)); for (int i = 0; i < n; i++) { if (memo[i].first != i) { bool ok = true; for (int j = i+1; j < n; j++) { if (memo[j].first == j) { ok = false; ans[memo[j].second] = i; swap(memo[i], memo[j]); break; } } if (ok) { ans[memo[i].second] = i; } continue; } for (int j = i+1; j < n; j++) { if (memo[j].first != i) { ans[memo[j].second] = i; swap(memo[i], memo[j]); break; } } } for (int i = 0; i < n; i++) { printf("%d\n", ans[i]); } }