// Importing required classes // Converted from birthdaygift_xiaowuc1.cpp import java.io.*; import java.util.*; public class BGift{ static long MOD = 1000000007; //typedef vector> matrix; //int matrix[] public static void main(String[] args) { long len; int residue; Scanner sc = new Scanner(System.in); len = sc.nextLong(); residue = sc.nextInt(); //scanf("%lld %d", &len, &residue); if(len == 1) { if(residue < 10) System.out.println("1"); else System.out.println("0"); return; } if(len == 2){ if(residue >= 10 && residue<100 && residue%11 != 0){ System.out.println("1"); } else{ System.out.println("0"); } return; } //matrix iter(90); //Vector> iter = new Vector>(90); int[][] iter = new int[90][90]; //for(auto& x: iter) x.resize(90); for(int i = 0; i < 90; i++) { int mod = i / 10; int dig = i % 10; for(int j = 0; j < 10; j++) { if(dig != j) { int nmod = (mod + j); if(nmod >= 9) nmod -= 9; iter[i][(10 * nmod) + j]++; } } } iter = pow(iter, len - 2); int ret = 0; int ninemod = residue % 9; int mod25 = residue % 25; while(mod25 < 100) { if(mod25/10 != mod25%10) { int src = (10 * (mod25%9)) + (mod25/10); for(int dig = 1; dig <= 9; dig++) { int dst = (10 * ninemod) + dig; ret += iter[src][dst]; if(ret >= MOD) ret -= MOD; } } mod25 += 25; } System.out.println(ret); //return 0; } public static int[][] mul(int[][] a, int[][] b) { //ret.resize(a.size()); int[][] ret = new int[90][90]; for(int i = 0; i < 90; /*ret.size();*/ i++) { //ret[i].resize(b[0].size()); for(int j = 0; j < 90;/*ret[i].size();*/ j++) { for(int k = 0; k < 90;/*b.size();*/ k++) { ret[i][j] += (a[i][k] * (long)b[k][j]) % MOD; if(ret[i][j] >= MOD) ret[i][j] -= MOD; } } } return ret; } public static int[][] pow(int[][] b, long e) { int[][] r = new int[90][90]; for(int i = 0; i < 90;/*r.size();*/ i++) { for (int j = 0; j < 90;j++){ r[i][j]=0; } r[i][i] = 1; } while(e>0) { if(e%2==1) { //int[][] nr = new int[90][90]; r = mul(r, b); } e /= 2; if(e>0) { b = mul(b, b); } } return r; } }