func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long N = 8e6 + 7, mod = 998244353, root = 3;   long long x[N], n, m, i, j, ma, mb, inv, res, b[N], ans[N], L, R[N];   long long pow_mod(long long x, long long n) {     long long res = 1;     while (n) {       if (n & 1) res = 1LL * x * res % mod;       x = 1LL * x * x % mod;       n >>= 1;     }     return res;   }   void ntt(long long* x, long long type) {     for (long long i = 0; i < n; ++i)       if (i < R[i]) swap(x[i], x[R[i]]);     for (long long i = 1; i < n; i <<= 1) {       long long wn = pow_mod(root, type == 1 ? (mod - 1) / (i << 1)                                              : (mod - 1 - (mod - 1) / (i << 1)));       for (long long p = i << 1, j = 0; j < n; j += p) {         long long w = 1;         for (long long k = 0; k < i; ++k, w = 1LL * wn * w % mod) {           long long l = x[j + k], r = 1LL * x[j + k + i] * w % mod;           x[j + k] = (l + r) % mod;           x[j + k + i] = (l - r + mod) % mod;         }       }     }   }   void fpow(long long sz) {     ntt(ans, 1);     ntt(x, 1);     while (sz) {       if (sz & 1) {         for (long long i = 0; i < n; i++) ans[i] = 1ll * ans[i] * x[i] % mod;       }       for (long long i = 0; i < n; i++) x[i] = 1ll * x[i] * x[i] % mod;       sz >>= 1;     }     ntt(ans, -1);   }   int32_t main() {     ans[0] = 1;     long long sz, k, tx;     cin >> sz >> k;     for (long long i = 1; i <= k; i++) {       scanf( %d , &tx);       x[tx] = 1;     }     for (m = 200000 * 9 + 7, n = 1; n <= m; n <<= 1) L++;     for (i = 0; i < n; ++i) R[i] = (R[i >> 1] >> 1) | ((i & 1) << L - 1);     fpow(sz / 2);     long long cnt = 0;     inv = pow_mod(n, mod - 2);     for (long long i = 0; i < n; i++)       cnt =           (cnt + (ans[i] % mod * inv % mod) * (ans[i] % mod * inv % mod) % mod) %           mod;     cout << cnt << endl;   }   