#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define getrp() ({char*mmap();mmap(0l,1l<<25,1,2,0,0ll);}) #define rd_skip() while(*rp++>=48) #define rd() ({int _v=0,_c;while(_c=*rp++-48,_c>=0)_v=_v*10+_c;_v;}) #define rep(v,e) for(long v=0;v>1)%MD; } } int main(){ mkwd(); mkt(); char*rp=getrp(); long n=rd(); rd_skip(); { ulong m=0; a[0]=~0ull; rep3(i,1,n+1){ ulong x=rd(); a[i]=x; if(x<=a[i-1]){ b[i]=x; c[i]=0; m=1; }else{ b[i]=(b[i-1]+x*m)%MD; c[i]=c[i-1]+1; m=aaa(m*2); } } } char*wp=wbuf; while(*rp){ ulong l=rd()-1; ulong r=rd(); unsigned z; if(r-l==c[r]-c[l]){ z=(aas((int)(b[r]-b[l+1]))*t[c[l+1]]+a[l+1])%MD; }else{ z=b[r]; } if(z>=100000000){ *wp++=z/100000000+'0'; z%=100000000; *(int*)wp=wd[z/10000]; wp+=4; *(int*)wp=wd[z%10000]; wp+=4; }else{ long n=0; ulong d=0; while(++n,d=d<<8|0x30|z%10,z/=10); *(ulong*)wp=d; wp+=n; } *wp++='\n'; } write(1,wbuf,wp-wbuf); _exit(0); }