const int MAXN=35,Mod=1e9+7;
int a[MAXN][MAXN];
bitset<MAXN*MAXN> x[MAXN*MAXN];
char s[MAXN];
int quick_pow(int a,int k){
int ans=1;
while(k){
if(k&1)ans=1LL*ans*a%Mod;
a=1LL*a*a%Mod;
k>>=1;
}
return ans;
}
int main()
{
int k=read_int(),n=1<<k;
_for(i,0,n){
scanf("%s",s);
_for(j,0,n)
a[i][j]=s[j]-'0';
}
_for(di,0,n)_for(dj,0,n)
_for(i,0,n)_for(j,0,n)
x[di*n+dj][i*n+j]=a[(i+di)%n][(j+dj)%n];
n*=n;
int rk=0;
_for(i,0,n){
if(!x[i][i]){
_for(j,i+1,n){
if(x[j][i]){
swap(x[i],x[j]);
break;
}
}
}
if(x[i][i])
rk++;
_for(j,i+1,n){
if(x[j][i])
x[j]^=x[i];
}
}
enter(quick_pow(2,rk));
return 0;
}