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;
}
*/