#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;
const int maxn = 100;
int n,k,cnt,sum;
int chess[10][10];
int vis[10];
void dfs(int s) {
if (cnt == k) { //放置的棋子数等于k个棋子, 方案数+1
sum++;
return;
} else if (s > n){ //超过了边界
return;
} else {
for(int i = 1; i <= n; i++) {
if (chess[s][i] && !vis[i]) {
vis[i] = 1;
cnt++;
dfs(s + 1);
cnt--;
vis[i] = 0; //回溯
}
}
dfs(s + 1);
}
}
int main() {
while (cin >> n >> k && n != -1 && k != -1) {
cnt = sum = 0;
memset(chess,0,sizeof(chess));
memset(vis,0,sizeof(vis));
getchar();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
char c;
c = getchar();
if (c == '#') chess[i][j] = 1;
}
getchar();
}
dfs(1);
cout << sum << endl;
}
return 0;
}