#include using namespace std; typedef long long ll; #define REP(i,n) for(int i=0,_n=(int)(n);i<_n;++i) #define ALL(v) (v).begin(),(v).end() #define CLR(t,v) memset(t,(v),sizeof(t)) templateostream& operator<<(ostream& os,const pair&a){return os<<"("<void pv(T a,T b){for(T i=a;i!=b;++i)cout<<(*i)<<" ";cout<void chmin(T&a,const T&b){if(a>b)a=b;} templatevoid chmax(T&a,const T&b){if(a> S; int D = nextLong(); const int N = S.size(); if (D == 0) { bool all_zero = true; REP(i, N) if (S[i] != '0' && S[i] != '?') all_zero = false; cout << (all_zero ? 1 : 0) << endl; return 0; } if (D == 9) D = 0; dp[0][0][0] = 1; for (int i = 0; i < N; i++) { for (int z = 0; z < 2; z++) { for (int j = 0; j <= 9; j++) { for (int k = 0; k <= 9; k++) { if (S[i] == '?' || S[i] == '0'+k) { int nz = z || (k > 0); (dp[nz][i+1][(j + k) % 9] += dp[z][i][j]) %= MOD; } } } } } ll ans = dp[1][N][D] % MOD; cout << ans << endl; return 0; } int main() { #ifdef LOCAL for (;!cin.eof();cin>>ws) #endif main2(); return 0; }