| 13 | int pw[20][20], b[1 << 10][3000], cnt[1 << 10], dp[2][20][1 << 10][2520]; |
| 14 | vector<int> v; |
| 15 | int yo(int i, int mask, int rem, int f) { |
| 16 | if(i == -1) return pw[b[mask][rem]][cnt[mask]]; |
| 17 | int &ret = dp[f][i][mask][rem]; |
| 18 | if(ret != -1 && !f) return ret; |
| 19 | int m = f ? v[i] : 9; |
| 20 | int ans = 0; |
| 21 | for(int k = 0; k <= m; k++) { |
| 22 | ans += yo(i - 1, mask | (1 << k), (rem * 10 + k) % 2520, k == m ? f : 0); |
| 23 | if(ans >= mod) ans -= mod; |
| 24 | } |
| 25 | if(!f) ret = ans; |
| 26 | return ans; |
| 27 | } |
| 28 | int solve(ll n) { |
| 29 | if(n == 0) return 0; |
| 30 | v.clear(); |