Problem:
リーグ戦のスコアシート

スポーツの大会にはリーグ戦とトーナメント戦があります。サッカーのリーグ戦では勝・負・引分にそれぞれ点数を付け、その勝ち点で順位を競います。勝ち点はそれぞれ勝(3点)、負(0点)、引分(1点)です。

チーム数とリーグ戦の成績を入力とし、成績の良い順(勝ち点の多い順)に並べ替え、チーム名と勝ち点を出力するプログラムを作成してください。勝ち点が同点の場合は入力順に出力してください。

Input

複数のデータセットが与えられます。各データセットは以下の形式で与えられます。

n
name1 w1 l1 d1
name2 w2 l2 d2
:
namen wn ln dn

１行目にチーム数 n (n ≤ 10) が与えられます。続く n 行にチーム i の名前 namei (20文字以内のアルファベット)、勝の数 wi、負の数 li、引分の数 di (0 ≤ wi, li, di ≤ 9) が空白区切りで与えられます。

チーム数が 0 のとき、入力の終了とします。データセットの数は 50 を超えません。

Output

データセットごとに、並べ替えたチームのリストを出力してください。i 行目に i 番目のチームの名前と勝ち点をカンマで区切って出力してください。

データセットの間に１つの空行を入れてください。

Sample Input

4
Japan 1 0 2
Egypt 1 2 0
Canada 0 2 1
Spain 2 0 1
3
India 0 2 0
Poland 1 0 1
Italy 1 0 1
0

Output for the Sample Input

Spain,7
Japan,5
Egypt,3
Canada,1

Poland,4
Italy,4
India,0

Solution in C# (judge verdict: Accepted)

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

namespace AOJ
{
	class Program
	{
		static void Main(string[] args)
		{
			bool flg = false;
			while (true)
			{
				int n = int.Parse(Console.ReadLine());
				if (n == 0)
					break;

				if (flg)
					Console.WriteLine();
				else
					flg = true;

				var t = new Dictionary<string, int>();

				while (n-- != 0)
				{
					string[] l = Console.ReadLine().Split(' ');
					t.Add(l[0], int.Parse(l[1]) * 3 + int.Parse(l[3]));
				}
				var tt = new List<KeyValuePair<string, int>>(t);
				BubbleSort(tt);

				for (int i = 0; i < tt.Count; i++)
				{
					Console.WriteLine(tt[i].Key + "," + tt[i].Value);
				}
			}
		}

		private static void BubbleSort(List<KeyValuePair<string, int>> a)
		{
			int n = a.Count;
			for (int i = 0; i < n - 1; i++)
			{
				for (int j = n - 1; j > i; j--)
				{
					if (a[j].Value.CompareTo(a[j - 1].Value) > 0)
					{
						var temp = a[j];
						a[j] = a[j - 1];
						a[j - 1] = temp;
					}
				}
			}
		}
	}
}