func_code_string: #include <bits/stdc++.h>   using namespace std;   inline long long mmul(long long a, long long b) { return (a * b) % 998244353; }   inline long long madd(long long a, long long b) { return (a + b) % 998244353; }   long long mpow(long long a, long long p) {     if (p == 0) return 1;     long long halfPow = mpow(a, p / 2);     return mmul(halfPow, p % 2 ? mmul(a, halfPow) : halfPow);   }   long long minv(long long a) { return mpow(a, 998244353 - 2); }   long long mdiv(long long a, long long b) { return mmul(a, minv(b)); }   vector<long long> _mfactMem(1, 1);   long long mfact(long long a) {     if (a >= 998244353) return 0;     while (a >= _mfactMem.size())       _mfactMem.push_back(mmul(_mfactMem.size(), _mfactMem.back()));     return _mfactMem[a];   }   long long mcomb(long long n, long long k) {     if (n == 0 && k == 0) return 1;     long long ni = n % 998244353, ki = k % 998244353;     if (ni < ki) return 0;     long long comb = mmul(mfact(ni), mmul(minv(mfact(ki)), minv(mfact(ni - ki))));     return mcomb(n / 998244353, k / 998244353) * comb;   }   long long calc(int na, int nb) {     long long cnt = 0;     for (int i = 0; i <= min(na, nb); i++) {       cnt = madd(cnt, mmul(mfact(i), mmul(mcomb(na, i), mcomb(nb, i))));     }     return cnt;   }   int main() {     int a, b, c;     scanf( %d %d %d n , &a, &b, &c);     int res = (int)mmul(calc(a, b), mmul(calc(b, c), calc(c, a)));     printf( %d n , res);     return 0;   }   