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());
    }
}