func_code_string: #include <bits/stdc++.h>   using namespace std;   short memo[6][40][1 << 6][1 << 6][1 << 6];   int n, m;   short roll(int row, int col, int a, int b, int c) {     if (col == m) {       return (n - __builtin_popcount(a));     }     if (row == n) {       return roll(0, col + 1, b, c, 0) +              (col > 0 ? (n - __builtin_popcount(a)) : 0);     }     short &ans = memo[row][col][a][b][c];     if (~ans) {       return ans;     }     ans = roll(row + 1, col, a, b | (1 << row), c);     if (col > 0) {       ans = max(ans, roll(row + 1, col, a | (1 << row), b, c));     }     if (col < m - 1) {       ans = max(ans, roll(row + 1, col, a, b, c | (1 << row)));     }     if (row > 0) {       ans = max(ans, roll(row + 1, col, a, b | (1 << (row - 1)), c));     }     if (row < n - 1) {       ans = max(ans, roll(row + 1, col, a, b | (1 << (row + 1)), c));     }     return ans;   }   int main() {     scanf( %d %d , &n, &m);     if (n > m) {       swap(n, m);     }     memset(memo, -1, sizeof memo);     cout << roll(0, 0, 0, 0, 0) <<   n ;     return 0;   }   