Description
蓝星的A国正在遭受来自敌对国家的入侵,国王希望你能够帮助他们完成防御部署,下面是你和国王的对话:
国王:我们的国家正面临前所未有的劫难,敌对势力企图摧毁我的国家。我的军事向我推荐了您,他说您非常博学多才,一定能够帮助我们保卫我们的国家。
你:尊敬的国王,您过奖了。能够帮助您和您的国家是我的荣幸,请问有什么可以效劳的?
国王:我们正在进行防御部署,需要将现有的防御设备部署到全国各地,希望您能够帮助我们计算有多少种可行的方案。
你:好的。请问领土分布是什么样的?有多少台防御设备需要部署?
国王:我们的国家可以看作是一个n*n的网格,每个小格代表一个小的区域,有的区域可以部署防御设备,有的区域不满足部署条件。我们现在总共有k台防御设备,由于数量有限(k<=n),为了覆盖更广的区域,我们希望在n*n的网格中,同一行同一列只能部署一台防御设备。
你:好的。一定不辱使命。
tips:
a)每台防御设备都是一样的,即对于某个区域,只需要考虑是否在该区域部署防御设备,而不用考虑使用第几台设备;
b)两个部署方案如果存在至少一个区域的部署情况不一致,则为不同的部署方案;
例如两个方案的差别仅仅是在一个部署方案中,x区域部署了防御设备,而在另一个方案中,x区域没有部署防御设备,则这两个方案为不同的两个方案。
Input
多组测试数据
每组数据的第一行是两个正整数,n k,用一个空格隔开。 n <= 8 , k <= n 。
随后的n行描述了A国的领土分布:每行有n个字符,其中 字符"#" 表示该区域可以部署防御设备," ." 表示该区域不满足部署条件(数据保证不出现多余的空白行或者空白列)。
Output
对于每一组数据,给出一行输出,表示可行的方案数目C (数据保证C<2^31)。
2 1
#.
.#
4 4
...#
..#.
.#..
#...