[Beijing2009 WinterCamp]函数依赖

时间限制:3s      空间限制:64MB

题目描述


输入格式

输入文件的第一行为一个整数 N(N ≤ 10)和 M(1 ≤ M ≤ 1000),表示属性集中 的属性个数和函数依赖集中的依赖个数。这里我们默认大写字母中的前 N 个字 母为我们所考虑的属性。接下来的 M 行每行一个字符串表示一个函数依赖,如 AB-->DE。(中间的蕴含符号是由减号和大于号组成。另外需要说明的是,只有当 我们同时得到 A和 B 的时候,才能推出D和 E) 。


输出格式

第一行希望你输出你找到的候选码的个数K。 接下来的 K行每行 输出一个候选码。候选码本身按字母顺序排列,所有候选码按照字典顺序排列输 出。如果没有找到候选码,输出“No candidate key”(不含引号)。


样例输入

5 5 
AB->C 
AC->B 
AD->E 
BC->D 
E->A 

样例输出

4 
AB 
AC 
BE 
CE 

提示

对于30%的测试数据,满足只有二元联系(即不存在函数依赖左边或右边的 属性个数超过 1 个)。 对于 40%的测试数据,满足N ≤ 5。 对于 70%的测试数据,满足M ≤ 100。 对于100%的测试数据,满足 1 ≤ N ≤ 10, 1 ≤ M ≤ 1000。


题目来源

Day1