#include #include #include #include #include #include #include #include using ll = int64_t; ll n,K; std::vector line; std::vector>> dp; static inline constexpr ll get1n(ll x){ return __builtin_popcount(x); } int main(){ std::iostream::sync_with_stdio(false); std::cin.tie(nullptr); std::cin>>n>>K; line.reserve(n*n+1); line.push_back(0); for(ll msk=0;msk<(1ll<>i)&1){ if((msk>>(i-1))&1 || msk>>(i+1)&1){ goto nxt; } } } line.push_back(msk); nxt:; } // for(ll i:line){ // char buff[10]; // memset(buff, 0, sizeof(buff)); // itoa(i, buff, 2); // printf("%s\n",buff); // } dp.resize(n+1,std::vector>(line.size(),std::vector(K+1))); for(ll j=1;jK)continue; if( line[j] & line[k] || line[j] & (line[k]<<1) || line[j] & (line[k]>>1) ){ continue; }else{ for(ll x=cur1n;x<=K;K++){ dp[i][j][x]+=dp[i-1][k][x-cur1n]; } } } } } ll ans=0; for(ll j=1;j