import java.util.*;
import java.util.stream.Collectors;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String[] strs = str.split(" ");
// 我们认为当一个单词出现的次数不少于3次时,该单词为“用户期望搜索的单词”,即称为关键词。请你根据小红的记录,输出小红的用户画像对应的所有关键词。
// 每行输入一个。你需要按照搜索频次从高到低输出。频次相同的,你需要按字典序升序输出。
HashMap<String,Integer> map = new HashMap<>();
for(String s : strs){
if(map.containsKey(s)){
map.put(s, map.get(s) + 1);
}else{
map.put(s, 1);
}
}
// 流式编程
List<Map.Entry<String, Integer>> keywords = map.entrySet().stream()
.filter((entry -> entry.getValue() >= 3))
.sorted((a, b) -> {
if(!a.getValue().equals(b.getValue())){
return b.getValue() - a.getValue();
}
return a.getKey().compareTo(b.getKey());
})
.collect(Collectors.toList());
for(Map.Entry<String, Integer> entry : keywords){
System.out.println(entry.getKey());
}
}
public static void mergeSort(int[] arr){
if(arr.length <= 1){
return;
}
int mid = arr.length / 2;
int[] left = Arrays.copyOfRange(arr, 0, mid);
int[] right = Arrays.copyOfRange(arr, mid, arr.length);
mergeSort(left);
mergeSort(right);
merge(arr, left, right);
}
public static void merge(int[] result, int[] left, int[] right){
int i = 0;
int j = 0;
int k = 0;
while(i < left.length && j < right.length){
if(left[i] > right[j]){
result[k++] = left[i++];
}else{
result[k++] = right[j++];
}
}
while(i < left.length){
result[k++] = left[i++];
}
while(j < right.length){
result[k++] = right[j++];
}
}
}