/*
暴搜
*/

#include 
<iostream>
using namespace std;

bool G[26][26];
int CL[26= {0};
int N;

bool dfs(int k, int m)
{
    
int i, j;
    
bool flag;
    
for (i = 0; i < m; i++)
    {
        
for (flag = true, CL[k] = i, j = 0; j < k; j++)
            
if (G[k][j] && CL[k] == CL[j])
            {
                flag 
= false;
                
break;
            }
        
if (flag && (k == N-1 || dfs(k+1, m)))
            
return true;
    }
    
return false;
}

int main()
{
    
int i, j, t;
    
bool conn;
    
char str[50];
    
    
while (scanf("%d"&N) && N)
    {
        memset(G, 
0sizeof(G));
        
for (conn = false, i = 0; i < N; i++)
            
for (scanf("%s", str), j = 2; str[j]; j++, conn = true)
            {
                t 
= str[j] - 'A';
                G[i][t] 
= true;
                G[t][i] 
= true;
            }
        
if (!conn)
            printf(
"1 channel needed.\n");
        
else if (dfs(12))
            printf(
"2 channels needed.\n");
        
else if (dfs(13))
            printf(
"3 channels needed.\n");
        
else
            printf(
"4 channels needed.\n");
    }
    
return 0;
}