Problem:
Problem A: Popularity Estimation

あなたはとあるアニメーション制作会社の企画部長である。昨今のアニメーション制作会社が制作するものは、アニメーションそのものにとどまらない。関連商品、例えば登場キャラクターのフィギュアやキャラクターソングCDなども、重要な収益源なのである。この収益をどれだけ伸ばせるかは、ひとえに企画部長のあなたにかかっているのであった。

当たり前のことだが、こういった関連商品は闇雲に発売すればいいというものではない。商品の開発には多くの時間と予算が必要なためだ。アニメの登場キャラクターのフィギュアを発売するにしても、多くの売上が見込まれる、人気があるキャラクターのものに限らなければならない。

キャラクターの人気度を測る手段の一つが、人気投票である。あなたも今までいくつかの人気投票を企画してきたが、どうやら視聴者はこの企画に不満を抱きつつあるようだ。人気度を測る他の手法の確立が急務である。

そこであなたは、ひとつの仮説を立てた。あるキャラクターの人気度は、そのアニメ本編中における登場時間の総和に比例する、というものだ。あなたはこの仮説を検証するため、それぞれのキャラクターの登場時間を集計するプログラムを書くことにした。

Input

入力は複数のケースからなる。
各ケースは以下のフォーマットで与えられる。

n
name0 m0 d0,0 ... d0,m0-1
name1 m1 d1,0 ... d1,m1-1
.
.
.
namen-1 mn-1 dn-1,0 ... dn-1,mn-1-1

n はキャラクターの人数を表す。

namei はキャラクターの名前を表す。

mi はキャラクターが映っていた時刻の種類を表す。

mi の後にはmi 個の整数di,j が与えられる。

di,jはキャラクターが映っていた時刻を表す。

入力の終わりはn=0 からなる行によって与えられる

ある時刻に1人のキャラクターのみが画面に映っていた場合、そのキャラクターはnポイントを得ることが出来る。

同時刻に映るキャラクターが1人増える毎に、その時刻に映っていたキャラクターが得られるポイントは1減る。

n人のキャラクターが同時刻に映っていた場合、n人の人それぞれに1ポイントが加算される。

入力は以下の制約を満たす。

2 ≤ n ≤ 20

0 ≤ mi ≤ 30

0 ≤ di,j < 30

i 番目のキャラクターについてdi,j はすべて異なる。

namei はアルファベットの大文字または小文字のみを含み、長さは10以下である。

Output

最小のポイントを持つキャラクターのポイントとその名前を1つの空白で区切って出力せよ。

最小のポイントを持つキャラクターが複数いる場合は名前が辞書順で最小の人を選ぶこと。

Sample input

4
akzakr 2 1 8
fnmyi 5 2 3 4 6 9
tsnukk 5 2 3 4 7 9
yskwcnt 6 3 4 7 8 9 10
4
akzakr 1 2
fnmyi 3 10 11 12
tsnukk 2 1 8
yskwcnt 2 1 8
5
knmmdk 2 13 19
akmhmr 4 13 15 19 22
mksyk 6 3 7 12 13 15 19
skrkyk 3 1 4 8
tmemm 3 1 17 24
5
knmmdk 5 5 6 16 18 26
akmhmr 9 3 4 7 11 14 15 17 18 20
mksyk 5 6 13 25 27 28
skrkyk 4 3 16 23 24
tmemm 3 6 12 20
14
hrkamm 6 4 6 8 10 20 22
mkhsi 6 1 10 12 15 22 27
hbkgnh 2 4 9
chyksrg 8 3 4 12 15 16 20 25 28
mktkkc 6 0 1 8 15 17 20
tknsj 6 6 8 18 19 25 26
yyitktk 3 3 12 18
ykhhgwr 5 3 9 10 11 24
amftm 7 2 6 8 12 13 14 17
mmftm 4 6 12 16 18
rtkakzk 3 14 15 21
azsmur 7 1 2 4 12 15 18 20
iormns 2 4 20
ktrotns 6 7 12 14 17 20 25
14
hrkamm 2 4 21
mkhsi 6 2 3 8 11 18 20
hbkgnh 4 4 16 28 29
chyksrg 5 0 3 9 17 22
mktkkc 2 7 18
tknsj 3 3 9 23
yyitktk 3 10 13 25
ykhhgwr 2 18 26
amftm 3 13 18 22
mmftm 4 1 20 24 27
rtkakzk 2 1 10
azsmur 5 2 5 10 14 17
iormns 3 9 15 16
ktrotns 5 7 12 16 17 20
0

Sample output

7 akzakr
4 akzakr
6 knmmdk
12 tmemm
19 iormns
24 mktkkc

The University of Aizu Programming Contest 2011 Summer

原案: Tomoya Sakai

問題文: Takashi Tayama

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(true){
			int n=sc.nextInt();
			if(n==0) break;
			String name[]=new String[n];
			int time[][]=new int[n][];
			int length[]=new int[n];
			int point[]=new int[n];
			for(int i=0; i<n; i++){
				name[i]=sc.next();
				point[i]=0;
				length[i]=sc.nextInt();
				time[i]=new int[length[i]];
				for(int j=0; j<length[i]; j++){
					time[i][j]=sc.nextInt();
				}
			}//input
			for(int i=0; i<n; i++){
				Arrays.sort(time[i]);
			}
			for(int k=0; k<30; k++){
				int count=0;
				for(int i=0; i<n; i++){
					for(int j=0; j<length[i]; j++){
						if(time[i][j]==k){
							count++;
							break;
						}
						else if(k<time[i][j]) break;
					}
				}
				for(int i=0; i<n; i++){
					for(int j=0; j<length[i]; j++){
						if(time[i][j]==k){
							point[i]+=(n-(count-1));
							break;
						}
						else if(k < time[i][j]) break;
					}
				}
			}
			int min=2<<15;
			int index=-1;
			for(int i=0; i<n; i++){
				if(point[i]<min){
					min=point[i];
					index=i;
				}
				else if(point[i]==min){
					if(name[i].compareTo(name[index])==-1){
						min=point[i];
						index=i;
					}
				}
			}
			System.out.println(point[index]+" "+name[index]);
		}

	}
}