#include using namespace std; #define forn(i,n) for(tint i=0;i<(tint)(n); i++) #define forsn(i,s,n) for(tint i=(s);i<(tint)(n); i++) #define debug(x) cout << #x << " = " << x << endl #define pb push_back #define mp make_pair typedef long long tint; int toNumber (string s) { int Number; if ( ! (istringstream(s) >> Number) ) Number = 0; // el string vacio lo manda al cero return Number; } string toString (int number) { ostringstream ostr; ostr << number; return ostr.str(); } tint ele(tint a, tint b){ if(b==0)return 1; if(b%2==0){ return ele((a*a), b/2); }else{ return a*ele((a*a), b/2); } } tint mcd(tint a, tint b){ if(a==0)return b; return mcd(b%a, a); } double d_abs(long a, long b){ if(a>b){ return a-b; } return b-a; } int main(){ tint n, k, x; cin>>n>>k>>x; tint dp[n][2]; forn(i, n){ forn(j, 2){ dp[i][j]=0; } } tint MOD = 1e9+7; dp[0][x==1]=1; forsn(i, 1, n){ dp[i][0]=((dp[i-1][1]*(k-1))%MOD + (dp[i-1][0]*(k-2))%MOD)%MOD; dp[i][1]=dp[i-1][0]%MOD; } cout<