#include <ビット/ STDC ++ H> の#define融点make_pair用 の#define(iは= int型、iがN <; I ++の)のための担当者(I、N) の#define(I、N)当たりのための(INT iが= N-1、I> =; i--) の#define PB一back の#define融点make_pair の#define全て(X)(X).begin()、(X).END() の#define Fiの最初 の#define SE第二 の#define SZ(X)((INT)(X).size()) 使用して 名前空間STD。 ベクトルのtypedef < 整数 > VI。 typedefの長い 長いLL。 typedefのペア < int型、int型 >PII; constの LL MOD = 1000000007 ; {LL RES(LLのB LL)のLL powmod = 1。%= MOD。アサート(B> = 0)。用(; B; B >> = 1){ 場合(B&1のRES =のRES)*%のMOD。= A *%モッズ; } 戻りRESと、} // ヘッド LL N。 名前空間linear_seq { CONSTの 整数 N = 10010 。 LL RES [N]、塩基[N]、_C [N]、_md [N]。 ベクトル < int型 > メリーランド州; 空 MUL(LL用* Aを、LLの* bの、int型K){ 担当者(I、0、K + K)_c [I] = 0 ; 担当者(I、0、k)の場合([i])と担当者(j、0、k)は_C [iがjは+] =(_C [iがJ +] + [I] * B [j])%MOD ; 用(int型 - I = K + K 1 ; I> = K i--)場合(_c [i])と 担当者(j、0、SZ(MD))_c [I - K + MD [J] = (_c [I - K + MD [J]] - _C [I] * _md [MD [J])%MOD。 担当者(I、0、k)は[I] = _C [I]。 } INT解く(LL N、VI、VIのB){ //[0] * [n]は、B +···=初值B [N + 1]系数B // のprintf( "%d個の\ n"、SZ(b)参照)。 LL ANS = 0、PNT = 0 。 int型 K = SZ(A)。 アサート(SZ(A) == SZ(b)参照)。 担当者(I、0、k)は_md [K - 1 - I] = -a [I]。_md [k]は= 1 。 Md.clear(); 担当者(I、0、K)であれば(_md [I] =!0 )Md.push_back(I)。 担当者(I、0、k)はRES [I] = 基地 [I] = 0 ; 解像度[0 ] = 1 ; 一方、((1LL << PNT)<= n)のPNT ++ 。 用(INT P = PNT; P> = 0 ; P-- ){ MUL(RES、RES、K)。 場合は((N >> P)&1 ){ ため(int型 I = K - 1 ; I> = 0 ; i--)RES [I + 1 ] =のRES [i]は、RES [ 0 ] = 0 ; 担当者(j、0、SZ(MD))RES [MD [J] =(RES [MD [J]] - RES [K] * _md [MD [J])%MOD。 } } 担当者(I、0、K)ANS =(ANS + RES [I] * B [i])と%MOD。 もし(ANS < 0)ANS + = MOD。 戻るANSを。 } VI BM(VI S){ VI C(1、1)、B(1、1 )。 INTは L = 0、M = 1、B = 1 。 担当者(nは、0 、SZ(S)){ LLさd = 0 。 担当者(I、0、L + 1)D =(D +の(LL)C [I] * S [N - I])%MOD。 もし(D == 0)++ M。 他の 場合(2 *のL <= N){ VI T = C。 LLのC = MOD - D * powmod(B、MOD - 2)%MOD。 一方、(SZ(C)<SZ(B)+ M)C.pb(0 )。 担当者(I、0、SZ(B))C [iがMを+] =(C [iがmを+] +のC *のB [i])と%MOD。 L = N + 1 - L。B = T。B = D。M = 1 。 } 他{ LLのC = MOD - D * powmod(B、MOD -2)%のMOD。 一方、(SZ(C)<SZ(B)+ M)C.pb(0 )。 担当者(I、0、SZ(B))C [iがMを+] =(C [iがmを+] +のC *のB [i])と%MOD。 ++ M。 } } 戻りCと、 } int型ガオ(VI、LL N){ VI C = BM(A)を、 c.erase(c.begin())。 担当者(I、0、SZ(C))C [I] =(MOD - C [i])と%MOD。 リターンは解決する(N、C、VI(a.begin()、a.begin()+ SZ(c)参照))。 } }。 {main()のint型 のcin >> nは、 ベクトル < int型 > V。 INT [] = { 3、9、20、40、85、191、426、931、2028、4444、9765、21430、46970 }。 以下のために(int型 i = 0 ; iは<= 12 ; iは++ )V.push_back([I])。 printf(" %LLDの\ nを"、1LL * linear_seq ::ガオ(V、N - 1)%のMOD)。 }