// // Created by yamunaku on 2020/01/31. // #include using namespace std; #define rep(i, n) for(int i = 0; i < (n); i++) #define repl(i, l, r) for(int i = (l); i < (r); i++) #define per(i, n) for(int i = ((n)-1); i >= 0; i--) #define perl(i, l, r) for(int i = ((r)-1); i >= (l); i--) #define all(x) (x).begin(),(x).end() #define MOD9 998244353 #define MOD 1000000007 #define IINF 1000000000 #define LINF 1000000000000000000 #define SP <<" "<< #define CYES cout<<"Yes"<; using mti = vector>; using vl = vector; using mtl = vector>; using pi = pair; using pl = pair; template using heap = priority_queue, function>; ll modpow(ll x, ll a){ ll ans = 1; while(a){ if(a & 1) ans = ans * x % MOD; a >>= 1; x = x * x % MOD; } return ans; } ll inv(ll x){ return modpow(x, MOD - 2); } int main(){ // CFS; ll n, p; cin >> n >> p; vl a(n); a[0] = 0, a[1] = 1; ll sum = 1, sum2 = 1; repl(i, 2, n){ a[i] = (p * a[i - 1] + a[i - 2]) % MOD; sum = (sum + a[i]) % MOD; sum2 = (sum2 + a[i] * a[i]) % MOD; } cout << ((sum * sum - sum2 + MOD) * inv(2) % MOD + sum2)%MOD << endl; return 0; }