1.
const int maxn = 1e6+10;
bool is_not_pri[maxn];
int dp[maxn], tol;
void presolve(){
is_not_pri[1] = true;
for(int i=2; i<maxn; i++){
if(is_not_pri[i]) continue;
for(int k=i+i; k<=maxn; k+=i){
is_not_pri[k] = true;
}
}
for(int i=2; i<maxn; i++){
if(is_not_pri[i] == false){
dp[tol++] = i;
}
}
}
int n;
void solve(){
cin >> n;
unordered_map<int, int> cnt;
for(int i=0; i<n; i++){
int x; cin >> x;
for(int k=0; k<tol; k++){
if(dp[k] > x) break;
int pos = lower_bound(dp, dp+tol, x)-dp;
if(dp[pos] == x){
cnt[x]++;
x = 1;
break;
}
while(x%dp[k] == 0){
cnt[dp[k]]++;
x /= dp[k];
}
}
}
for(auto &x: cnt){
if(x.second%n){
cout << "NO" << endl;
return;
}
}
cout << "YES" << endl;
}
signed main(){
int t; t = 1;
presolve();
cin >> t;
while(t--){
solve();
}
}