C1266 [JSOI2015]字符串树

内存限制:256 MB 时间限制:2000 ms

题目描述

萌萌买了一颗字符串树的种子,春天种下去以后夏天就能长出一棵很大的字符串树。字符串树很奇特,树枝上都密密麻麻写满了字符串,看上去很复杂的样子。

【问题描述】

字符串树本质上还是一棵树,即 $N$ 个节点 $N-1$ 条边的连通无向无环图,节点从 $1$ 到 $N$ 编号。与普通的树不同的是,树上的每条边都对应了一个字符串。萌萌和 JYY 在树下玩的时候,萌萌决定考一考 JYY。每次萌萌都写出一个字符串 $S$ 和两个节点 $U,V$,需要 JYY 立即回答 $U$ 和 $V$ 之间的最短路径(即,之间边数最少的路径。由于给定的是一棵树,这样的路径是唯一的)上有多少个字符串以给定的字符串为前缀。

JYY 虽然精通编程,但对字符串处理却不在行。所以他请你帮他解决萌萌的难题。

输入格式

输入第一行包含一个整数 $N$,代表字符串树的节点数量。

接下来 $N-1$ 行,每行先是两个数 $U,V$,然后是一个字符串 $S$,表示节点和 $U$ 节点 $V$ 之间有一条直接相连的边,这条边上的字符串是 $S$。输入数据保证给出的是一棵合法的树。

接下来一行包含一个整数 $Q$,表示萌萌的问题数。

接来下 $Q$ 行,每行先是两个数 $U,V$,然后是一个字符串 $S$,表示萌萌的一个问题是节点 $U$ 和节点 $V$ 之间的最短路径上有多少字符串以 $S$ 为前缀。

输入中所有字符串只包含 $a-z$ 的小写字母。

$1 \le N,Q \le 100,000$,且输入所有字符串长度不超过 $10$。

输出

输出 $Q$ 行,每行对应萌萌的一个问题的答案。

样例

样例输入 1

4 1 2 ab 2 4 ac 1 3 bc 3 1 4 a 3 4 b 3 2 ab

样例输出 1

2 1 1

提示