Problem:
取引

取引先の顧客番号と取引日を月ごとに記録したデータがあります。今月のデータと先月のデータを読み込んで、先月から２ヶ月連続で取引のある会社の顧客番号と取引のあった回数を出力するプログラムを作成してください。ただし、月々の取引先数は 1,000 社以内です。

Input

今月のデータと、先月のデータが１行の空行で区切られて与えられます。それぞれのデータは以下のような形式で与えられます。

c1,d1
c2,d2
...
...

ci (1 ≤ ci ≤ 1,000) は顧客番号を表す整数、 di (1 ≤ di ≤ 31) は取引日を表す整数です。

Output

２ヶ月連続で取引のある会社について、顧客番号が小さい順に顧客番号と取引回数の総数を空白で区切って出力します。

Sample Input

123,10
56,12
34,14

123,3
56,4
123,5

Output for the Sample Input

56 2
123 3

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;


public class Main {
	private	static	BufferedReader	br = null;

	static {
		br = new BufferedReader(new InputStreamReader(System.in));
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String						stdin  = null;
		Integer						client = 0;
		boolean						prev   = false;
		HashMap<Integer, Integer>	cmonth = new HashMap<Integer, Integer>();
		HashMap<Integer, Integer>	pmonth = new HashMap<Integer, Integer>();
		ArrayList<int[]>			result = new ArrayList<int[]>();

		while ((stdin = parseStdin()) != null) {
			if (stdin.isEmpty()) {
				prev = true;
				continue;
			}

			client = Integer.parseInt(stdin.split(",")[0]);

			if (!prev) {
				if (!cmonth.containsKey(client)) {
					cmonth.put(client, 1);
				}
				else {
					cmonth.put(client, cmonth.get(client) + 1);
				}
			}
			else {
				if (!pmonth.containsKey(client)) {
					pmonth.put(client, 1);
				}
				else {
					pmonth.put(client, pmonth.get(client) + 1);
				}
			}
		}

		for (Object o : pmonth.keySet().toArray()) {
			if (cmonth.containsKey(o)) {
				int[]	item = {(Integer)o, (cmonth.get(o) + pmonth.get(o))};
				result.add(item);
			}
		}

		Collections.sort(result, new MyComparator());

		for (Object o : result.toArray()) {
			int[]	item = (int[])o;
			System.out.printf("%d %d\n", item[0], item[1]);
		}
	}

	private static String parseStdin() {
		String	stdin = null;

		try {
			stdin = br.readLine();
		}
		catch (IOException e) {}

		return stdin;
	}
}

class MyComparator implements Comparator<int[]> {

    /** ソート対象のカラムの位置 */
    public int compare( int[] a1, int[] a2 ) {
        return a1[0] - a2[0];
    }
}