#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include//assert(); #include ///////// #define REP(i, x, n) for(int i = x; i < n; i++) #define rep(i,n) REP(i,0,n) #define P(p) cout<<(p)< ///////// #ifdef getchar_unlocked #define mygc(c) (c)=getchar_unlocked() #else #define mygc(c) (c)=getchar() #endif #ifdef putchar_unlocked #define mypc(c) putchar_unlocked(c) #else #define mypc(c) putchar(c) #endif ///////// typedef long long LL; typedef long double LD; typedef unsigned long long ULL; ///////// using namespace::std; ///////// #ifdef _DEBUG #define DEBUG_BOOL(b) assert(b) #else #define DEBUG_BOOL(b) #endif /////数値読み込み #define ENABLE_READER_ON(T) \ inline void reader(T &x){\ int k;x = 0;bool flag = true;\ while(true){\ mygc(k);\ if( k == '-'){\ flag = false;break;\ }\ if('0' <= k && k <= '9'){\ x = k - '0';break;\ }\ }\ if( flag ){\ while(true){\ mygc(k);\ if( k<'0' || '9' > dp(N+1,vector(3,0)); /* */ //[i]番目がj回目のKで終わる数dp[i][j] j=0でパ dp[1][0] = 0;dp[1][1] = 1;dp[1][2] = 0; for(int i=2;i<=N;++i){ dp[i][0] = (dp[i-1][1] + dp[i-1][2])%mod;//前が1,2回目のK dp[i][1] = dp[i-1][0];//前がP dp[i][2] = dp[i-1][1];//前が一回目のk } writer( ((dp[N][0]+dp[N][1])%mod+dp[N][2])%mod ); } int main(void){ std::cin.tie(0); std::ios::sync_with_stdio(false); std::cout << std::fixed;//小数を10進数表示 //cout << setprecision(16);//小数をいっぱい表示する。16? solve(); return 0; }