func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 20;   const int mod = 998244353;   struct node {     int sum, tot;     node(){};     node(int S, int T) {       sum = S;       tot = T;     }     bool check() { return ~sum && ~tot; }   } f[2][2][N][1 << 10];   int A[N], ret, pw[30], k;   int lowbit(int x) { return x & -x; }   int ccount(int x) {     int cnt = 0;     if (!x) return 0;     while (x) {       x ^= lowbit(x);       cnt++;     }     return cnt;   }   node dfs(bool lim, bool zero, int pos, int st) {     if (!pos) return node(0, 1);     node& now = f[lim][zero][pos][st];     if (now.check()) return now;     now.sum = now.tot = 0;     for (int i = 0; i <= (lim ? A[pos] : 9); i++) {       if (ccount(zero && !i ? 0 : st | (1 << i)) <= k) {         node nxt = dfs(lim && i == A[pos], zero && !i, pos - 1,                        zero && !i ? 0 : st | (1 << i));         now.sum =             (now.sum + nxt.sum + 1ll * i * nxt.tot % mod * pw[pos - 1] % mod) %             mod;         now.tot = (now.tot + nxt.tot) % mod;       }     }     f[lim][zero][pos][st] = now;     return now;   }   int calc(long long x) {     ret = 0;     memset(f, -1, sizeof(f));     while (x) {       A[++ret] = x % 10;       x /= 10;     }     return dfs(1, 1, ret, 0).sum;   }   int main() {     pw[0] = 1;     for (int i = 1; i <= 20; i++) pw[i] = 10ll * pw[i - 1] % mod;     long long l, r;     cin >> l >> r >> k;     cout << (mod + calc(r) - calc(l - 1)) % mod;   }   