#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const double PI = 3.14159265358979323846; const double EPS = 1e-12; const int INF = 1<<25; typedef pair P; typedef long long ll; typedef unsigned long long ull; #define N 11000 ll dp[N][2][3][8][2]; ll mod = 1000000007; ll calc(string &s){ int n = s.size(); memset(dp, 0, sizeof(dp)); dp[0][0][0][0][0] = 1; for(int i = 0; i < n; i++){ int t = s[i]-'0'; for(int j = 0; j < 10; j++){ for(int k = 0; k < 2; k++){ for(int l = 0; l < 3; l++){ for(int m = 0; m < 8; m++){ (dp[i+1][k|(j==3)][(l+j)%3][(m*2+j)%8][1]+=dp[i][k][l][m][1])%=mod; if(j>A>>B; for(int i = A.size()-1; i >= 0; i--){ if(A[i]!='0'){ A[i] = A[i]-1; break; } A[i] = '9'; } if(A[0]=='0') A = A.substr(1); cout<<(calc(B)-calc(A)+mod)%mod<