#include using namespace std; typedef long long i64; int mod = 1e9 + 7; pair solve1(int n, int k, vector a) { int y = 0; for(int i=0; i> matmul(vector> a, vector> b) { vector> res(a.size(), vector(b[0].size())); for(int i=0; i> matpow(vector> a, i64 n) { vector> res(a.size(), vector(a.size())); for(int i=0; i 0) { if(n & 1) { res = matmul(res, a); } a = matmul(a, a); n >>= 1; } return res; } pair solve2(int n, i64 k, vector a) { vector> s(n+1, vector(1)); s[n][0] = 0; s[n-1][0] = a[0]; for(int i=1; i> mat(n+1, vector(n+1)); mat[0][0] = 2; for(int i=0; i> powered = matpow(mat, k-n); vector> res = matmul(powered, s); i64 x = res[0][0], y = res[1][0]; return make_pair((x-y+mod)%mod, x); } int main(void) { int n; i64 k; vector a; scanf("%d%lld", &n, &k); for(int i=0; i res = k<=1e6 ? solve1(n, (int)k, a) : solve2(n, k, a); printf("%d %d\n", res.first, res.second); return 0; }