#include using namespace std; typedef pair ii; typedef long long ll; const int mod = 1000000007; const int inv2 = 500000004; const int Maxn = 200005; const int Maxm = 1000005; int n; int A[Maxn]; int S[Maxn], S2[Maxn]; vector inds[Maxm]; int cur; set G; int got[200][200]; vector seq; int F(int len) { return ll(len) * (len + 1) % mod * inv2 % mod; } int GetS2(int x) { return x <0? 0:S2[x]; } int Solve(int a, int b) { //cout <<"Solve(" <::iterator it = G.begin(); if (it != G.end() && it->first == 1) return Solve(a, it->second - it->first + 1); return Solve(a, 0); } int solveBegin(int b) { set ::iterator it = G.end(); if (it != G.begin()) { it--; if (it->second == n) return Solve(it->second - it->first +1, b); else return Solve(0, b); } return Solve(0, b); } void Insert(int x) { int lef = x, rig = x; set ::iterator it = G.lower_bound(ii(x + 1, 0)), it2; it2 = it; if (it != G.begin()) { it--; if (it->second == x - 1) { lef = it->first; if (it->first == 1) cur = (cur - solveBegin(it->second - it->first + 1) + mod) % mod; else cur = (cur - S[it->second - it->first + 1] + mod) % mod; G.erase(it); } } else if (x == 1) cur = (cur - solveBegin(0) +mod) % mod; //cout <<"befcur = " <first == x + 1) { rig = it2->second; if (it2->second == n) cur = (cur - solveEnd(it2->second - it2->first +1) +mod) % mod; else cur = (cur - S[it2->second - it2->first + 1] + mod) % mod; G.erase(it2); } else if (x == n) cur = (cur - solveEnd(0) + mod) % mod; //cout << "curcur = " <= 2) S2[i] = (S2[i] +S2[i - 2]) % mod; } int tot = 0; int lst = 0; for (int i = 0; i < mx; i++) { for (int j = 0; j < inds[i].size(); j++) { Insert(inds[i][j]); // printf("%d - %d", inds[i][j], cur); cout <