#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector VI; typedef pair PII; #define REP(i,s,t) for(int i=(s);i<(t);i++) #define FILL(x,v) memset(x,v,sizeof(x)) const int INF = (int)1E9; #define MAXN 200005 const int mod = 998244353; int n; ll a[MAXN], rAnd[MAXN]; int nzLeft[MAXN], s[MAXN]; void add(int k, int v){ k++; for(;k 0 && (rAnd[i + 1] & leftAnd) > 0) sol = (sol + pre) % mod; if ((leftAnd > 0 && leftRoll == leftAnd) || (leftAnd == 0 && leftRoll > 0)) pre = (pre + 1) % mod; add(n - 1 - i, pre); lastPre = pre; } if (leftAnd == 0) return lastPre; return sol; } int main() { cin >> n; set leftAnd; ll la = -1; VI lastZero(60, -1); REP(i,0,n) { cin >> a[i]; la &= a[i]; leftAnd.insert(la); nzLeft[i] = i; REP(b,0,60) { if ((a[i] & (1LL << b)) == 0) lastZero[b] = i; nzLeft[i] = min(nzLeft[i], lastZero[b] + 1); } } leftAnd.insert(0); rAnd[n] = -1; for (int i = n - 1; i >= 0; i--) rAnd[i] = a[i] & rAnd[i + 1]; int ans = 0; for (auto &v: leftAnd) ans = (ans + solve(v)) % mod; cout << ans << endl; return 0; }