Hanjo
#include <bits/stdc++.h> using namespace std; int n, m, a, b; int st[20][20]; int ans = 0; void dfs(int x, int y, int a, int b) { if (a < 0) return; if (b < 0) return; if (y == m + 1) return dfs(x + 1, 1, a, b); if (x == n && y == m) { return (void)ans ++; } if (st[x][y]) return dfs(x, y + 1, a, b); if (y < m && !st[x][y + 1] && a > 0) { st[x][y] = st[x][y + 1] = true; dfs(x, y + 1, a - 1, b); st[x][y] = st[x][y + 1] = false; } if (x < n && !st[x + 1][y] && a > 0) { st[x][y] = st[x + 1][y] = true; dfs(x, y + 1, a - 1, b); st[x][y] = st[x + 1][y] = false; } if (b > 0) dfs(x, y + 1, a, b - 1); } int main() { cin >> n >> m >> a >> b; dfs(1, 1, a, b); cout << ans << endl; return 0; }