#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
char map[9][9];
bool used[9];
int n,m,go,num;
void solve(int cut){
if(go == m){
++num;
return ;
}
if(cut > n)
return;
for(int i = 1;i<=n;++i){
if(used[i] == false&&map[cut][i] == '#'){
used[i] = true;
++go;
solve(cut+1);
go = go-1;
used[i] = false;
}
}
solve(cut+1);
}
int main(){
while(cin>>n>>m){
if(n == -1&&m == -1)
break;
fill(used,used+9,false);
for(int i = 1;i<=n;++i){
for(int j = 1;j<=n;++j){
cin>>map[i][j];
}
}
go = 0; num = 0;
solve(1);
cout<<num<<endl;
}
return 0;
}
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
char map[9][9];
bool used[9];
int n,m,go,num;
void solve(int cut){
if(go == m){
++num;
return ;
}
if(cut > n)
return;
for(int i = 1;i<=n;++i){
if(used[i] == false&&map[cut][i] == '#'){
used[i] = true;
++go;
solve(cut+1);
go = go-1;
used[i] = false;
}
}
solve(cut+1);
}
int main(){
while(cin>>n>>m){
if(n == -1&&m == -1)
break;
fill(used,used+9,false);
for(int i = 1;i<=n;++i){
for(int j = 1;j<=n;++j){
cin>>map[i][j];
}
}
go = 0; num = 0;
solve(1);
cout<<num<<endl;
}
return 0;
}