// priority_queue --- куча

// set 
// java -- TreeSet HashSet
// c++  -- set     hash_set

// 1e5 + 3, 1e6 + 3, 2e6 + 3 --- простые
const int N = (int)1e6 + 3;

// 1..10^9
int h[N], f[N], deleted[N];

// h[i] = a
// f[i] = "f[a]"
// h[i] = 0 <=> empty cell
// f[i] = 0 --- default value

// int f[(int)1e9]

// add, find
inline int get( int a )
{
  int i = a % N;
  while (h[i] && h[i] != a)
    if (++i == N)
      i = 0;
  return i; // f[i], a --> f[get(a)]
}

inline void set_f( int a, int x )
{
  int i = get(a);
  h[i] = a, f[i] = x, deleted[i] = 0;
}

inline int get_f( int a )
{
  if (!h[a] || deleted[a])
    return -1;
  return f[get(a)];
}

inline void delete_a( int a )
{
  deleted[get(a)] = 1;
}

// inline --- ускоряет, не делает вызов функции

int main()
{
  set_f(239, 1);
  int a = get_f(239);

  deleted_a(239);

  set_f(239, 1);
  int a = get_f(239);
}

// "abcdef" ---> Hash("abcdef")
// f[get(Hash("abcdef"))]