问题描述
蒜头君有 n 只气球,蒜头君把气球排成一排。初始时,气球都是白色,现在蒜头君想用 m 种颜色给气球涂色,如果相邻的气球的颜色相同,这 2 个气球会发生消消乐,蒜头君希望你求出会发生消消乐的涂色方法有多少种。最后答案对 10^9+7取模。
输入格式
输入两个整数n(1<=n<=10^12),m(1<=m<=10^8)
输出格式
输出一行表示答案。
样例输入
3 4
样例输出
28
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll MOD=1e9+7;
ll Pow_mod(ll a,ll b,ll mod)
{
ll res=1;
//ll temp=a;
while(b)
{
if(b&1)
{
res=res*a%mod;
}
a=a*a%mod;
b>>=1;
}
return res;
}
int main()
{
ll n,m;
cin>>n>>m;
ll ans=0;
ans=(Pow_mod(m,n,MOD)%MOD-Pow_mod(m-1,n-1,MOD)*m%MOD)%MOD;
ans=(ans+MOD)%MOD;
cout<<ans<<endl;
return 0;
}