1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 using namespace std;
7 #define LL long long
8 #define Mod 1000000007
9 #define Maxn 1010
10
11 int n;
12
13 struct node
14 {
15 LL w[3][3];
16 }t[17],tt[3];
17
18 LL a[Maxn],f[Maxn][2];
19 char s[Maxn];
20
21 void mul(int z,int x,int y)
22 {
23 t[2]=tt[0];
24 for(int k=1;k<=2;k++)
25 for(int i=1;i<=2;i++)
26 for(int j=1;j<=2;j++)
27 t[2].w[i][j]=(t[2].w[i][j]+t[x].w[i][k]*t[y].w[k][j])%Mod;
28 t[z]=t[2];
29 }
30
31 void qpow(int x,int b)
32 {
33 t[1]=tt[1];
34 while(b)
35 {
36 if(b&1) mul(1,x,1);
37 mul(x,x,x);
38 b>>=1;
39 }
40 t[x]=t[1];
41 }
42
43 LL B[Maxn][Maxn][3];
44
45 LL get_f(int x)
46 {
47 t[3]=tt[2];
48 t[4]=tt[1];
49 for(int i=x;i<=n;i++)
50 {
51 qpow(4,10);
52 t[0]=t[3];
53 qpow(0,a[i]);
54 // mul(4,a[i]-10,4);
55
56 t[5]=t[4];
57 B[x][i][0]=t[5].w[1][1];
58 mul(5,5,3);
59 B[x][i][1]=t[5].w[1][1];
60 mul(5,5,3);
61 B[x][i][2]=t[5].w[1][1];
62 }
63 }
64
65 void init()
66 {
67 tt[0].w[1][1]=0;tt[0].w[1][2]=0;
68 tt[0].w[2][1]=0;tt[0].w[2][2]=0;
69
70 tt[1].w[1][1]=1;tt[1].w[1][2]=0;
71 tt[1].w[2][1]=0;tt[1].w[2][2]=1;
72
73 tt[2].w[1][1]=0;tt[2].w[1][2]=1;
74 tt[2].w[2][1]=1;tt[2].w[2][2]=1;
75
76 t[11]=tt[1];t[5]=tt[1];
77 for(int i=2;i<=9;i++)
78 {
79 mul(i,i-1,5);
80 }
81 }
82
83 int main()
84 {
85 init();
86 scanf("%d",&n);
87 scanf("%s",s+1);
88 for(int i=1;i<=n;i++) a[i]=s[i]-‘0‘;
89
90 memset(f,0,sizeof(f));
91 f[0][0]=1;
92
93 int i,j,k;
94 for(i=1;i<=n;i++) get_f(i);
95
96 for(i=1;i<=n;i++)
97 for(j=0;j<i;j++)
98 {
99 f[i][0]=f[i][0]+f[j][0]*B[j+1][i][0];f[i][0]%=Mod;
100 f[i][0]=f[i][0]+f[j][1]*B[j+1][i][1];f[i][0]%=Mod;
101 f[i][1]=f[i][1]+f[j][0]*B[j+1][i][1];f[i][1]%=Mod;
102 f[i][1]=f[i][1]+f[j][1]*B[j+1][i][2];f[i][1]%=Mod;
103
104 }
105 printf("%d\n",f[n][0]);
106 return 0;
107 }