#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long int ll; typedef long double ld; const ll INF = 2e9 + 999, MOD = 1e9 + 7, MAXN = 100001; // 18 const ld EPS = 0.000001; #define forn(a, b) for (ll i = a; i < b; i++) #define fore(p, a, b) for (ll p = a; p < b; p++) #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define pb(a) push_back(a) #define sz(a) (int) a.size() #define mp(a, b) make_pair(a, b) #define ft first #define sd second #define cotu cout #define itn ll #define pll pair using namespace std; int countArray(int n, int k, int x) { ll ans = 1; vector dp(n+2, 0), p(n+2); for (int i=0; i<=n; ++i) { ans*=k-1; ans%=MOD; p[i] = ans; } // cout << "ans " << ans << endl; dp[1] = ((x == 1) ? 0 : 1); for (int i=2; i<=n; ++i) { dp[i] = p[i-2] - dp[i-1] + MOD; dp[i] %= MOD; } // cout << "dp "; // for (int i:dp) cout << i << " "; // cout << endl; // cout << "p "; // for (int i:p) cout << i << " "; // cout << endl; return dp[n-1]; } int greedy(int k, int x) { int ans=0; for (int i=1; i<=k; ++i) { for (int j=1; j<=k; ++j) { for (int q=1; q<=k; ++q) { for (int h=1; h<=k; ++h) { if (i != 1 && i != j && j != q && q != h && h != x) { // cout << 1 << ' ' << i << ' ' << j << ' ' << q << ' ' << h << ' ' << x << endl; ans++; } } } } } return ans % MOD; } int main() { int n, k, x; cin >> n >> k >> x; cout << countArray(n, k, x) << endl; //cout << greedy(k, x) << endl; return 0; }