#include<iostream>
#include<algorithm>
#include<vector>
#define first ff
#define second ss
#define make_pair mp
using namespace std;
const int maxN = 20005;
const long long mod = 1000000007;
int n, k, a[maxN], b[maxN], x[10011],prime[10011]; vector<vector<int> > v; vector<int> w, p;
void primes(){
int i,max = 10010,j;
for(i=0;i<max;i++){
x[i] = 1;
}
k=0;
for(i=2;i<max;i++){
if(x[i]){
prime[k] = i;
for(j=i;j<max;j+=i){
x[j] = 0;
}
k++;
}
}
}
long long modpow(int a, int b){
if(b==0){
return 1;
}
if(b==1){
return a;
}
long long ans = modpow(a,b/2);
ans = (ans *ans)%mod;
if(b%2){
ans = (ans*a)%mod;
}
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
int tt,i;
primes();
cin>>tt;
while(tt--){
v.clear(); p.clear();
int mx = -1;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i]; b[i] = a[i]; mx = max(mx,a[i]);
}
int t,j=0, ct =0; long long temp, ans=1;
while(prime[j]*prime[j] <= mx){
w.clear();
mx = -1;
for(i=0;i<n;i++){
t=0;
if(b[i]%prime[j] == 0){
while(b[i]%prime[j] == 0){
t++; b[i]/=prime[j];
}
w.push_back(t);
}
mx = max(mx,b[i]);
}
if(!w.empty()){
p.push_back(prime[j]);
v.push_back(w);
ct++;
}
j++;
}
t = 0;
for(i=0;i<ct;i++){
sort(v[i].begin(),v[i].end());
t = 0;
for(j=0;j<v[i].size()-1;j++){
t+=v[i][j];
}
if(t >= v[i][j]){
t+=v[i][j];
if(t%2 == 1){
ans = (ans * p[i])%mod;
}
}
else{
t = v[i][j] - t;
ans = (ans * modpow(p[i],t))%mod;
}
}
sort(b,b+n); b[n] = -1;
for(i=0;i<n;i++){
t = 1;
if(b[i]!=1){
j = b[i];
if(b[i] == b[i+1]){
while(b[i] == b[i+1]){
t++; i++;
}
}
if(t%2 == 1){
ans = (ans * j)%mod;
}
}
}
cout<<ans<<"\n";
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8dmVjdG9yPgogCiNkZWZpbmUgZmlyc3QgZmYKI2RlZmluZSBzZWNvbmQgc3MKI2RlZmluZSBtYWtlX3BhaXIgbXAKIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNvbnN0IGludCBtYXhOID0gMjAwMDU7CmNvbnN0IGxvbmcgbG9uZyBtb2QgPSAxMDAwMDAwMDA3OwppbnQgbiwgaywgYVttYXhOXSwgYlttYXhOXSwgeFsxMDAxMV0scHJpbWVbMTAwMTFdOyB2ZWN0b3I8dmVjdG9yPGludD4gPiB2OyB2ZWN0b3I8aW50PiB3LCBwOwogCnZvaWQgcHJpbWVzKCl7CiAgaW50IGksbWF4ID0gMTAwMTAsajsKICBmb3IoaT0wO2k8bWF4O2krKyl7CiAgICB4W2ldID0gMTsKICB9CiAgaz0wOwogIGZvcihpPTI7aTxtYXg7aSsrKXsKICAgIGlmKHhbaV0pewogICAgICBwcmltZVtrXSA9IGk7CiAgICAgIGZvcihqPWk7ajxtYXg7ais9aSl7Cgl4W2pdID0gMDsKICAgICAgfQogICAgICBrKys7CiAgICB9CiAgfQp9CiAKbG9uZyBsb25nIG1vZHBvdyhpbnQgYSwgaW50IGIpewogIGlmKGI9PTApewogICAgcmV0dXJuIDE7CiAgfQogIGlmKGI9PTEpewogICAgcmV0dXJuIGE7CiAgfQogIGxvbmcgbG9uZyBhbnMgPSBtb2Rwb3coYSxiLzIpOwogIGFucyA9IChhbnMgKmFucyklbW9kOwogIGlmKGIlMil7CiAgICBhbnMgPSAoYW5zKmEpJW1vZDsKICB9CiAgcmV0dXJuIGFuczsKfQogCmludCBtYWluKCl7CiAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgaW50IHR0LGk7CiAgcHJpbWVzKCk7CiAgY2luPj50dDsKICB3aGlsZSh0dC0tKXsKICAgIHYuY2xlYXIoKTsgcC5jbGVhcigpOwogICAgaW50IG14ID0gLTE7CiAgICBjaW4+Pm47CiAgICBmb3IoaT0wO2k8bjtpKyspewogICAgICBjaW4+PmFbaV07IGJbaV0gPSBhW2ldOyBteCA9IG1heChteCxhW2ldKTsKICAgIH0KICAgIGludCB0LGo9MCwgY3QgPTA7IGxvbmcgbG9uZyB0ZW1wLCBhbnM9MTsKICAgIHdoaWxlKHByaW1lW2pdKnByaW1lW2pdIDw9IG14KXsKICAgICAgdy5jbGVhcigpOwogICAgICBteCA9IC0xOwogICAgICBmb3IoaT0wO2k8bjtpKyspewoJdD0wOwoJaWYoYltpXSVwcmltZVtqXSA9PSAwKXsKCSAgd2hpbGUoYltpXSVwcmltZVtqXSA9PSAwKXsKCSAgICB0Kys7IGJbaV0vPXByaW1lW2pdOwoJICB9CgkgIHcucHVzaF9iYWNrKHQpOwoJfQoJbXggPSBtYXgobXgsYltpXSk7CiAgICAgIH0KICAgICAgaWYoIXcuZW1wdHkoKSl7CglwLnB1c2hfYmFjayhwcmltZVtqXSk7Cgl2LnB1c2hfYmFjayh3KTsKCWN0Kys7CiAgICAgIH0KICAgICAgaisrOwogICAgfQogICAgdCA9IDA7CiAgICBmb3IoaT0wO2k8Y3Q7aSsrKXsKICAgICAgc29ydCh2W2ldLmJlZ2luKCksdltpXS5lbmQoKSk7CiAgICAgIHQgPSAwOwogICAgICBmb3Ioaj0wO2o8dltpXS5zaXplKCktMTtqKyspewoJdCs9dltpXVtqXTsKICAgICAgfQogICAgICBpZih0ID49IHZbaV1bal0pewoJdCs9dltpXVtqXTsKCWlmKHQlMiA9PSAxKXsKCSAgYW5zID0gKGFucyAqIHBbaV0pJW1vZDsKCX0KICAgICAgfQogICAgICBlbHNlewoJdCA9IHZbaV1bal0gLSB0OwoJYW5zID0gKGFucyAqIG1vZHBvdyhwW2ldLHQpKSVtb2Q7CiAgICAgIH0KICAgICAgCiAgICB9CiAgICBzb3J0KGIsYituKTsgYltuXSA9IC0xOwogICAgZm9yKGk9MDtpPG47aSsrKXsKICAgICAgdCA9IDE7CiAgICAgIGlmKGJbaV0hPTEpewoJaiA9IGJbaV07CglpZihiW2ldID09IGJbaSsxXSl7CgkgIHdoaWxlKGJbaV0gPT0gYltpKzFdKXsKCSAgICB0Kys7IGkrKzsKCSAgfQoJfQoJaWYodCUyID09IDEpewoJICBhbnMgPSAoYW5zICogaiklbW9kOwoJfQogICAgICB9CiAgICB9CiAgICBjb3V0PDxhbnM8PCJcbiI7CiAgfQogIHJldHVybiAwOwp9