struct Hashmap{ static const int Ha=999917,maxe=46340; int E,lnk[Ha],son[maxe+5],nxt[maxe+5],w[maxe+5]; int top,stk[maxe+5]; void clear() {E=0;while(top) lnk[stk[top--]]=0;} void Add(int x,int y){son[++E]=y;nxt[E]=lnk[x];w[E]=maxint;lnk[x]=E;} bool count(int y) { int x=y%Ha; for(int j=lnk[x];j;j=nxt[j]) if(y==son[j]) return true; return false; } int& operator [] (int y) { int x=y%Ha; for(int j=lnk[x];j;j=nxt[j]) if(y==son[j]) return w[j]; Add(x,y);stk[++top]=x;return w[E]; } };