#include <iostream>
#include<cstring>
using namespace std;
char c[8+5][8+5];
int n, m, cnt = 0;
int judge(int t1, int t2)
{
for(int i=1; i<=n; i++){
if(c[t1][i] == '*' || c[i][t2] == '*' )
return 0;
}
return 1;
}
int flag = 0;
void dfs(int j)
{
if(flag >= m){
// cout << j << " ";
cnt++;
return;
}
if(j > n)
return;
for(int k=j; k<=n; k++){//存在#所在的列数多于m
for(int i=1; i<=n; i++)
if (c[i][k] == '#' && judge(i, k)) {
flag++;
c[i][k] = '*';
dfs(k + 1);
flag--;
c[i][k] = '#';
}
}
// dfs(j + 1);//存在#所在的列数多于m
}
int main()
{
for(int i=0; i< 10; i++){
for(int j=0; j<10; j++){
c[i][j] = '.';
}
}
while(cin >> n >> m){
if(n == -1 || m == -1)
break;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
cin >> c[i][j];
}
}
dfs(1);
cout << cnt << endl;
cnt = 0;
}
return 0;
}