const int M = 1e6 + 3;

vector<int> h(M, 0); // hash-set с открытой адресацией
// h[i] == 0 -- пустая ячейка
// h[i] == -1 -- битая ячейка (удалённый элемент)
// h[i] != 0 -- в i-й ячейке живёт элемент h[i]
// M / 1.5

int index( int x ) { // [Object x]
  int i = x % M; // начальное приближение [hash(x)]
  while (h[i] && h[i] != x)
    i = (i + 1) % M;
  return i;
}

bool Find( int x ) { return h[index(x)] == x; }
void Add( int x )  { h[index(x)] = x; }
void Del( int x )  { h[index(x)] = -1; }

/**
void Del( int x )  { 
  int i = index(x);
  if (h[i] == x) h[i] = -1; 
}
*/