[JSOI2015]字符串树
题号:NC20564
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

萌萌买了一颗字符串树的种子,春天种下去以后夏天就能长出一棵很大的字 符串树。字符串树很奇特,树枝上都密密麻麻写满了字符串,看上去很复杂的样子。
【问题描述】 字符串树本质上还是一棵树,即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 ≤ N,Q ≤ 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

输出

复制
2
1
1

备注:

对于100% 的数据,,输入所有字符串长度不超过10且只包含 a~z 的小写字母。