Problem:
Score: 300 points

Problem Statement

We have N voting papers. The i-th vote (1 \leq i \leq N) has the string S_i written on it.

Print all strings that are written on the most number of votes, in lexicographical order.

Constraints

1 \leq N \leq 2 \times 10^5

S_i (1 \leq i \leq N) are strings consisting of lowercase English letters.

The length of S_i (1 \leq i \leq N) is between 1 and 10 (inclusive).

Input

Input is given from Standard Input in the following format:

N
S_1
:
S_N

Output

Print all strings in question in lexicographical order.

Sample Input 1

7
beat
vet
beet
bed
vet
bet
beet

Sample Output 1

beet
vet

beet and vet are written on two sheets each, while beat, bed, and bet are written on one vote each. Thus, we should print the strings beet and vet.

Sample Input 2

8
buffalo
buffalo
buffalo
buffalo
buffalo
buffalo
buffalo
buffalo

Sample Output 2

buffalo

Sample Input 3

7
bass
bass
kick
kick
bass
kick
kick

Sample Output 3

kick

Sample Input 4

4
ushi
tapu
nichia
kun

Sample Output 4

kun
nichia
tapu
ushi

Solution in C# (Mono 4.6.2.0) (judge verdict: Time Limit Exceeded)

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

namespace AtCoders {
	class Program {
		static void Main(string[] args) {

			var inputArray = retreiveLongArray();
			var inputCount = 1;

			// 不正な入力は処理しない
			if (inputArray.Length != inputCount) {
				Console.WriteLine("invalid input");
				return;
			}
			var N = inputArray[0];
			var words = new List<string>();

			for (int i = 0; i < N; i++) {
				words.Add(Console.ReadLine());
			}
			//Console.WriteLine("**********");
			//Console.ReadKey();

			//答えの出力
			var ans = getAns(words);
			Console.WriteLine(ans);
		}

		private static string getAns(List<string> words) {
			var dictionary = new Dictionary<string, long>();

			foreach (var word in words) {

				bool exist = dictionary.ContainsKey(word);

				//キーが存在しない場合、新しく足す
				if (!exist) {
					dictionary.Add(word, 1);
				}
				else {//キーが存在する場合、カウントを足す
					dictionary[word]= dictionary[word]+1;
				}
			}
			var maxCount = dictionary.Select(x => x.Value).Max();
			var freqWords = dictionary.Where(x => x.Value == maxCount).OrderBy(x => x.Key).Select(x =>x.Key);

			var sb = new StringBuilder();

			foreach (var freqWord in freqWords) {
				sb.Append(freqWord);
				sb.Append("\n");

			}
			return sb.ToString();
		}


		/// <summary>
		/// スペースで区切られた文字列配列の入力を受け取る
		/// </summary>
		/// <returns></returns>
		private static string[] retreiveStringArray() {
			var inputArray =  Console.ReadLine().Split(' ');
			return inputArray;
		}

		/// <summary>
		/// スペースで区切られた整数配列の入力を受け取る
		/// </summary>
		/// <returns></returns>
		private static long[] retreiveLongArray() {
			var inputArray = Console.ReadLine().Split(' ');
			var longArray = inputArray.Select(s => long.Parse(s));
			return longArray.ToArray();
		}
	}
}