/* -*- coding: utf-8 -*- * * 1049.cc: No.1049 Zero (Exhaust) - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MOD = 1000000007; /* typedef */ typedef long long ll; /* global variables */ inline void addmod(int &a, int b) { a = (a + b) % MOD; } /* subroutines */ /* main */ int main() { int p, k; scanf("%d%d", &p, &k); int c0 = 1, c1 = 0; while (k--) { int nc0 = 0, nc1 = 0; // (1) add addmod(nc0, (c0 + (ll)c1 * (p - 1) % MOD) % MOD); addmod(nc1, (c0 + (ll)c1 * (p - 1) % MOD) % MOD); // (2) mul addmod(nc0, ((ll)c0 * p % MOD + (ll)c1 * (p - 1) % MOD) % MOD); addmod(nc1, (ll)c1 * (p - 1) % MOD); c0 = nc0, c1 = nc1; } printf("%d\n", c0); return 0; }