#include #include using namespace std; unsigned long long isqrt_aux(int c,unsigned long long n){ if (c == 0){ return 1; } else { int k = (c - 1) / 2; unsigned long long a = isqrt_aux(c / 2, n >> (2*k + 2)); return (a << k) + (n >> (k+2)) / a; } } unsigned long isqrt(unsigned long long n){ if (n == 0){ return 0; } else { unsigned long long a = isqrt_aux(( 63 - __builtin_clzll(n)) / 2, n); return n <= a * a - 1 ? a - 1 : a; } } int main(){ using ll=long long; using lll=__int128_t; using mint=atcoder::modint998244353; auto f=[&](ll n){ ll l=isqrt(n); mint s1=mint(n)*(n+1)/2*l; mint s2=mint(l-1)*l*(l+1)*(l+2)*(2*l+1)/20; return s1-s2; }; ll n; cin>>n; map>> mp; int l=70; for (int k=3;k<=l;k++){ ll now=1; while (true){ lll x=1; for (int i=0;i vec(l,1); vector seg; for (auto p:mp) seg.push_back(p.first); seg.push_back(n+1); int k=seg.size(); mint ans=0; for (int i=0;i