func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   int a[50][50], neigh[5][2] = {{0, 0}, {1, 0}, {0, 1}, {-1, 0}, {0, -1}};   int best;   void dfs(int x) {     vector<pair<int, int> > tmp;     int i, j, xx = 0, yy = 0, b1 = 0, x1 = 0, y1 = 0, x2 = 0, y2 = 0;     for (i = 0; i < m; i++) {       for (j = 0; j < n; j++)         if (a[i][j] == 0) {           b1 = 1;           break;         }       if (b1 == 1) break;     }     if (b1 == 0) {       best = x;       return;     }     if (x + 1 >= best) return;     xx = i;     yy = j;     for (int k = 0; k < 5; k++) {       x2 = xx + neigh[k][0];       y2 = yy + neigh[k][1];       if (x2 >= 0 && x2 < m && y2 >= 0 && y2 < n) {         tmp.clear();         for (i = 0; i < 5; i++) {           x1 = x2 + neigh[i][0];           y1 = y2 + neigh[i][1];           if (x1 >= 0 && x1 < m && y1 >= 0 && y1 < n && a[x1][y1] == 0) {             tmp.push_back(make_pair(x1, y1));             a[x1][y1] = 1;           }         }         dfs(x + 1);         for (i = 0; i < tmp.size(); i++) a[tmp[i].first][tmp[i].second] = 0;       }     }   }   int main() {     cin >> m >> n;     memset(a, 0, sizeof(a));     best = m * n;     dfs(0);     cout << (m * n) - best;     return 0;   }   