import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建Scanner对象,用于读取输入数据
Scanner in = new Scanner(System.in);
// 读取第一行输入的整数n,代表小红背诵单词的总次数
int n = in.nextInt();
// 定义HashSet集合,存储已经记住的单词(HashSet查询效率高,适合判断是否存在)
Set<String> knownWords = new HashSet<>();
// 定义HashMap,存储"未记住但已背诵过"的单词及其累计背诵次数(键:单词,值:累计次数)
Map<String, Integer> countWords = new HashMap<>();
// 循环遍历每一次背诵的单词(共n次)
for (int i = 0; i < n; i++) {
// 读取当前背诵的单词
String word = in.next();
// 若当前单词已在"记住的单词"集合中,直接跳过(无需再统计次数)
if (knownWords.contains(word)) {
continue;
}
// 若单词未记住:更新其累计背诵次数
// getOrDefault(word, 0):若单词已在map中,取当前次数;否则取默认值0,之后+1
countWords.put(word, countWords.getOrDefault(word, 0) + 1);
// 获取当前已记住的单词总数k(记忆新单词的要求是:累计次数 ≥ k+1)
int k = knownWords.size();
// 检查当前单词的累计次数是否达到记忆要求
if (countWords.get(word) >= k + 1) {
// 达到要求:将单词加入"记住的单词"集合
knownWords.add(word);
}
}
// 输出最终记住的单词总数(即knownWords集合的大小)
System.out.println(knownWords.size());
}
}