裸dfs
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10;
int n, k;
int ans, now;
char a[N][N];
int vis[N];
void dfs( int l )
{
if( now == k )
{
ans++;
return;
}
if( l > n )
return;
for( int i = 1; i <= n; i++ )
{
if( !vis[i] && a[l][i] == '#' )
{
vis[i] = 1;
now++;
dfs( l+1 );
now--;
vis[i] = 0;
}
}
dfs( l+1 );
}
int main()
{
while(~scanf("%d%d", &n, &k) && (n != -1 && k != -1 ))
{
for( int i = 1; i <= n; i++ )
scanf("%s", a[i]+1);
memset( vis, 0, sizeof( vis ));
ans = 0;
now = 0;
dfs(1);
printf("%d\n", ans);
}
return 0;
}