#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
#define LL long long
#define MOD 1000000007
#define MAXN 100050
#define INF 0x3f3f3f
#define register long long
LL read ( )
{
LL w = 1 , x = 0 ;
char ch = 0 ;
while ( ch < '0' || ch> '9' )
{
if ( ch == '-' )
w = - 1 ;
ch = getchar ( ) ;
}
while ( ch >= '0' && ch <= '9' )
{
x = x * 10 + ( ch - '0' ) ;
ch = getchar ( ) ;
}
return w * x;
}
int n, k, ans;
string s[ 10 ] ;
int mp[ 10 ] [ 10 ] ;
bool v[ 10 ] [ 10 ] , a[ 10 ] , b[ 10 ] ;
void dfs ( int x, int y, int sum)
{
if ( sum== k)
{
ans++ ;
return ;
}
b[ y] = 1 ;
for ( register int i= x+ 1 ; i<= n; i++ )
{
for ( register int j= 1 ; j<= n; j++ )
{
if ( v[ i] [ j] && ! b[ j] )
{
dfs ( i, j, sum+ 1 ) ;
}
}
}
b[ y] = 0 ;
}
int main ( )
{
while ( cin>> n>> k)
{
if ( n== - 1 && k== - 1 )
break ;
memset ( mp, 0 , sizeof ( mp) ) ;
memset ( v, 0 , sizeof ( v) ) ;
memset ( a, 0 , sizeof ( a) ) ;
memset ( b, 0 , sizeof ( b) ) ;
for ( register int i= 0 ; i< n; i++ )
{
cin>> s[ i] ;
}
for ( register int i= 0 ; i< n; i++ )
{
for ( register int j= 0 ; j< n; j++ )
{
if ( s[ i] [ j] == '#' )
v[ i+ 1 ] [ j+ 1 ] = 1 ;
}
}
for ( register int i= 1 ; i<= n; i++ )
{
for ( register int j= 1 ; j<= n; j++ )
{
if ( v[ i] [ j] )
{
dfs ( i, j, 1 ) ;
}
}
}
cout<< ans<< endl;
ans= 0 ;
}
return 0 ;
}