func_code_string: #include <bits/stdc++.h>   using namespace std;   long long modpow(long long a, long long b, long long m = 998244353) {     a %= m;     long long res = 1;     while (b) {       if (b & 1) res = res * a % m;       a = a * a % m;       b >>= 1;     }     return res;   }   long long bpow(long long a, long long b) {     long long res = 1;     while (b) {       if (b & 1) res = res * a;       a = a * a;       b >>= 1;     }     return res;   }   long long modinv(long long a) { return modpow(a, 998244353 - 2, 998244353); }   void graph(vector<vector<int> > &adj, int m) {     int x, y;     for (int i = 0; i < m; i++) {       cin >> x >> y;       adj[x - 1].push_back(y - 1);       adj[y - 1].push_back(x - 1);     }   }   const int N = 23;   struct NTT {     int root, root_1, root_pw = 1 << N, c = (998244353 - 1) >> N;     NTT(bool init = true) {       if (init) {         vector<int> pf;         int n = 998244353 - 1, phi = n;         for (int i = 2; i * i <= n; i++) {           if (n % i == 0) {             pf.push_back(i);             while (n % i == 0) n /= i;           }         }         if (n > 1) pf.push_back(n);         for (int r = 2; r <= phi; r++) {           bool ok = true;           for (auto &x : pf) {             if (modpow(r, phi / x) == 1) {               ok = false;               break;             }           }           if (ok) {             root = modpow(r, c), root_1 = modinv(root);             break;           }         }       }     }     void transform(vector<int> &a, bool invert) {       int n = a.size();       for (int i = 1, j = 0; i < n; i++) {         int bit = n >> 1;         for (; j & bit; bit >>= 1) j ^= bit;         j ^= bit;         if (i < j) swap(a[i], a[j]);       }       for (int len = 2; len <= n; len <<= 1) {         int wlen = invert ? root_1 : root;         for (int i = len; i < root_pw; i <<= 1)           wlen = (int)(1LL * wlen * wlen % 998244353);         for (int i = 0; i < n; i += len) {           int w = 1;           for (int j = 0; j < len / 2; j++) {             int u = a[i + j], v = (int)(1LL * a[i + j + len / 2] * w % 998244353);             a[i + j] = u + v < 998244353 ? u + v : u + v - 998244353;             a[i + j + len / 2] = u - v >= 0 ? u - v : u - v + 998244353;             w = (int)(1LL * w * wlen % 998244353);           }         }       }       if (invert) {         int n_1 = modinv(n);         for (int &x : a) x = (int)(1LL * x * n_1 % 998244353);       }     }     vector<int> multiply(vector<int> const &a, vector<int> const &b) {       vector<int> fa(a.begin(), a.end()), fb(b.begin(), b.end());       int n = 1, total = a.size() + b.size();       while (n < total) n <<= 1;       fa.resize(n);       fb.resize(n);       transform(fa, false);       transform(fb, false);       for (int i = 0; i < n; i++) fa[i] = (fb[i] * 1LL * fa[i]) % 998244353;       transform(fa, true);       fa.resize(total - 1);       return fa;     }   };   NTT ntt;   vector<int> exp(vector<int> &a, int n) {     if (n == 1) return a;     vector<int> res = exp(a, n / 2);     res = ntt.multiply(res, res);     if (n & 1) {       res = ntt.multiply(res, a);     }     return res;   }   void solve() {     int n, k, x;     cin >> n >> k;     vector<int> coeff(10, 0);     for (int i = 0; i < k; i++) cin >> x, coeff[x] = 1;     x = n / 2;     vector<int> power = exp(coeff, x);     long long ans = 0;     ;     for (auto &k : power) ans = (ans + k * 1LL * k) % 998244353;     cout << ans;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     int t = 1, tt = 1;     while (t--) {       solve();     }   }   