#include<stdio.h>
#include<string.h>

#define M 1000003
#define L 13

char H[M][L]; /* Hash Table */

int Getchar(char ch){//計算
  if ( ch == 'A') return 1;
  else if ( ch == 'C') return 2;
  else if ( ch == 'G') return 3;
  else if ( ch == 'T') return 4;
  return 0;
}

long long Getkey(char str[]){//計算
  long long sum = 0, p = 1, i;
  
  for ( i = 0; i < strlen(str); i++ ){
    sum += p*(Getchar(str[i]));
    p *= 5;
  }
  return sum;
}

int H1(int key){ return key%M; }//計算
int H2(int key){ return 1+key%(M-1); }

int Insert(char str[]){
  long long key=Getkey(str);
  long long i;
  long long m;
  
  for(i=0;;i++){
      m=(H1(key)+i*H2(key))%M;

      if(strcmp(H[m],str)==0)return 0;//すでにある　失敗//同じ文字列はいらない
      else if (strlen(H[m])==0){//空きスペース発見、insertできる
	  strcpy(H[m],str);
	  return 1;//成功
	}
    }
}

int Find(char str[]){
  long long key = Getkey(str);
  long long m;
  long long i;
  
  for(i=0;;i++){
      m=(H1(key)+i*H2(key))%M;
      if(strcmp(H[m],str)==0)  return 1; //FOUND
      else if(strlen(H[m])==0)return 0; //NOT FOUND
    }
  return 0;//ありえないけど、一応
}

int main()
{
  int i, n, h;
  char str[L], com[7];
  
  for ( i = 0; i < M; i++ ) H[i][0] = '\0';//一列目ヌル文字
  
  scanf("%d", &n);
  
  for ( i = 0; i < n; i++ ){
      scanf("%s%s", com, str);
	
      if ( com[0] == 'i' )Insert(str);//insert
      else{//find
	  if (Find(str))printf("yes\n");
	  else printf("no\n");
	}
    }
  return 0;
}

/*
コマンド数
insert AAA
find AAA

yesとnoで結果出力
あくまで検索だから、同じ文字列はいらない
*/

