Problem:
Search III

Your task is to write a program of a simple dictionary which implements the following instructions:

insert str: insert a string str in to the dictionary

find str: if the distionary contains str, then print 'yes', otherwise print 'no'

Input

In the first line n, the number of instructions is given. In the following n lines, n instructions are given in the above mentioned format.

Output

Print yes or no for each find instruction in a line.

Constraints

A string consists of 'A', 'C', 'G', or 'T'

1 ≤ length of a string ≤ 12

n ≤ 1000000

Sample Input 1

5
insert A
insert T
insert C
find G
find A

Sample Output 1

no
yes

Sample Input 2

13
insert AAA
insert AAC
insert AGA
insert AGG
insert TTT
find AAA
find CCC
find CCC
insert CCC
find CCC
insert T
find TTT
find T

Sample Output 2

yes
no
no
yes
yes
yes

Notes

Template in C

Solution in C# (judge verdict: Time Limit Exceeded)

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;
 
class Program{
    static void Main(){
        int n = int.Parse(Console.ReadLine());
        string[] order = new string[n];
        string[] str = new string[n];
        HashDictionary dict = new HashDictionary();
        for (int i = 0; i < n; i++)
        {
            string[] inputs = Console.ReadLine().Split(' ');
            
            order[i] = inputs[0];
            str[i] = inputs[1];
        }

        for (int i = 0; i < n; i++)
        {
            switch (order[i])
            {
                case "insert":
                    dict.Insert(str[i]);
                    break;
                case "find":
                    if(dict.Find(str[i])) Console.WriteLine("yes");
                    else Console.WriteLine("no");
                    break;
            }
        }
    }

    class HashDictionary{
        const int mod = 1001024;
        string[] dict;
        public HashDictionary(){
            dict = new string[mod];
        }

        public void Insert(string key){
            int sum = 0;
            foreach (char ch in key)
            {
                sum += (int)ch - (int)'A';
            }
            dict[Hash(sum)] = key;
        }

        public bool Find(string key){
            int sum = 0;
            foreach (char ch in key)
            {
                sum += (int)ch - (int)'A';
            }
            int i = 0;
            while(true){
                int idx = Hash0(sum, i++);
                try{
                    if(dict[idx] == key) return true;
                    else if(string.IsNullOrEmpty(dict[idx])) return false;
                }
                catch(IndexOutOfRangeException){
                    return false;
                }
            }
        }

        internal int Hash0(int key, int i){
            return i + key % (mod - i);
        }

        internal int Hash(int key){
            int i = 0;
            while(true){
                int idx = Hash0(key, i++);
                if(string.IsNullOrEmpty(dict[idx])) return idx;
            }
        }
    }
}