Advertisement
Ankit_132

D

Feb 21st, 2024
960
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5.  
  6. int main() {
  7.     int t;
  8.     cin>>t;
  9.    
  10.     while(t--){
  11.    
  12.         int n;
  13.         cin >> n;
  14.         int m=n*n-(n*(n-1)/2);
  15.         int mod = 1e9 + 7;
  16.         vector<vector<int>> grid(n,vector<int>(n,0));
  17.         int fl=0;
  18.         int c=n;
  19.         int v=n*(n-1)/2;
  20.         vector<int> freq(m,0);
  21.         for(int i=0;i<n;i++)
  22.         {
  23.             for(int j=0;j<n;j++)
  24.             {
  25.                 cin >> grid[i][j];
  26.                 if(grid[i][j]==0)
  27.                     continue;
  28.                 if(i==j and (grid[i][j]%m>v or grid[i][j]%m==0))
  29.                     c--;
  30.                 else if(i==j)
  31.                     fl=1;
  32.                 else if(i!=j and (grid[i][j]%m>v or grid[i][j]%m==0))
  33.                     fl=1;
  34.             }
  35.         }
  36.         for(int i=0;i<n;i++)
  37.         {
  38.             for(int j=i+1;j<n;j++)
  39.             {
  40.                 if(grid[i][j]!=0 or grid[j][i]!=0)
  41.                 {
  42.                     if(grid[i][j]>0 and grid[j][i]>0 and grid[i][j]%m!=grid[j][i]%m)
  43.                         fl=1;
  44.                     else if(grid[i][j]>0 and grid[j][i]>0)
  45.                     {
  46.                         freq[grid[i][j]%m]++;
  47.                         if(freq[grid[i][j]%m]>=2)
  48.                             fl=1;
  49.                     }
  50.                     else
  51.                     {
  52.                         if(grid[i][j]>0)
  53.                         {
  54.                             freq[grid[i][j]%m]++;
  55.                             if(freq[grid[i][j]%m]>=2)
  56.                                 fl=1;
  57.                         }
  58.                         if(grid[j][i]>0)
  59.                         {
  60.                             freq[grid[j][i]%m]++;
  61.                             if(freq[grid[j][i]%m]>=2)
  62.                                 fl=1;
  63.                         }
  64.                     }
  65.                        
  66.                 }
  67.             }
  68.         }
  69.         if(fl)
  70.         {
  71.             cout << 0 << "\n";
  72.             continue;
  73.         }
  74.         ll ans=1;
  75.         int v1=0;
  76.         for(int i=0;i<v+1;i++)
  77.         {
  78.             if(freq[i]==0)
  79.                 v1++;
  80.         }
  81.         for(int i=0;i<v1-1;i++)
  82.         {
  83.             ans*=(i+1);
  84.             ans%=mod;
  85.             ans*=2;
  86.             ans%=mod;
  87.         }
  88.         for(int i=0;i<c;i++)
  89.         {
  90.             ans*=(i+1);
  91.             ans%=mod;
  92.         }
  93.         cout << ans << "\n";
  94.     }
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement