返回:
Unknown Error.FAIL card does not exist
#include<bits/stdc++.h>
using namespace std;
const int N = 3e6 + 5;
int n, x, sum[N], val, a[N], fir;
bool ins[N];
bitset<N>num;
stack<int>s;
inline void clear(){
while(!s.empty()){
ins[s.top()] = 0;
sum[s.top()]++;
s.pop();
}
}
inline void add(int x){
s.push(x);
ins[x] = 1;
}
inline int RAND(){
return rand() * rand() % n + 1;
}
int main(){
// freopen("P9137_1.in", "r", stdin);
// freopen("code.out", "w", stdout);
srand(time(NULL));
scanf("%d", &n);
if(n == 1){
printf("-1");
return 0;
}
for(int i = 1; i <= n; i++){
num[i] = 1;
}
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
num[a[i]] = 0;
sum[a[i]]++;
}
if(num == 0){
printf("%d\n%d ", n + 2, a[n]);
for(int i = 1; i < n; i++){
printf("%d ", a[i]);
}
printf("%d %d\n", a[1], a[1]);
return 0;
}
printf("%d\n", n);
for(int i = 1; i <= n; i++){
if(sum[i] == 0) fir = i;
sum[i] = 2 - sum[i];
}
printf("%d ", fir);
add(fir), add(a[1]);
sum[fir]--;
for(int i = 2; i <= n; i++){
if(ins[a[i]]){
printf("%d ", fir);
sum[fir]--;
clear();
fir = a[i];
add(a[i]);
}
else{
x = RAND();
while(x == fir || !sum[x]) x = RAND();
add(x);
sum[x]--;
printf("%d ", x);
add(a[i]);
}
}
return 0;
}