struct HashTable {
typedef ull T;
typedef int S;
static const int N = (int)1e6 + 7;
static const int M = (int)1e5 + 7;
int head[N], tot;
struct Node {
T fval;
S sval;
int nex;
} a[M];
void clear() {
memset(head, -1, sizeof(head));
tot = 0;
}
void insert(T fval, S sval) {
int p = fval % N;
a[tot].fval = fval;
a[tot].sval = sval;
a[tot].nex = head[p];
head[p] = tot++;
}
S find(T fval) {
int p = fval % N;
for(int i = head[p]; ~i; i = a[i].nex) {
if(a[i].fval == fval) return a[i].sval;
}
return -1;
}
} Map;