#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define lson(p) (p<<1)
#define rson(p) ((p<<1)|1)
#define md(l,r) ((l+r)>>1)
const int N=200005;
int n,m;
int a[N];
struct tree{
int l,r;
int sum;
int maxn;
}t[4*N];
void pushup(int p){
t[p].sum=t[lson(p)].sum+t[rson(p)].sum;
t[p].maxn=max(t[lson(p)].maxn,t[rson(p)].maxn);
}
void build(int p,int l,int r){
t[p].l=l,t[p].r=r;
if(l==r){
t[p].sum=t[p].maxn=a[l];
return ;
}
int mid=md(l,r);
build(lson(p),l,mid);
build(rson(p),mid+1,r);
pushup(p);
}
void add(int p,int l,int r){
if(t[p].l==t[p].r){
t[p].sum=(int)(sqrt(t[p].sum));
t[p].maxn=(int)(sqrt(t[p].maxn));
return ;
}
int mid=(t[p].l,t[p].r);
if(l<=mid&&t[lson(p)].maxn>1)add(lson(p),l,r);
if(mid<r&&t[rson(p)].maxn>1)add(rson(p),l,r);
pushup(p);
}
int query(int p,int l,int r){
if(l<=t[p].l&&t[p].r<=r)return t[p].sum;
int mid=md(t[p].l,t[p].r);
int ans=0;
if(l<=mid)ans+=query(lson(p),l,r);
if(r>mid)ans+=query(rson(p),l,r);
return ans;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
cin>>m;
while(m--){
int op,l,r;cin>>op>>l>>r;
if(l>r)swap(l,r);
if(op==0){
add(1,l,r);
}else{
cout<<query(1,l,r)<<endl;
}
for(int i=1;i<=n;i++)cout<<query(1,i,i)<<' ';
cout<<endl;
}
return 0;
}
rt,应该是add函数锅了,但是调不出来qwq