/*#pragma GCC optimize("Ofast") #pragma GCC optimize("avx2") #pragma GCC optimize("unroll-loops")*/ #define ll int64_t #include using namespace std; const ll MAXN=1e6+5,mod=1e9+7; ll n,dp[4][3],q,ma; pair qrs[10001]; set s; map m; void solve(){ cin>>n>>q; s.insert(0); s.insert(n+1); for(ll i=1;i<=q;i++){ cin>>qrs[i].first>>qrs[i].second; if(qrs[i].first==1) s.insert(qrs[i].second); else s.erase(qrs[i].second); ll pr=-1; for(auto it : s){ if(pr+1!=it) m[it-pr-1]=0; pr=it; } } dp[0][0]=dp[1][0]=1; dp[2][0]=2; ll t=3; for(auto it : m){ for(t=t;t<=it.first;t++){ dp[t%4][0]=dp[(t-1)%4][0]+dp[(t-1)%4][1]+dp[(t-1)%4][2]+dp[(t-2)%4][0]+dp[(t-2)%4][1]+dp[(t-2)%4][2]; dp[t%4][0]%=mod; dp[t%4][1]=dp[(t-1)%4][2]+dp[(t-3)%4][0]; dp[t%4][1]%=mod; dp[t%4][2]=dp[(t-1)%4][1]+dp[(t-3)%4][0]; dp[t%4][2]%=mod; } m[it.first]=dp[it.first%4][0]+dp[it.first%4][1]+dp[it.first%4][2]; } s.clear(); s.insert(0); s.insert(n+1); ll ans; for(ll i=1;i<=q;i++){ if(qrs[i].first==1) s.insert(qrs[i].second); else s.erase(qrs[i].second); ans=1; ll pr=-1; for(auto it : s){ if(pr+1!=it){ ans*=m[it-pr-1]; ans%=mod; } pr=it; } cout<>t; while(t--) solve(); return 0; }