void buildFail() { int h = 0, t = 0; root->fail = &virt; que[t++] = root; while (h < t) { node *cur = que[h++]; for (int i = 0; i < 26; i++) { node *f = cur->fail; while (f->trans[i] == 0) f = f->fail; f = f->trans[i]; if (cur->trans[i]) (que[t++] = cur->trans[i])->fail = f; else cur->trans[i] = f; } } }