Word Cut
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Submit Status Practice CodeForces 176B
Description
Let‘s consider one interesting word game. In this game you should transform one word into another through special operations.
Let‘s say we have word w, let‘s split this word into two non-empty parts x and y so, that w = xy. A split operation is transforming wordw = xy into word u = yx. For example, a split operation can transform word "wordcut" into word "cutword".
You are given two words start and end. Count in how many ways we can transform word start into word end, if we apply exactlyksplit operations consecutively to word start.
Two ways are considered different if the sequences of applied operations differ. Two operation sequences are different if exists such number i (1 ≤ i ≤ k), that in the i-th operation of the first sequence the word splits into parts x and y, in the i-th operation of the second sequence the word splits into parts a and b, and additionally x ≠ a holds.
Input
The first line contains a non-empty word start, the second line contains a non-empty word end. The words consist of lowercase Latin letters. The number of letters in word start equals the number of letters in word end and is at least 2 and doesn‘t exceed 1000 letters.
The third line contains integer k (0 ≤ k ≤ 105) — the required number of operations.
Output
Print a single number — the answer to the problem. As this number can be rather large, print it modulo 1000000007(109 + 7).
Sample Input
Input
abab2
Output
1
Input
abababababab1
Output
2
Input
abba2
Output
0
Hint
The sought way in the first sample is:
ab → a|b → ba → b|a → ab
In the second sample the two sought ways are:
- ababab → abab|ab → ababab
- ababab → ab|abab → ababab
【题意】:
划分一个串:w = xy into u = yx(整体顺序改变,内容不变)
问有多少种方式,使得正好经过K次划分,从原串变成目的串。
【解题思路】:
比较典型的计数DP。
转移过程:(经过i次划分,有多少种方式到这个串)
起始:原串方式数=1;其他串方式数=0
第一次:原串=0(因为不能变成自己);其他=1(从起始的原串而来)
第二次:原串=n-1(所有其它串都可以变回来);其他=n-2(除去本身的其他+原串)
……
DP状态应该是划分的次数k和起始点i
但是用滚动数组可以划分次数