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: Runtime Error)

#include <stdio.h>  /*入出力*/
#include <stdlib.h> /*標準ライブラリ*/
#include <string.h> /*文字列*/
#include <math.h>   /*計算*/
#include <assert.h> /*確認*/
#include <ctype.h>  /*文字操作*/
#include <stdbool.h>/*bool型*/
#include <limits.h>/*限界*/
//---------------------------------------------------
#define rep(i, n) for(int  i = 0; i < (n); i++)
#define ABS(a) (((a)>(0))?a:-(a))
#define LL long long
#define MOD 1000000007//10^9+7(素数)
//---------------------------------------------------
LL max(LL a, LL b)
{
  if (a<b) {
    a = b;
  }
  return a;
}

void swap(int *a, int *b)
{
  int temp;
  temp = *a;*a = *b;*b = temp;
}
//--------------------------------------------------------

int main(void)
{
  int n;
  int ans = 0;
  int flag = 0;
  char s[100010][10];
  char hash[10010][10];

  scanf("%d", &n);
  for (size_t i = 0; i < n; i++) {
    scanf(" %s", &s[i]);
  }

  ans = 1;
  strcpy(*(hash+0), *(s+0));
  for (size_t i = 1; i < n; i++) {
    flag = 0;
    for (size_t j = 0; j < ans; j++) {
      if (strcmp(*(hash+j), *(s+i)) == 0) {
        flag = 1;
        break;
      }
    }
    if (flag == 0) {
      strcpy(*(hash+ans), *(s+i));
      ans++;
    }
  }

  printf("%d\n",ans );
}