#include<cstdio>
#include<cstring>
using namespace std;
bool matrix[10][10];
bool row[10];//行有无
int ans = 0,n,k,cnt = 0;
void dfs(int r)
{
    if(cnt==k){
        ans++;
        return;
    }
    if(r>=n||(cnt+n-r)<k) return;//剪枝直接0ms,未加后面的判断是125ms
    for(int i = 0;i<n;++i)
    {
        if(!row[i]&&matrix[r][i])
        {
            cnt++;
            row[i] = true;
            dfs(r+1);
            cnt--;
            row[i] = false;
        }
    }
    dfs(r+1);//关键,可以不放这一列,直接下一列
    return;
}
int main()
{

    char c;
    while(scanf("%d%d",&n,&k)&&n!=-1)
    {
        ans = 0;
        memset(matrix,0,sizeof(matrix));
        memset(row,0,sizeof(row));
        for(int i = 0; i<n; ++i)
        {
            getchar();
            for(int j = 0; j<n; ++j)
            {
                scanf("%c",&c);
                if(c=='#') matrix[i][j] = true;
            }
        }
        dfs(0);
        printf("%d\n",ans);
    }
    return 0;
}