func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, m, rr[10][10];   long long func(long long), dp[(1 << 21)];   map<long long, pair<long long, long long> > mr;   long long check(long long i, long long j) {     return (abs(mr[i].first - mr[j].first) + abs(mr[i].second - mr[j].second)) ==            3;   }   int main() {     scanf( %lld %lld , &n, &m);     if (n > m) swap(n, m);     if (n * m <= 21) {       long long x = 0;       for (int i = 0; i < n; i++)         for (int j = 0; j < m; j++) {           mr[x++] = make_pair(i, j);         }       memset(dp, -1, sizeof(dp));       cout << func(0);     } else {       long long ans = 0;       if (n == 1) {         ans += m - m % 6;         m = m % 6;         ans += (m >= 3 ? 2 * (m - 3) : 0);       } else         ans = n * m - (n * m) % 2;       cout << ans <<   n ;     }   }   long long func(long long mask) {     if (dp[mask] != -1) return dp[mask];     long long ans = 0;     for (int i = 0; i < n * m; i++) {       for (int j = i + 1; j < n * m; j++) {         if ((mask & (1 << i)) == 0 && (mask & (1 << j)) == 0 && check(i, j)) {           ans = max(ans, 2 + func(mask | (1 << i) | (1 << j)));         }       }     }     return dp[mask] = ans;   }   