#include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MOD 1000000007 template class kitamasa{ public: int max_n; vector A; vector X; kitamasa(vector& a, vector& x){ for(int i=0; i Σ Ri Xi ( i = 0...d ) vector func(const vector& P, const vector& Q){ int d = A.size(); vector tmp(2*d-1, 0); for(int i=0; i= MOD) tmp[i+j] %= MOD; } } for(int i=2*d-2; i>=d; --i){ for(int j=0; j= MOD) tmp[i - d + j] %= MOD; } } tmp.resize(d); return tmp; } T calc(T k){ int d = A.size(); int lg = 0; while((1LL<> B(lg, vector(d, 0)); B[0][1] = 1; for(int i=0; i+1 res = B[0]; int r = 0; while(k){ if(k & 1){ res = func(res, B[r]); } k>>=1; r++; } T ret = 0; for(int i=0; i x(n+2, 0); for(int i=0; i> x[i+2]; } for(int i=1; i a(n+2, 1); a[0] = a[1] = 0; vector x(n+2, 0); for(int i=0; i> x[i+2]; } kitamasa ktms_f(a,x); cout << ktms_f.calc(k) << " "; vector b(n+2, 0); b[1] = -1; b[n+1] = 2; vector y = x; for(int i=1; i ktms_s(b,y); cout << ktms_s.calc(k) << endl; } int main(){ long long n,k; cin >> n >> k; function solver = (n<=30? solve_kitamasa : solve_normal); solver(n,k); return 0; }