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 Ruby (judge verdict: Time Limit Exceeded)

class Dic
  def initialize
    @word = [" "]
    @queue = []
  end
  
  def insert(str,i)
    @word << [str,i]
  end
  
  def find(str,i)
    @queue << [str,i]
  end
  
  def uniq
    @word = @word.uniq{|item|item[0]}.sort_by{|item|item[0]}
  end
  
  def exe
    uniq
    @queue.each do |str|
      if include?(@word, str)
        puts 'yes'
      else
        puts 'no'
      end
    end
  end
  
  def include?(arr, n)
    if arr.length == 1
      return ((arr[0][0] == n[0]) and (arr[0][1] < n[1]))
    else
      if arr[arr.length / 2][0] <= n[0]
        return include?(arr[arr.length / 2..arr.length - 1], n)
      else
        return include?(arr[0...arr.length / 2], n)
      end
    end
  end
end
def testf
  test = open("dic2.txt")
  dic = Dic.new
  i = 0
  test.gets
  while str = test.gets
    dic.send(*str.split(" "), i)
    i += 1
  end
  dic.exe
end
def f
  dic = Dic.new
  i = 0
  gets.to_i.times do
    dic.send(*gets.split(" "),i)
    i += 1
    if i % 100000 == 0
      dic.uniq
    end
  end
  dic.exe
end
f