if(cnt > 0)
{
for(int i = 1;i <= n;++i)
{
if(map[l][i] == '.')continue;
else
{
if(!vis[i])//当前列还没有摆放过棋子
{
vis[i] = 1;
dfs(l+1,--cnt);
vis[i] = 0;//DFS出口恢复修改值
++cnt;//DFS出口恢复修改值
}
}
}
}
}
int main()
{
while(cin >> n >> c)
{
if(n == -1)break;
tot = 0;
for(int i = 1;i <= n;++i)
for(int j = 1;j <= n;++j)
cin >> map[i][j];
dfs(1,c);
cout << tot << endl;
}
return 0;
}