#include using namespace std; #define maxn 100010 const int mod= 1e9 + 7; #define maxn 100010 #define mid (L+R)/2 #define mp make_pair #define pii pair #define F first #define S second long long int modpow (int base, int exp){ if (exp==1) return base; if (exp==0) return 1LL; long long int prev= modpow(base, exp/2); prev= prev*prev%mod; if (exp%2) prev= base*prev%mod; return prev; } long long int pre[maxn], a[maxn]; void init(long long int val){ pre[0]= 1LL; for (int i=1; iR) return; if (L==R){ st[N]= a[L]; return; } build (2*N+1, L, mid); build (2*N+2, mid+1, R); st[N]= (st[2*N+1]+1LL*(pre[mid-L+1])*st[2*N+2])%mod; } void upd (int N, int L, int R, int ind, int val){ if (L>R) return; if (L==R){ st[N]= val; return; } if (ind<=mid) upd (2*N+1, L, mid, ind, val); else upd (2*N+2, mid+1, R, ind, val); st[N]= (st[2*N+1]+1LL*(pre[mid-L+1])*st[2*N+2])%mod; } pii query (int N, int L, int R, int S, int E){ if (L>R or L>E or S>R) return mp(0, 0); if (L>=S and R<=E) { // cout<<"ret "<>a[i]; build (0, 1, n); int t, u, v; while (q--) { //cin>>t>>u>>v; scanf("%d %d %d", &t, &u, &v); if (t==1){ u++; a[u]= v; upd (0, 1, n, u, v); } else{ u++; v++; long long int get= query(0, 1, n, u, v).F; get%=mod; if (get<0) get+=mod; if (get==0){ //cout<<"Yes"<