#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; using namespace atcoder; typedef long long ll; typedef pair P; template struct Matrix{ vector> a; Matrix(){} Matrix(size_t n, size_t m):a(n, vector(m, 0)){} Matrix(size_t n):Matrix(n, n){} Matrix(vector> a):a(a){} size_t height() const{ return a.size(); } size_t width() const{ return a[0].size(); } inline const vector &operator[](size_t k) const{ return a[k]; } inline vector &operator[](size_t k){ return a[k]; } static Matrix I(size_t n){ Matrix mat(n); for(int i=0; i> c(n, vector(l, 0)); for(int i=0; i>=1; } return ret; } static pair Gauss_Jordan(const Matrix &a, const Matrix &b){ size_t n=a.height(), m=a.width(), l=b.width(); Matrix c(n, m+l); for(int i=0; i, vector>> linear_equations(const Matrix &a, const vector &b){ int n=a.height(), m=a.width(); Matrix B(n, 1); for(int i=0; i myon(n,-1); vector nuo(m, -1); for(int i=0; i retc; vector> retd; return make_pair(retc, retd); } } vector c(m); vector> d; for(int i=0; i v(m); v[i]=1; for(int j=0; j>n>>a>>b>>k; mint x=(mint(b)*mint(b)+mint(k))/mint(a); mint y=(mint(x)*mint(x)+mint(k))/mint(b); mint p=(b*x-a*y)/mint(b*b-a*x); mint q=(-x*x+b*y)/mint(b*b-a*x); using Mat=Matrix; Mat m(2); m[0][1]=1, m[1][0]=q, m[1][1]=p; m=m.pow(n-1); cout<<(m[0][0]*a+m[0][1]*b).val()<