Problem:
陸上競技大会

陸上競技大会 200M の準決勝 3 組のレースが行われました。それぞれの組に 8 名（計 24 名）の選手が出場します。各組上位 2 位までの選手と、各組の 3 位以下の全選手の中から上位 2 名の計 8 名が決勝に進出します。

選手番号とタイムを入力とし、決勝進出者 8 名の番号とそのタイムを出力するプログラムを作成してください。

Input

入力は以下の形式で与えられます。

p1 t1
p2 t2
:
p24 t24

1 行目から 8 行目に１組目の選手番号 pi (整数、1 ≤ pi ≤ 10000) とタイム ti (1/100 まで計測した実数、1 ≤ ti ≤ 100)、9 行目から 16 行目に２組目の選手番号 pi とタイム ti、17 行目から 24 行目に３組目の選手番号 pi とタイム ti が与えられます。同じ選手番号の選手、同タイムの選手はいないものとします。

Output

以下の順番で、決勝進出者の選手番号とタイムを空白区切りでそれぞれ１行に出力してください。

1 組目の 1 位の選手

1 組目の 2 位の選手

2 組目の 1 位の選手

2 組目の 2 位の選手

3 組目の 1 位の選手

3 組目の 2 位の選手

各組で 3 位以下の選手の中でタイムが 1 位の選手

各組で 3 位以下の選手の中でタイムが 2 位の選手

Sample Input

18 25.46
16 26.23
3 23.00
10 24.79
5 22.88
11 23.87
19 23.90
1 25.11
23 23.88
4 23.46
7 24.12
12 22.91
13 21.99
14 22.86
21 23.12
9 24.09
17 22.51
22 23.49
6 23.02
20 22.23
24 21.89
15 24.14
8 23.77
2 23.42

Output for the Sample Input

5 22.88
3 23.00
13 21.99
14 22.86
24 21.89
20 22.23
17 22.51
12 22.91

Solution in JAVA (judge verdict: Accepted)

import java.util.*;
public class Main {
	static final int team = 3;
	static final int player = 8;
	
	public void doIt() {
		Scanner stdIn = new Scanner(System.in);
		Player[][] judge = new Player[3][8];
		
		for(int r = 0; r < team; r++) {             //データ読み込み
			for(int c = 0; c < player; c++) {
				int number = stdIn.nextInt();
				String time = stdIn.next();
				judge[r][c] = new Player(number, time);
			}
		}
		for(int r = 0; r < 3; r++)
			Arrays.sort(judge[r]); 
		
		Player[] temp = new Player[18];
		int count = 0;
		for(int r = 0; r < team; r++) {
			for(int c = 2; c < player; c++) {
				temp[count++] = judge[r][c];
			}
		}
		Arrays.sort(temp);
		
		for(int r = 0; r < team; r++) {
			for(int c = 0; c < 2; c++) {
				System.out.println(judge[r][c].getNumber() + " " + judge[r][c].getTime());
			}
		}
		for(int r = 0; r < 2; r++) {
			System.out.println(temp[r].getNumber() + " " + temp[r].getTime());
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Main().doIt();
	}

	class Player implements Comparable<Player>{
		private int number;
		private String time;
		
		public Player(int number, String time) {
			this.number = number;
			this.time = time;
		}
		
		public int getNumber() {
			return(number);
		}
		public String getTime() {
			return(time);
		}
		
		public void setNumber(int number) {
			this.number = number;
		}
		public void setTime(String time) {
			this.time = time;
		}
		
		@Override
		public int compareTo(Player o) {
			return(time.compareTo(o.time));
		}
	}
	
}