func_code_string: #include <bits/stdc++.h>   using namespace std;   const int P = 998244353;   vector<int> L, R;   pair<long long, long long> f[25][1500];   long long l, r, dx[25];   int k;   pair<long long, long long> dfs(vector<int> w, int pos, int mask, int cnt,                                  int op) {     if (pos < 0) return make_pair(0, 0);     if (!op && ~f[pos][mask].first) return f[pos][mask];     long long mx = (op ? w[pos] : 9), res = 0, num = 0;     if (!pos) {       for (int i = 0; i <= mx; i++)         if (mask & (1 << i))           res += i, num++;         else if (cnt < k)           res += i, num++;       if (!op) f[pos][mask] = make_pair(res, num);       return make_pair(res, num);     }     for (int i = 0; i <= mx; i++)       if (mask & (1 << i) || cnt < k) {         pair<long long, long long> p;         if (mask & (1 << i) || !mask && !i)           p = dfs(w, pos - 1, mask, cnt, op & (i == mx));         else           p = dfs(w, pos - 1, mask | (1 << i), cnt + 1, op & (i == mx));         res = ((long long)i * dx[pos] % P * p.second % P + res + p.first) % P;         num = (num + p.second) % P;       }     if (!op) f[pos][mask] = make_pair(res, num);     return make_pair(res, num);   }   int main() {     dx[0] = 1;     for (int i = 1; i <= 18; i++) dx[i] = (dx[i - 1] * 10) % P;     scanf( %lld%lld%d , &l, &r, &k);     l--;     while (l) L.push_back(l % 10), l /= 10;     while (r) R.push_back(r % 10), r /= 10;     memset(f, -1, sizeof(f));     pair<long long, long long> ansL = dfs(L, L.size() - 1, 0, 0, 1);     pair<long long, long long> ansR = dfs(R, R.size() - 1, 0, 0, 1);     printf( %lld n , (ansR.first - ansL.first + P) % P);     return 0;   }   