Problem:
Score : 300 points

Problem Statement

You drew lottery N times. In the i-th draw, you got an item of the kind represented by a string S_i.

How many kinds of items did you get?

Constraints

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

S_i consists of lowercase English letters and has a length between 1 and 10 (inclusive).

Input

Input is given from Standard Input in the following format:

N
S_1
:
S_N

Output

Print the number of kinds of items you got.

Sample Input 1

3
apple
orange
apple

Sample Output 1

2

You got two kinds of items: apple and orange.

Sample Input 2

5
grape
grape
grape
grape
grape

Sample Output 2

1

Sample Input 3

4
aaaa
a
aaa
aa

Sample Output 3

4

Solution in C (GCC 9.2.1) (judge verdict: Time Limit Exceeded)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int gcd(int a,int b);

int main(void){
    int N;
    int i,j,z;
    int ret = 0; 
    int add_bl = 0;
    char S[200000][11];
    scanf("%d\n",&N);
    z = 0; 
    for(i=0;i<N;i++){
        scanf("%s",S[z]);
        if(i==0){
            ret++;
            z++;
        }else{
            //過去入力されていなければret++する
            add_bl = 1;
            for(j=0;j<z;j++){
                if (!strcmp(S[z],S[j])){  //一致した
                    add_bl = 0;
                    break;
                }
            }
            z = z + add_bl;
            ret = ret + add_bl;
        }
    }
    printf("%d\n",ret);
    return 0;

}

// 最大公約数
int gcd(int a,int b){
    int c;
    int tmp;
    if(b > a){  //bがaより大きい場合bとaを入れ替える
        c = a;
        a = b;
        b = c;
    }
    tmp = a % b;
    while(tmp!=0){
        a = b;
        b = tmp;
        tmp = a % b;
    }
    return b;
}