#include #include #include #include #include using namespace std; long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ assert(cnt>0); if(is_neg){ x= -x; } if(!(l<=x && x<=r)){ cerr< rep; map::reverse_iterator ii; int main(){ //freopen("00.txt","r",stdin); //freopen("00o.txt","w",stdout); T=readIntLn(1,1000); while(T--){ n=readIntLn(1,100000); assert(n % 2 ==0); sm_n += n; rep.clear(); assert(sm_n<=1000000); for(int i=1;i<=n;i++){ if(i==n){ arr[i]=readIntLn(1,1000000); } else { arr[i]=readIntSp(1,1000000); } rep[arr[i]]++; } long long sol=1; bool carry=false; for(ii=rep.rbegin();ii!=rep.rend();ii++){ int cur=ii->second; if (carry ){ sol *= cur; cur--; sol %= mod; carry=false; } if(cur % 2) carry =true; sol *= fact(cur); sol %= mod; } cout<