Problem Link : ASSIGN
Hint : DP with Bitmasking
C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
ll size=pow(2,n);
ll dp[size];
memset(dp,0,sizeof(dp));
bool arr[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cin>>arr[i][j];
}
dp[0]=1;
int cnt;
for(int i=0;i<size;i++)
{
cnt=__builtin_popcount(i);
for(int j=0;j<n;j++)
if(!(i&(1<<j)) && arr[cnt][j])
dp[i|(1<<j)]+=dp[i];
}
cout<<dp[size-1]<<"\n";
}
}
