#1871. [Beijing2009 WinterCamp]函数依赖

内存限制:64 MiB 时间限制:3 Sec

题目描述

输入格式

输入文件的第一行为一个整数 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。