解析:
统计相同元素的个数和位置,然后判断是否大于等于2
然后前两个放1,2和1,3,其余放1即可
#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int N=110;
int n,a[N],res[N];
void solve(){
scanf("%d",&n);
map<int,vector<int>>mp;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
mp[a[i]].push_back(i);
}
int cnt=0,p=0;
memset(res,0,sizeof res);
for(auto it:mp){
if(it.second.size()>=2){
cnt++;
vector<int>v=it.second;
res[v[0]]=1;
if(p==0){
for(int i=1;i<v.size();i++) res[v[i]]=2;
p++;
}
else if(p==1){
for(int i=1;i<v.size();i++) res[v[i]]=3;
p++;
}
}
}
if(cnt<2){
puts("-1");
return;
}
for(int i=1;i<=n;i++){
if(!res[i]) printf("1 ");
else printf("%d ",res[i]);
}
puts("");
}
signed main(){
int t=1;
scanf("%d",&t);
while(t--) solve();
return 0;
}