/* * Author: nskybytskyi * Time: 2022-01-13 15:08:45 */ #include using namespace std; const int mod = 1'000'000'007; int main() { cin.tie(0)->sync_with_stdio(0); int n; cin >> n; if (n < 4) { cout << 0 << "\n"; } else { int pwr = 1; for (int i = 0; i < n; ++i) { pwr <<= 1; pwr %= mod; } // dp[mask][i] = how many binary strings of length i end on mask and do not contain "1010"? vector> dp(16, vector(n + 1)); for (int i = 0; i < 16; ++i) { if (i != 10) { dp[i][4] = 1; } } for (int i = 4; i < n; ++i) { for (int mask = 0; mask < 16; ++mask) { if (mask != 10) { for (int bit = 0; bit < 2; ++bit) { int nmask = ((mask << 1) | bit) & 15; if (nmask != 10) { dp[nmask][i + 1] += dp[mask][i]; dp[nmask][i + 1] %= mod; } } } } } int sum = 0; for (int mask = 0; mask < 16; ++mask) { if (mask != 10) { sum += dp[mask][n]; sum %= mod; } } cout << (pwr + (mod - sum)) % mod << "\n"; } return 0; }