#include <bits/stdc++.h> using namespace std; int n, m; const int N = 15; long long dp[N][1100][1 << 13]; //目前的行 选了多少个 目前状态 vector<int>v;//每行压缩航的合法状态 int check(int x) { int res = 0; for (int i = 0; i <= 31; i++) { if (x >> i & 1) res++; } return res; } int main() { cin >> n >> m; int ans = 0; for (int i = 0; i < (1 << n); i++) { if ((i & (i << 1)) == 0) { v.push_back(i); } } int len = v.size(); //for(int i=0;i<len;i++) //dp[1][check(v[i])][i]=1; dp[0][0][0] = 1; for (int i = 1; i <= n + 1; i++) { for (int l = 0; l <= m; l++) for (int j = 0; j < len; j++) { for (int k = 0; k < len; k++) { if (v[j]&v[k]) continue; int t = v[j] | v[k]; if (t & (t << 1)) continue; if (l - check(v[j]) < 0) continue; dp[i][l][j] += dp[i - 1][l - check(v[j])][k]; } } } cout << dp[n + 1][m][0] << endl; }