for _ in range(int(input())):
n=int(input())
a=list(map(int,input().split()))
t=[0]*(max(a)+1)
for i in range(n):
t[a[i]]+=1
c=0
for i in t:
if i >= 2: c+=1
if c<2: print(-1); continue
else:
cnt=0; b=[]
a=[(a[i], i) for i in range(n)]
a.sort()
i=0
while i < n:
if t[a[i][0]]>=2:
if cnt==0:
b+=[1]+[2]*(t[a[i][0]]-1);
else:
b+=[1]+(t[a[i][0]]-1)*[3];
cnt+=1
else: b+=[1]
i=len(b)
c=[0]*n
for i in range(n):
c[a[i][1]] = b[i]
print(*c); continue
print(-1)
#include <bits/stdc++.h>
#define int long long
using namespace std;
int32_t main() {
int T;
cin>>T;
while(T--) {
int n;
cin>>n;
map<int,vector<int>>mp;
vector<int>arr(n);
for (int i=0;i<n;i++) cin>>arr[i];
for (int i=0;i<n;i++) {
mp[arr[i]].push_back(i);
}
int check=0;
for (auto x:mp) {
if (x.second.size()>=2) check++;
}
if (check<=1) cout<<-1<<endl;
else {
vector<int>out(n);
int c=0;
for (auto x:mp) {
if (c%2==0) {
for (int i=0;i<x.second.size();i++) {
if (i%2==0) {
out[x.second[i]]=1;
}
else out[x.second[i]]=2;
}
}
else {
for (int i=0;i<x.second.size();i++) {
if (i%2==0) {
out[x.second[i]]=1;
}
else out[x.second[i]]=3;
}
}
if (x.second.size()>1) c++;
}
for (auto y:out) cout<<y<<" ";
cout<<endl;
}
}
}
1025D - Recovering BST | 439A - Devu the Singer and Churu the Joker |
1323A - Even Subset Sum Problem | 1095A - Repeating Cipher |
630F - Selection of Personnel | 630K - Indivisibility |
20B - Equation | 600B - Queries about less or equal elements |
1015A - Points in Segments | 1593B - Make it Divisible by 25 |
680C - Bear and Prime 100 | 1300A - Non-zero |
1475E - Advertising Agency | 1345B - Card Constructions |
1077B - Disturbed People | 653A - Bear and Three Balls |
794A - Bank Robbery | 157A - Game Outcome |
3B - Lorry | 1392A - Omkar and Password |
489A - SwapSort | 932A - Palindromic Supersequence |
433A - Kitahara Haruki's Gift | 672A - Summer Camp |
1277A - Happy Birthday Polycarp | 577A - Multiplication Table |
817C - Really Big Numbers | 1355A - Sequence with Digits |
977B - Two-gram | 993A - Two Squares |