struct node { int next[27]; int v; void init() { v=0; memset(next,-1,sizeof(next)); } }; node L[1000500]; int tot=0; void add(char s[],int len) { int now=0; for(int i=0;i<len;i++) { int temp=s[i]-'s'; int next=L[now].next[temp]; if(next==-1) { next=++tot; L[next].v=-1; L[next].init(); L[now].next[temp]=next; } now=next; } L[now].v=0; } int query(char s[],int len) { int now=0; for(int i=0;i<len;i++) { int temp=s[i]-'a'; int next=L[now].next[temp]; if(next==-1) return -1; } return L[now].v; }