

cpp
复制代码
//首先排除所有数相等的情况,再把最大值放在一个组,那么最大值的gcd就等于其本身,再判断剩下的gcd是否等于最大值就可以了
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+100;
int a[N];
map<int,int>mapp;
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
mapp.clear();
int maxn=-1;
for(int i=1;i<=n;i++){
cin>>a[i];
mapp[a[i]]++;
maxn=max(maxn,a[i]);
}
if(mapp[maxn]==n){
cout<<"NO"<<endl;
}else{
int num=a[1];
int flag=0;
int x;
for(int i=2;i<=n;i++){
if(a[i]==maxn){
flag=1;
x=i;
continue;
}
num=__gcd(num,a[i]);
}
if(num!=maxn){
cout<<"YES"<<endl;
int u=0;
for(int i=1;i<=n;i++){
if(a[i]==maxn){
u=1;
cout<<2<<" ";
continue;
}
cout<<1<<" ";
}
cout<<endl;
}else{
cout<<"NO"<<endl;
}
}
}
}