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.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;


public class Main
{
	static class Company
	{
		int no;
		int count;
		boolean is_trade;
	};
	
	public static void main(String[] args)
	{
		Scanner scanner = new Scanner(System.in);
		
		ArrayList<Company> comp = new ArrayList<>();
		for(; ;)
		{
			String input = scanner.nextLine();
			if(input.equals(""))
			{
				break;
			}
			String[] word = input.split(",");
			
			boolean is_add = true;
			for(int i=0; i<comp.size(); i++)
			{
				if(comp.get(i).no == Integer.parseInt(word[0]))
				{
					comp.get(i).count++;
					is_add = false;
					break;
				}
			}
			
			if(is_add)
			{
				Company c = new Company();
				c.no = Integer.parseInt(word[0]);
				c.count = 1;
				c.is_trade = false;
				comp.add(c);
			}
		}
		
		Collections.sort(
				comp,
				new Comparator<Company>()
				{
					@Override
					public int compare(Company o1, Company o2)
					{
						return o1.no<o2.no ? -1: 1;
					}
				});
		
		for(; scanner.hasNext();)
		{
			String input = scanner.next();
			String[] word = input.split(",");
			
			for(int i=0; i<comp.size(); i++)
			{
				if(comp.get(i).no == Integer.parseInt(word[0]))
				{
					comp.get(i).count++;
					comp.get(i).is_trade = true;
				}
			}
		}
		
		for(int i=0; i<comp.size(); i++)
		{
			if(comp.get(i).is_trade)
			{
				System.out.println(comp.get(i).no +" "+ comp.get(i).count);
			}
		}
	}
}