//首先排除所有数相等的情况,再把最大值放在一个组,那么最大值的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;}}}
}