/*DFS+回溯。*/
#include <stdio.h>
#include <cstring>
int n,k,ans;
char map[9][9];
bool vis[100];
bool x[9],y[9];
void dfs(int sum,int col)
{
if(sum>=k)
{
ans++;
return ;
}
if(col>n) return ;
for(int i=0;i<n;i++)
{
if(map[i][col]=='#'&&!x[i]&&!y[col])
{
x[i]=true;
y[col]=true;
dfs(sum+1,col+1);//符合条件的,传入sum+1进行深搜。
x[i]=false;//回溯的过程中注意将标记进行还原。
y[col]=false;
}
}
dfs(sum,col+1);//不符合条件的,传入sum进行深搜。
}
int main()
{
while(scanf("%d%d",&n,&k)==2)
{
if(n==-1&&k==-1) break;
char op[9];
for(int i=0;i<n;i++)
{
scanf("%s",op);
for(int j=0;j<n;j++)
map[i][j]=op[j];
}
memset(x,false,sizeof(x));
memset(y,false,sizeof(y));
memset(vis,false,sizeof(vis));
ans=0;
dfs(0,0);
printf("%d\n",ans);
}
return 0;
}