func_code_string: #include <bits/stdc++.h>   #pragma GCC target( avx )   #pragma GCC optimize(2)   #pragma GCC optimize(3)   #pragma GCC optimize( Ofast )   #pragma GCC optimize( inline )   #pragma GCC optimize( -fgcse )   #pragma GCC optimize( -fgcse-lm )   #pragma GCC optimize( -fipa-sra )   #pragma GCC optimize( -ftree-pre )   #pragma GCC optimize( -ftree-vrp )   #pragma GCC optimize( -fpeephole2 )   #pragma GCC optimize( -ffast-math )   #pragma GCC optimize( -fsched-spec )   #pragma GCC optimize( unroll-loops )   #pragma GCC optimize( -falign-jumps )   #pragma GCC optimize( -falign-loops )   #pragma GCC optimize( -falign-labels )   #pragma GCC optimize( -fdevirtualize )   #pragma GCC optimize( -fcaller-saves )   #pragma GCC optimize( -fcrossjumping )   #pragma GCC optimize( -fthread-jumps )   #pragma GCC optimize( -funroll-loops )   #pragma GCC optimize( -fwhole-program )   #pragma GCC optimize( -freorder-blocks )   #pragma GCC optimize( -fschedule-insns )   #pragma GCC optimize( inline-functions )   #pragma GCC optimize( -ftree-tail-merge )   #pragma GCC optimize( -fschedule-insns2 )   #pragma GCC optimize( -fstrict-aliasing )   #pragma GCC optimize( -fstrict-overflow )   #pragma GCC optimize( -falign-functions )   #pragma GCC optimize( -fcse-skip-blocks )   #pragma GCC optimize( -fcse-follow-jumps )   #pragma GCC optimize( -fsched-interblock )   #pragma GCC optimize( -fpartial-inlining )   #pragma GCC optimize( no-stack-protector )   #pragma GCC optimize( -freorder-functions )   #pragma GCC optimize( -findirect-inlining )   #pragma GCC optimize( -fhoist-adjacent-loads )   #pragma GCC optimize( -frerun-cse-after-loop )   #pragma GCC optimize( inline-small-functions )   #pragma GCC optimize( -finline-small-functions )   #pragma GCC optimize( -ftree-switch-conversion )   #pragma GCC optimize( -foptimize-sibling-calls )   #pragma GCC optimize( -fexpensive-optimizations )   #pragma GCC optimize( -funsafe-loop-optimizations )   #pragma GCC optimize( inline-functions-called-once )   #pragma GCC optimize( -fdelete-null-pointer-checks )   using namespace std;   using namespace std;   const int mod = 998244353;   int n, m, x, a[4000005], ans, w[4000005], r[4000005], invn, mx, lenk;   int ksm(int a, int b) {     int s = 1;     while (b > 0) {       if (b & 1) s = (long long)s * a % mod;       a = (long long)a * a % mod, b >>= 1;     }     return s;   }   void pre(int &n) {     int len = 0;     while (1 << len < n) len++;     n = 1 << len;     int G = ksm(3, (mod - 1) / n);     invn = ksm(n, mod - 2);     w[0] = w[n] = 1;     for (int i = 1; i < n; i++)       w[i] = (long long)w[i - 1] * G % mod,       r[i] = (r[i >> 1] >> 1) | ((i & 1) << (len - 1));   }   void fft(int *a, int all, int fl) {     for (int i = 0; i < all; i++)       if (i < r[i]) swap(a[i], a[r[i]]);     int n = 2, m = 1, x = all / 2;     for (; n <= all; m = n, n <<= 1, x >>= 1)       for (int i = 0; i < all; i += n)         for (int k = 0; k < m; k++) {           int t = (long long)w[fl ? all - x * k : x * k] * a[i + m + k] % mod;           a[i + m + k] = (a[i + k] + mod - t) % mod;           a[i + k] = (a[i + k] + t) % mod;         }     if (fl)       for (int i = 0; i < all; i++) a[i] = (long long)a[i] * invn % mod;   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= m; i++) scanf( %d , &x), a[x]++, mx = max(mx, x);     lenk = n / 2 * mx + 1;     pre(lenk);     fft(a, lenk, 0);     for (int i = 0; i < lenk; i++) a[i] = ksm(a[i], n / 2);     fft(a, lenk, 1);     for (int i = 0; i <= n / 2 * mx; i++)       ans = (ans + (long long)a[i] * a[i] % mod) % mod;     printf( %d n , ans);     return 0;   }   