题目链接:https://nanti.jisuanke.com/t/16442
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
const int maxn=11;
struct Mat{
int v[maxn][maxn];
int m,n;
Mat(){
m=0;
n=0;
memset(v,0,sizeof(v));
}
};
//初始矩阵
Mat start(){
Mat mat;
mat.m=1;
mat.n=10;
mat.v[0][1]=1;
return mat;
}
Mat special(){
Mat mat;
mat.m=10;
mat.n=10;
for(int i=1;i<10;i++){
mat.v[i-1][i]=1;
mat.v[i][0]=1;
}
return mat;
}
Mat mul_mat(Mat A,Mat B){
Mat C;
C.m=A.m;
C.n=B.n;
for(int i=0;i<A.m;i++){
for(int j=0;j<B.n;j++){
for(int k=0;k<A.n;k++){
C.v[i][j]=(C.v[i][j]+(A.v[i][k]*B.v[k][j]))%mod;
}
}
}
return C;
}
Mat pow_mat(Mat B,int t){
Mat A=start();
while(t){
if(t&1){
A=mul_mat(A,B);
}
t>>=1;
B=mul_mat(B,B);
}
return A;
}
int main(){
long long t;
cin>>t;
Mat A = special();
Mat ans = pow_mat(A,t-1);
long long cnt=0;
for(int i=0;i<10;i++){
cnt=(cnt+ans.v[0][i])%mod;
}
cout<<cnt%mod;
}