boolcheck( ll x, ll y ){ if( x & y ) return0; if( (x >> 1) & y ) return0; if( (x << 1) & y ) return0; return1; }
voidsolve( ){ int n = read( ), k = read( );
dp[0][0][0] = 1;
for( int i = 1; i <= n; ++ i ) { for( int j = 0; j <= k; ++ j ) { for( int cur = 0; cur < (1 << n); ++ cur ) { int cnt = __builtin_popcount( cur ); if( cnt > j ) continue; if( (cur << 1) & cur ) continue; for( int pre = 0; pre < (1 << n); ++ pre ) { if( check( cur, pre ) ) dp[i][j][cur] += dp[i-1][j-cnt][pre]; } } } }
ll ans = 0; for( int mask = 0; mask < (1 << n); ++ mask ) ans += dp[n][k][mask]; cout << ans << '\n'; }