刚开始想的是需要最左边和最右边的数必须不能小于或者等于1,这样其实是错的,因为还有次小值和次大值,那么他们也都是需要重复元素来填的,所以每个数必须有重复值,不然就输出-1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define fir first
#define sec second
#define ot(x) cout<<x<<endl;
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
int ans,cnt,m,n,t,tt,k;
int mod=1e9+7;
const int N = 1e5;
int a[N],b[N];
//dp[2000][2000];
string s,ss,str;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
void solve(){
cin>>m;
for(int i=1;i<=m;i++)cin>>a[i];
int flag=1,r;
for(int l=1;l<=m;l=r+1){
r=l;
while(r<m&&a[l]==a[r+1])r++;
if(r==l){
flag=0;
break;
}
for(int j=l;j<r;j++)b[j]=j+1;
b[r]=l;
}
if(flag==0)cout<<"-1";
else{
for(int i=1;i<=m;i++)cout<<b[i]<<" ";
}
cout<<endl;
}
int main() {
int t = 1;cin >> t;while (t--){solve();}
return 0;
}