Fctre what the problem

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define M 1000000007

void primeFactors(ll n , ll hash[101000],ll &p)
{

while (n % 2 == 0)  
{  
    p++;
    hash[p]=2; 
    n = n/2;  
} 

for (ll i = 3; i <= sqrt(n); i = i + 2)  
{  
  
    while (n % i == 0)  
    {  
       // hash[i]++; 
       p++;
       hash[p]=i;
        n = n/i;  
    }  
} 
if (n > 2)  
 {
    //hash[n]++;
    p++;
    hash[p]=n;
 }

}
void fun()
{
ll a[100020][1000],b,n,i,j,k,l,q,c,d,size[100020]={0},nn;
ll ar[100020][1000]={0},s[100020]={0},done[100020]={0},cost[100020],p,ans[100020];
cin>>n;
for(i=1;i<n;i++)
{
cin>>c>>d;
size[c]++;
a[c][size[c]]=d;
size[d]++;
a[d][size[d]]=c;

}

s[1]++;
ar[1][s[1]]=1;
done[1]=1;
for(i=1;i<=n;i++)
{
      for(j=1;j<=size[i];j++)
      {
           nn=a[i][j];
           if(done[nn]==0)
           {
           s[nn]++;
           ar[nn][s[nn]]=nn;
           for(k=1;k<=s[i];k++)
           {
                s[nn]++;
                ar[nn][s[nn]]=ar[i][k];
           }
           done[nn]=1;
           }
      }
}
for(i=1;i<=n;i++)
{
     cin>>cost[i];
}
ll fullhash[1200][101000]={0},ps[120000]={0},ta;
for(i=1;i<=n;i++)
{
     for(j=1;j<=s[i];j++)
     {
          primeFactors(cost[ar[i][j]],fullhash[i],ps[i]);
     }
}


cin>>q;
for(i=1;i<=q;i++)
{
     ll array[120000]={0},an=0,hash[101000]={0},tot=1,mai[120000],ms=0,cc,cn=0,pp;
     cin>>c>>d;
     
     if(c==d)
     {
         primeFactors(cost[c],hash,cn);
         sort(hash+1,hash+1+ms);
         cc=1;
     for(j=1;j<cn;j++)
     {
          
          if(hash[j]==hash[j+1])
          {
               cc++;
          }
          else
          {
               tot=tot*(cc+1)%M;
               cc=1;
          }
     }
     if(cn!=0)
     tot=tot*(cc+1)%M;
     cout<<tot<<"\n";
     continue;
     }
     for(j=s[c],k=s[d];ar[c][j]==ar[d][k]&&j>0&&k>0;)
     {
          
          primeFactors(cost[ar[c][j]],hash,cn);
          if(ar[c][j-1]==ar[d][k-1])
          primeFactors(cost[ar[d][k]],hash,cn);
          k--;
          j--;
     }
     
     for(j=1;j<=ps[c];j++)
     {
          ms++;
          mai[ms]=fullhash[c][j];
     }
     for(j=1;j<=ps[d];j++)
     {
          ms++;
          mai[ms]=fullhash[d][j];
     }
     sort(mai+1,mai+1+ms);
     for(j=1;j<=cn;j++)
     {
       for(k=1;k<=ms;k++)
       {
            if(hash[j]==mai[k])
            {
                 mai[k]=0;
                // cout<<k<<" ";
                 break;
            }
       }
     }
     sort(mai+1,mai+1+ms);
     cc=1;
     for(j=1;j<ms;j++)
     {
          
          if(mai[j]==0)
          continue;
          if(mai[j]==mai[j+1])
          {
               cc++;
          }
          else
          {
               tot=tot*(cc+1)%M;
               cc=1;
          }
     }
     if(mai[ms]!=0)
     tot=tot*(cc+1)%M;
     cout<<tot<<"\n";
     
}

}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll num;
cin>>num;
while(num>=1)
{
num–;
fun();
}
return 0;
}