const int N = 1e5 + 1;
int vn = 1, Next[N][26]; // тут нули лежат
bool isEnd[N];
void init() {
memset(Next, -1, sizeof(Next));
// 0xFFFFFFFF = 0xFF 0xFF 0xFF 0xFF = -1 -1 -1 -1
}
void add( const string &s ) {
int v = 0;
for (char x : s) {
int &r = Next[v][x - 'a'];
if (r == -1)
r = vn++;
v = r;
}
isEnd[v] = true;
}
void check( const string &text ) {
for (int i = 0; i < (int)text.size(); i++) {
int v = 0;
for (int j = i; j < (int)text.size(); j++) {
v = Next[v][text[j] - 'a'];
if (v == -1)
break;
if (isEnd[v])
; // нашёл вхождение
}
}
}