A letter tree is given on this page (HDOJ 4601).
Another letter tree of N nodes is now given, where each node is assigned to a lowercase letter. When making a tour from a node to another, one should always follow the shortest path between them. That is, no nodes should be visited twice during his tour.
After one travels along a path, he will obtain a Path String formed by the letters assigned to nodes that he just moves past. The string exactly records all nodes in the order he visits.
Now we’re faced with the problem. Initially we have a string S0 and totally Q queries each in a shape of (u, v). For each query, we make a tour from u to v and obtain a Path String Suv , and your task is to calculate how many times that S0 occurs as a subsequence of Suv . For example, “ab” occurs 3 times in “abab” as a subsequence.
A subsequence is a sequence that can be derived from another sequence by deleting some elements without changing the order of the remaining elements. For instance, “abc” and “ec” are both subsequence of “adebc”, while “ba” and “ed” are not.
The answer might be large, and thus you’re only required to output it modulo 10007.