1 #include<iostream>
2 #include<cstdio>
3 #include<cstdlib>
4 #include<cstring>
5 #include<string>
6 #include<queue>
7 #include<algorithm>
8 #include<map>
9 #include<iomanip>
10 #include<climits>
11 #include<string.h>
12 #include<numeric>
13 #include<cmath>
14 #include<stdlib.h>
15 #include<vector>
16 #include<stack>
17 #include<set>
18 #define FOR(x, b, e) for(int x=b;x<=(e);x++)
19 #define REP(x, n) for(int x=0;x<(n);x++)
20 #define INF 1e7
21 #define MAXN 100010
22 #define maxn 1000010
23 #define Mod 1000007
24 #define N 33
25 using namespace std;
26 typedef long long LL;
27
28
29 int G[N][N];
30 int col[N];
31 int n, cnt;
32 bool d[N];
33
34 int main()
35 {
36 string tmp;
37 while (cin >> n, n) {
38 memset(G, 0, sizeof(G));
39 memset(col, 0, sizeof(col));
40 for (int k = 0; k < n; ++k) {
41 cin >> tmp;
42 for (int i = 0; tmp[i + 2]; ++i)
43 G[tmp[0] - 'A' + 1][tmp[i + 2] - 'A' + 1] = 1;
44 }
45
46 cnt = 0;
47 int i, j;
48 for (i = 1; i <= n; ++i) {
49 memset(d,0,sizeof(d));
50 for (j = 1; j <= i; ++j) //寻找有冲突的频道编号
51 if (G[i][j]) d[col[j]] = 1; //d[k]==1表示k频道有冲突
52 for (j = 1;; j++) //寻找可以使用的编号最小的频道
53 if (d[j] == 0) break;
54 col[i] = j;
55 cnt = max(cnt, j);
56 }
57 if (cnt == 1)
58 printf("%d channel needed.
",cnt);
59 else
60 printf("%d channels needed.
", cnt);
61 }
62 return 0;
63 }