/*************
Author - am10
******************/
#include<bits/stdc++.h>
#define sync ios::sync_with_stdio(false)
#define endl '\n'
#define ll long long
#define pb push_back
#define PI acos(-1)
#define pii pair <int,int>
/*
//D-S-U
int root(int v){return par[v] < 0 ? v : (par[v] = root(par[v]));}
void merge(int x,int y){ // x and y are some tools (vertices)
if((x = root(x)) == (y = root(y)) return ;
if(par[y] < par[x]) // balancing the height of the tree
swap(x, y);
par[x] += par[y];
par[y] = x;
}
*/
using namespace std;
ll seg[400005];
bool marker[100005] = {0};
int mover[100005] = {0};
vector <ll> v;
ll query(int node,int start,int end,int l,int r)
{
if(r < start || l > end)
return 0;
else if(l<=start && r >= end)
return seg[node];
else
{
int mid = (start + end)/2;
return query(2*node,start,mid,l,r) + query(2*node+1,mid+1,end,l,r);
}
}
void update(int node,int start,int end,int idx)
{
if(start == end)
{
seg[node] = floor(sqrt(seg[node]));
if(seg[node] == 1)
{
marker[start] = 1;
mover[start] = 1;
//cout << start << endl;
start--;
while(mover[start]!=0&&start>=1)
{
mover[start] = mover[start+1]+1;
//cout << start << " " << mover[start] << endl;
start--;
}
}
return;
}
else
{
int mid = (start+end)/2;
if(idx >= start && idx <= mid)
update(2*node,start,mid,idx);
else
update(2*node+1,mid+1,end,idx);
seg[node] = seg[2*node] + seg[2*node+1];
}
}
void build(int node,int start,int end)
{
if(start == end)
{
seg[node] = v[start];
return;
}
else
{
int mid = (start+end)/2;
build(2*node,start,mid);
build(2*node+1,mid+1,end);
seg[node] = seg[2*node] + seg[2*node+1];
}
}
int main()
{
sync;
int n,cnt = 1;
while(cin >> n)
{
v.clear();
memset(marker,0,sizeof(marker));
memset(mover,0,sizeof(mover));
v.pb(-1);
for(int i=0;i<n;i++)
{
ll a;
cin >> a;
v.pb(a);
if(a == 1)
marker[i+1] = 1;
}
build(1,1,n);
int m;
cout << "Case #" << cnt <<":" << endl;
cnt++;
cin >> m;
for(int i=0;i<m;i++)
{
int x;
cin >> x;
if(x==0)
{
int l,r;
cin >> l >> r;
if(l>r)
swap(l,r);
for(int j=l;j<=r;)
{
if(marker[j] == 1)
{
//cout << j << " " << mover[j] << endl;
j = j+mover[j];
}
else
{
update(1,1,n,j);
j++;
}
}
}
else
{
int l,r;
cin >> l >> r;
if(l>r)
swap(l,r);
ll res = query(1,1,n,l,r);
cout << res << endl;
}
}
}
}
LyoqKioqKioqKioqKioKICAgICAgICBBdXRob3IgLSBhbTEwCiAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiovCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CiAKI2RlZmluZSBzeW5jIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKQojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIFBJIGFjb3MoLTEpCiNkZWZpbmUgcGlpIHBhaXIgPGludCxpbnQ+CgovKgovL0QtUy1VCmludCByb290KGludCB2KXtyZXR1cm4gcGFyW3ZdIDwgMCA/IHYgOiAocGFyW3ZdID0gcm9vdChwYXJbdl0pKTt9CnZvaWQgbWVyZ2UoaW50IHgsaW50IHkpewkvLwl4IGFuZCB5IGFyZSBzb21lIHRvb2xzICh2ZXJ0aWNlcykKICAgICAgICBpZigoeCA9IHJvb3QoeCkpID09ICh5ID0gcm9vdCh5KSkgICAgIHJldHVybiA7CglpZihwYXJbeV0gPCBwYXJbeF0pCS8vIGJhbGFuY2luZyB0aGUgaGVpZ2h0IG9mIHRoZSB0cmVlCgkJc3dhcCh4LCB5KTsKCXBhclt4XSArPSBwYXJbeV07CglwYXJbeV0gPSB4Owp9CiovCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpsbCBzZWdbNDAwMDA1XTsKYm9vbCBtYXJrZXJbMTAwMDA1XSA9IHswfTsKaW50IG1vdmVyWzEwMDAwNV0gPSB7MH07CnZlY3RvciA8bGw+IHY7CgpsbCBxdWVyeShpbnQgbm9kZSxpbnQgc3RhcnQsaW50IGVuZCxpbnQgbCxpbnQgcikKewogICBpZihyIDwgc3RhcnQgfHwgbCA+IGVuZCkKICAgICByZXR1cm4gMDsKICAgZWxzZSBpZihsPD1zdGFydCAmJiByID49IGVuZCkKICAgICByZXR1cm4gc2VnW25vZGVdOwogICBlbHNlCiAgIHsKICAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKS8yOwogICAgIHJldHVybiBxdWVyeSgyKm5vZGUsc3RhcnQsbWlkLGwscikgKyBxdWVyeSgyKm5vZGUrMSxtaWQrMSxlbmQsbCxyKTsKICAgfQogICAKfQoKCnZvaWQgdXBkYXRlKGludCBub2RlLGludCBzdGFydCxpbnQgZW5kLGludCBpZHgpCnsKICBpZihzdGFydCA9PSBlbmQpCiAgewogICAgc2VnW25vZGVdID0gZmxvb3Ioc3FydChzZWdbbm9kZV0pKTsKICAgIGlmKHNlZ1tub2RlXSA9PSAxKQogICAgewogICAgICBtYXJrZXJbc3RhcnRdID0gMTsKICAgICAgbW92ZXJbc3RhcnRdID0gMTsKICAgICAgLy9jb3V0IDw8IHN0YXJ0IDw8IGVuZGw7CiAgICAgIHN0YXJ0LS07CiAgICAgIHdoaWxlKG1vdmVyW3N0YXJ0XSE9MCYmc3RhcnQ+PTEpCiAgICAgIHsKICAgICAgICBtb3ZlcltzdGFydF0gPSBtb3ZlcltzdGFydCsxXSsxOwogICAgICAgIC8vY291dCA8PCBzdGFydCA8PCAgIiAiIDw8IG1vdmVyW3N0YXJ0XSA8PCBlbmRsOwogICAgICAgIHN0YXJ0LS07CiAgICAgIH0KICAgIH0KICAgIHJldHVybjsKICB9CiAgZWxzZQogIHsKICAgIGludCBtaWQgPSAoc3RhcnQrZW5kKS8yOwogICAgaWYoaWR4ID49IHN0YXJ0ICYmIGlkeCA8PSBtaWQpCiAgICAgICB1cGRhdGUoMipub2RlLHN0YXJ0LG1pZCxpZHgpOwogICAgZWxzZQogICAgICAgdXBkYXRlKDIqbm9kZSsxLG1pZCsxLGVuZCxpZHgpOwogICAgc2VnW25vZGVdID0gc2VnWzIqbm9kZV0gKyBzZWdbMipub2RlKzFdOyAgIAogIH0KfQoKdm9pZCBidWlsZChpbnQgbm9kZSxpbnQgc3RhcnQsaW50IGVuZCkKewogIGlmKHN0YXJ0ID09IGVuZCkKICB7CiAgICBzZWdbbm9kZV0gPSB2W3N0YXJ0XTsKICAgIHJldHVybjsKICB9CiAgZWxzZQogIHsKICAgIGludCBtaWQgPSAoc3RhcnQrZW5kKS8yOwogICAgYnVpbGQoMipub2RlLHN0YXJ0LG1pZCk7CiAgICBidWlsZCgyKm5vZGUrMSxtaWQrMSxlbmQpOwogICAgc2VnW25vZGVdID0gc2VnWzIqbm9kZV0gKyBzZWdbMipub2RlKzFdOwogIH0KfQoKaW50IG1haW4oKQp7CiAgc3luYzsKICBpbnQgbixjbnQgPSAxOwogIHdoaWxlKGNpbiA+PiBuKQogIHsgCiAgICB2LmNsZWFyKCk7CiAgICBtZW1zZXQobWFya2VyLDAsc2l6ZW9mKG1hcmtlcikpOwogICAgbWVtc2V0KG1vdmVyLDAsc2l6ZW9mKG1vdmVyKSk7CiAgICB2LnBiKC0xKTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICB7CiAgICAgIGxsIGE7CiAgICAgIGNpbiA+PiBhOwogICAgICB2LnBiKGEpOwogICAgICBpZihhID09IDEpCiAgICAgICAgbWFya2VyW2krMV0gPSAxOwogICAgfQogICAgYnVpbGQoMSwxLG4pOwogICAgCiAgICBpbnQgbTsKICAgIGNvdXQgPDwgIkNhc2UgIyIgPDwgY250IDw8IjoiIDw8IGVuZGw7CiAgICBjbnQrKzsKICAgIGNpbiA+PiBtOwogICAgZm9yKGludCBpPTA7aTxtO2krKykKICAgIHsKICAgICAgaW50IHg7CiAgICAgIGNpbiA+PiB4OwogICAgICBpZih4PT0wKQogICAgICB7CiAgICAgICAgaW50IGwscjsKICAgICAgICBjaW4gPj4gbCA+PiByOwogICAgICAgIGlmKGw+cikKICAgICAgICAgIHN3YXAobCxyKTsKICAgICAgICBmb3IoaW50IGo9bDtqPD1yOykKICAgICAgICB7CiAgICAgICAgICBpZihtYXJrZXJbal0gPT0gMSkKICAgICAgICAgIHsKICAgICAgICAgICAgLy9jb3V0IDw8IGogPDwgIiAiIDw8IG1vdmVyW2pdIDw8IGVuZGw7CiAgICAgICAgICAgIGogPSBqK21vdmVyW2pdOwoKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgdXBkYXRlKDEsMSxuLGopOwogICAgICAgICAgICBqKys7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UKICAgICAgeyAKICAgICAgICAgaW50IGwscjsKICAgICAgICAgY2luID4+IGwgPj4gcjsKICAgICAgICAgaWYobD5yKQogICAgICAgICAgc3dhcChsLHIpOwogICAgICAgICBsbCByZXMgPSBxdWVyeSgxLDEsbixsLHIpOwogICAgICAgICBjb3V0IDw8IHJlcyA8PCBlbmRsOwogICAgCiAgICAgIH0KICAgIH0KICB9IAp9Cgo=