#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define sqr(a) ((a) * (a)) #define f first #define s second #define mp make_pair #define pb push_back #define ppb pop_back #define add insert #define del erase #define sz(a) (int)a.size() #define forit(i, a) for(__typeof(a.begin()) i = a.begin(); i != a.end(); i++) using namespace std; typedef long long LL; typedef vector Vi; typedef set Si; typedef pair Pii; //const double EPS = 1e-9; //const double PI = acos(-1.0); //const int MAX_N = (int)1e5; const LL MOD = (LL)1e9 + 7; LL binPow(LL a, LL n) { LL res = 1; while (n) { if (n & 1) res = (res * a) % MOD; a = (a * a) % MOD; n >>= 1; } return res; } int main() { LL n, k, x; cin >> n >> k >> x; LL prev = x != 1; for (LL i = 2; i < n; i++) { LL cur = binPow(k - 1, i - 1); cur = (cur + MOD - prev) % MOD; prev = cur; } cout << prev; return 0; }