#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;
int valid(int n, int a[]){
int mn = INT_MAX, p;
set<int> s;
for(int i = 0;i<n;i++){
if(s.find(a[i]) != s.end()) return 0;
s.insert(a[i]);
if(a[i] < mn){
mn = a[i];
p = i;
}
}
if(mn > n) return 1;
for(int i = 0;i<n;i++){
int pos = (i + p) % n;
if(a[pos] <= n && a[pos] != mn + i) return 0;
}
return 1;
}
//----------------------
int replacement(int n, int a[], int r[]){
int l = 0;
vector<int> og(n, -1);
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
for(int i = 0;i<n;i++){
if(a[i] <= n){
og[i] = a[i];
for(int j = i + 1;j<n;j++) og[j] = og[j - 1] + 1;
if(og[0] == -1){
og[0] = og[n - 1] + 1;
for(int j = 1;j<i;j++) og[j] = og[j - 1] + 1;
}
}else{
pq.push({a[i], i});
}
}
if(og[0] == -1){
for(int i = 0;i<n;i++) og[i] = i + 1;
}
for(int i = 0;i<n;i++){
og[i]--;
og[i] %= n;
og[i]++;
}
int cur = n + 1;
while(!pq.empty()){
auto [d, i] = pq.top();
pq.pop();
r[l++] = og[i];
while(cur < d){
r[l++] = cur;
++cur;
}
}
return l;
}
//----------------------
int countReplacement(int n, int a[]){
return -3;
}