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 Go (1.14.1) (judge verdict: Wrong Answer)

package main

import (
	"fmt"
)

/*func findstring(s []string, x string, l int) bool {
	if l == 0{
		return true
	}
	var half int
	half = l/2
fmt.Println(l)
fmt.Println(s[half])
	if s[half] == x {
		return false
	} else if x < s[half] {
		return findstring(s[0:half],x,half)
	} else {
		return findstring(s[half+1:l],x,len(s[half+1:l]))
	}
}*/
/*func contains(s []string, e string) bool {
	for _, v := range s {
		if e == v {
			return true
		}
	}
	return false
}*/

func contains(s []string, e string) bool {
	if len(s) == 0{
		return false
	} else if len(s) == 1{
		return s[0] == e
	} else {
		var half int
		half = len(s)/2
		if s[half] == e{
			return true
		} else if e < s[half] {
			return contains(s[:half],e)
		} else {
			return contains(s[half+1:],e)
		}
	}
}


func main(){
	var n int
	fmt.Scan(&n)
	var x string
	var s []string
	var tf bool
	for i:=0 ; i<n ; i++ {
		fmt.Scan(&x)
		tf = contains(s,x)
		if !tf{
			s = append(s,x)
		}
	}
	fmt.Println(len(s))
}