#include <iostream> #include <cstring> #include <cstdio> #define MAX 10 using namespace std; struct matrix { int num[MAX][MAX]; matrix() { memset(num,0,sizeof(num)); } }; matrix res; matrix A; int m; matrix operator*(matrix &a,matrix &b) { matrix t; int i,j,k; for(i=0;i<10;i++) for(j=0;j<10;j++) { t.num[i][j]=0; for(k=0;k<10;k++) t.num[i][j]+=(a.num[i][k]*b.num[k][j]); t.num[i][j]%=m; } return t; } void quickpower(int x) { while(x) { if(x&1) res=res*A; x>>=1; A=A*A; } } void init() { int i,j; for(i=0;i<10;i++) A.num[0][i]=0; for(i=1;i<10;i++) { for(j=0;j<10;j++) { if(i-1==j) A.num[i][j]=1; else A.num[i][j]=0; } } for(i=0;i<10;i++) for(j=0;j<10;j++) res.num[i][j]=(i==j); } int main() { int k; while(scanf("%d%d",&k,&m)!=EOF) { init(); int i; for(i=9;i>=0;i--) { scanf("%d",&A.num[i][9]); } int j; /*for(i=0;i<10;i++) { for(j=0;j<10;j++) printf("%d ",A.num[i][j]); printf("\n"); }*/ quickpower(k); int sum=0; for(i=0;i<10;i++) { sum+=res.num[i][0]*i; } printf("%d\n",sum%m); } return 0; }