#include<bits/stdc++.h>
#define N 100005
#define ll long long
using namespace std;
ll a[N];
struct node{
ll sum;
ll mx;
}tree[N<<2];
int ls(int p){
return p<<1;
}
int rs(int p){
return p<<1|1;
}
void push_up(int p){
tree[p].sum=tree[ls(p)].sum+tree[rs(p)].sum;
tree[p].mx=max(tree[ls(p)].mx,tree[rs(p)].mx);
return;
}
void build(int p,int pl,int pr){
if(pl==pr){
tree[p].sum=a[pl];
tree[p].mx=a[pl];
return;
}
int mid=(pl+pr)>>1;
build(ls(p),pl,mid);
build(rs(p),mid+1,pr);
push_up(p);
return;
}
void update(int p,int L,int R,int pl,int pr){
if(tree[p].mx<=1){
return;
}
if(pl==pr){
tree[p].sum=tree[p].mx=sqrtl(tree[p].sum);
return;
}
int mid=(pl+pr)>>1;
if(L<=mid){
update(ls(p),L,R,pl,mid);
}
if(R>mid){
update(rs(p),L,R,mid+1,pr);
}
push_up(p);
}
ll query(int p,int L,int R,int pl,int pr){
if(L<=pl&&pr<=R){
return tree[p].sum;
}
int mid=(pl+pr)>>1;
ll res=0;
if(L<=mid){
res+=query(ls(p),L,R,pl,mid);
}
if(R>mid){
res+=query(rs(p),L,R,mid+1,pr);
}
return res;
}
signed main(){
int cnt=0;
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
while(cin>>n){
cnt++;
cout<<"Case #"<<cnt<<":"<<endl;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
int q;
cin>>q;
while(q--){
int op,x,y;
cin>>op>>x>>y;
if(x>y)swap(x,y);
if(op==1){
cout<<query(1,x,y,1,n)<<endl;
}else if(op==0){
update(1,x,y,1,n);
}
}
cout<<endl;
}
return 0;
}