---
# System prepended metadata

title: TreeString

---

# Tree String

## Đề Bài 

Cho cây gồm $n$ đỉnh có gốc tại đỉnh $1$, đỉnh thứ $i$ chứa kí tự $c_i$ (nằm trong bảng chữ cái alphabet viết thường).

Gọi $t(u,v)$ là xâu được tạo thành bằng các kí tự trên các đỉnh trong đường đi đơn từ đỉnh $u$ tới đỉnh $v$.

Ta có $q$ truy vấn, truy vấn thứ $i$ có dạng như sau:
- Cho đỉnh $u_i$ và xâu $s_i$, hãy đếm xem có bao nhiêu $t(u_i,v) = s_i$, sao cho $v$ thuộc cây con của đỉnh $u$.

#### Giới hạn

- $1 \le n,q \le 2 \times 10^5$.
- Tổng các $|s_i|$ trong các truy vấn không quá $5 \times 10^5$.

## Editorial

Ta sẽ xử lí truy vấn offline.

Với mỗi đỉnh $u$, ta sẽ lưu một Trie gồm các xâu $t(u,v)$ với $v$ nằm trong cây con của $u$.

Ta có thể nhận xét rằng, số node của cây Trie của đỉnh $u$ sẽ bé hơn hoặc bằng độ lớn của cây con gốc $u$.

Từ đó, ta có thể dùng kĩ thuật Small To Large để gộp các Trie lại với nhau. Việc gộp này ta sẽ dùng $DFS$ trên Trie có số node bé hơn để add dần vào Trie còn lại.