#include #include using namespace std; #define pb push_back #define ll long long #define F first #define S second typedef pairii; typedef pair,int>vii; const int N=100005; ll mod=1e9+7,dp[N][2][2],n,x,k; ll solve(int idx,bool isOne,bool isX){ if(idx+1==n)return isX==0; if(dp[idx][isOne][isX]!=-1)return dp[idx][isOne][isX]; ll ret=0,sheel=2; if(x==1)sheel--; /// not one or X if(isOne==0&&isX==0)sheel++; ret = solve(idx+1,0,0) * (k-sheel); ret %= mod; if(!isOne){ ret += solve(idx+1,1,x==1); ret%=mod; } if(!isX && x!=1){ ret += solve(idx+1,0,1); ret%=mod; } return dp[idx][isOne][isX]=ret%mod; } int main() { // freopen("test.in","r",stdin); //freopen("kth.out","w",stdout); cin>>n>>k>>x; memset(dp,-1,sizeof(dp)); cout<