Problem:
野球大会

野球の国別対抗戦 WBC で、日本が2連覇達成!! 野球人気が高まる中、会津学園高校を会場に野球大会が行われました。この大会では、総当りのリーグ戦を行い、以下のような方法で順位を決めることになりました。

勝ち数の多いチームを上位とする

勝ち数が同数の場合は負け数の少ないチームを上位とする

各チームの成績を入力とし、チーム名を上位のチームから順に出力するプログラムを作成してください。同順位のチームが存在する場合は、入力順に出力してください。ただし、チーム数 n は 2 以上 10 以下の整数、チーム名 t は 1 文字の半角英字、試合毎の成績 r は n - 1 個の数字で表され、勝ちの場合は 0 、負けの場合は 1 、引き分けの場合は 2 とします。また、チーム名に重複はないものとします。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

n
score1
score2
:
scoren

1 行目にチームの数 n (2 ≤ n ≤ 10) 、続く n 行に第 i のチームの成績 scorei が与えられます。各成績は次の形式で与えられます。

t r1 r2 ... rn−1

チーム名 t (１文字の半角英字)、t の試合毎の成績 ri (0, 1, または 2) が空白区切りで与えられます。

データセットの数は 50 を超えません。

Output

データセットごとに、チーム名を上位のチームから順に出力します。

Sample Input

6
A 1 0 0 2 0
B 0 0 1 1 0
C 1 1 1 1 1
D 1 0 0 1 2
E 2 0 0 0 0
F 1 1 0 2 1
4
g 1 1 1
h 0 1 2
w 0 0 0
b 0 2 1
0

Output for the Sample Input

E
A
B
D
F
C
w
h
b
g

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;



namespace Test1 {

    class team : IComparable {
        public string name;
        public int kati;
        public int make;
        public int index;
        
        public int CompareTo(object obj) {
            team eneT = (team)obj;
            if (eneT.kati != kati) {
                return kati - eneT.kati;
            }
            else if (eneT.make != make) { return eneT.make - make; }
            else { return eneT.index - index; }
        }

    }
    

    class ClassMain {



        public static void Main(String[] args) {
            string line;
            while ((line = Console.ReadLine()) != null) {
                int n = int.Parse(line);
                if (n == 0) { break; }
                team[] teams = new team[n];
                for (int i = 0; i < n; i++) {
                    string[] sprit = Console.ReadLine().Split(' ');
                    team t = new team();
                    t.name = sprit[0]; t.index = i;
                    for (int j = 1; j < n; j++) {
                        int rr = int.Parse(sprit[j]);
                        if (rr == 0) { t.kati++; }
                        if (rr == 1) { t.make++; }
                    }
                    teams[i] = t;
                }

                Array.Sort(teams);
                for (int i = 0; i < n; i++) {
                    Console.WriteLine(teams[n-1-i].name);
                }
            }
        }




    }

    
}