#include<bits/stdc++.h>
using namespace std;
int n,k,sum;
char mp[10][10];
bool l[10];
void dfs(int x,int y){
if(y>=k){
sum++;
return ;
}//每摆完一组棋子,方案加一,回溯
for(int i=x;i<n;i++){//从第x行开始,因为先前摆过的行不需要重复考虑
for(int j=0;j<n;j++){//列的遍历需要从0开始
if(!l[j] && mp[i][j]=='#'){//判定条件:1.列上没有棋子 2.棋子必须在棋盘上
l[j]=true;
dfs(i+1,y+1);
l[j]=false;//搜索完了记得恢复
}
}
}
}
int main(){
while(1){
cin>>n>>k;
getchar();
if(n==-1 && k==-1) break;//结束条件
memset(mp,false,sizeof(mp));//初始化
memset(l,false,sizeof(l));
for(int i=0;i<n;i++) cin>>mp[i];//输入棋盘
sum=0;//初始方案
dfs(0,0);//first 0 :棋子所在行数 second 0 :第几个棋子
cout<<sum<<endl;
}
return 0;
}