k = 1, 有n种方案,k = n时,有m^n种填数方案
可以把每次填数视为上图中的一条从1到n的路径(注意:一条边可能会走多次, 但是从n-1到n的边只会走一遍)
可以算出从1到2的兴奋度总和为3 * m * (m - 1) / 2, 但是总共要走m ^ (n - 2)遍
同样的,可以算出从2到3的兴奋度为3 * m * (m - 1) / 2   *   m, 但是只要走m ^ (n - 3) 遍
那么是否可以发现:从1到2总兴奋度 = 从2到3总兴奋度 = ... = 从n - 1到n的总兴奋度
是对的,因为相邻两层之间(k层, k + 1层), k + 1层的路径是k层的m倍,但是要走的遍数是k层的1/m
故最终答案就是[3 * m * (m - 1) * m / 2 ^ ( n - 2)] * (n - 1)
下面是代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;
const int mod = 1e9 + 7;
LL p(LL n, LL m)
{
    LL res = 1;
    while(m)
    {
        if(m & 1) res = (res * n) % mod;
        n = n * n % mod;
        m >>= 1;
    }
    return res;
}
int main ()
{
    int T;
    scanf("%d", &T);
    while(T --)
    {
        LL n, m;
        scanf("%lld%lld", &n, &m);
        LL ans = m * (m - 1) / 2 % mod;
        ans = ans * 3 % mod * (n - 1) % mod;
        ans = ans * p(m, n - 2) % mod;
        printf("%lld\n", ans);
    }
    return 0;
}