Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- int main() {
- int t;
- cin>>t;
- while(t--){
- int n;
- cin >> n;
- int m=n*n-(n*(n-1)/2);
- int mod = 1e9 + 7;
- vector<vector<int>> grid(n,vector<int>(n,0));
- int fl=0;
- int c=n;
- int v=n*(n-1)/2;
- vector<int> freq(m,0);
- for(int i=0;i<n;i++)
- {
- for(int j=0;j<n;j++)
- {
- cin >> grid[i][j];
- if(grid[i][j]==0)
- continue;
- if(i==j and (grid[i][j]%m>v or grid[i][j]%m==0))
- c--;
- else if(i==j)
- fl=1;
- else if(i!=j and (grid[i][j]%m>v or grid[i][j]%m==0))
- fl=1;
- }
- }
- for(int i=0;i<n;i++)
- {
- for(int j=i+1;j<n;j++)
- {
- if(grid[i][j]!=0 or grid[j][i]!=0)
- {
- if(grid[i][j]>0 and grid[j][i]>0 and grid[i][j]%m!=grid[j][i]%m)
- fl=1;
- else if(grid[i][j]>0 and grid[j][i]>0)
- {
- freq[grid[i][j]%m]++;
- if(freq[grid[i][j]%m]>=2)
- fl=1;
- }
- else
- {
- if(grid[i][j]>0)
- {
- freq[grid[i][j]%m]++;
- if(freq[grid[i][j]%m]>=2)
- fl=1;
- }
- if(grid[j][i]>0)
- {
- freq[grid[j][i]%m]++;
- if(freq[grid[j][i]%m]>=2)
- fl=1;
- }
- }
- }
- }
- }
- if(fl)
- {
- cout << 0 << "\n";
- continue;
- }
- ll ans=1;
- int v1=0;
- for(int i=0;i<v+1;i++)
- {
- if(freq[i]==0)
- v1++;
- }
- for(int i=0;i<v1-1;i++)
- {
- ans*=(i+1);
- ans%=mod;
- ans*=2;
- ans%=mod;
- }
- for(int i=0;i<c;i++)
- {
- ans*=(i+1);
- ans%=mod;
- }
- cout << ans << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement