#include <bits/stdc++.h>
typedef long long int ll;
typedef long double ld;
using namespace std;
const ll mod=1e9+7;
const ll inf = (ll)1e17;
const ld eps = 1e-12;
const ld PI = 3.14159265358979323846;
ll mul(ll a, ll b, ll m = mod) { return (ll)(a * b) % m;}
ll add(ll a, ll b, ll m = mod) { a += b; if(a >= m) a -= m; if(a < 0) a += m; return a;}
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
const int N=100005;
pair<ll,ll> tree[4*N];
pair<ll,ll> lazy[4*N];
int n;
vector<ll>arr;
void push(int node,int l,int r){
if(lazy[node].first){
lazy[2*node].second=lazy[2*node+1].second=0;
int mid=(l+r)/2;
tree[2*node].first=(mid-l+1)*lazy[node].first;
tree[2*node].second=(mid-l+1)*lazy[node].first*lazy[node].first;
tree[2*node+1].first=(r-mid)*lazy[node].first;
tree[2*node+1].second=(r-mid)*lazy[node].first*lazy[node].first;
lazy[2*node].first=lazy[node].first;
lazy[2*node+1].first=lazy[node].first;
lazy[node].first=0;
}
if(lazy[node].second){
int mid=(l+r)/2;
tree[2*node].second+=(tree[2*node].first*(2*lazy[node].second))+(mid-l+1)*powmod(lazy[node].second,2);
tree[2*node+1].second+=(tree[2*node].first*(2*lazy[node].second))+(r-mid)*powmod(lazy[node].second,2);
tree[2*node].first+=((mid-l+1)*lazy[node].second);
tree[2*node+1].first+=((r-mid)*lazy[node].second);
lazy[2*node].second+=lazy[node].second;
lazy[2*node+1].second+=lazy[node].second;
lazy[node].second=0;
}
}
void build(int node,int l,int r){
if(l==r){
tree[node].first=arr[l];
tree[node].second=arr[l]*arr[l];
lazy[node].first=lazy[node].second=0;
return;
}
int mid=(l+r)/2;
build(2*node,l,mid);
build(2*node+1,mid+1,r);
tree[node].first=tree[2*node].first+tree[2*node+1].first;
tree[node].second=tree[2*node].second+tree[2*node+1].second;
lazy[node].first=lazy[node].second=0;
}
void update(int node,int l,int r,int l1,int r1,ll val,int type){
if(l1>r1 || l>r1|| l1>r)return ;
if(l1<=l && r<=r1){
if(type==0){
tree[node].first=(r-l+1)*val;
tree[node].second=(r-l+1)*val*val;
lazy[node].second=0;
lazy[node].first=val;
}
else{
tree[node].second+=(tree[node].first*2*val)+((r-l+1)*val*val);
tree[node].first+=((r-l+1)*val);
lazy[node].second+=val;
}
return;
}
push(node,l,r);
int mid=(r+l)/2;
update(2*node,l,mid,l1,r1,val,type);
update(2*node+1,mid+1,r,l1,r1,val,type);
tree[node].first=tree[2*node].first+tree[2*node+1].first;
tree[node].second=tree[2*node].second+tree[2*node+1].second;
}
ll query(int node,int l,int r,int l1,int r1){
if(l1>r1 ||l>r1||l1>r)return ll(0);
if(l1<=l && r<=r1){
return tree[node].second;
}
push(node,l,r);
int mid=(l+r)/2;
return query(2*node,l,mid,l1,r1)+query(2*node+1,mid+1,r,l1,r1);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
for(int z=0;z<t;z++){
int q;
cin>>n>>q;
for(int i=0;i<n;i++){
ll a;
cin>>a;
arr.push_back(a);
}
build(1,0,n-1);
cout<<"case "<<z+1<<":"<<endl;
for(int i=0;i<q;i++){
int type;
cin>>type;
if(type==1){
int l,r;
ll val;
cin>>l>>r>>val;
l--;
r--;
update(1,0,n-1,l,r,val,1);
}
else if(type==0){
int a,b;
cin>>a>>b;
ll val;
cin>>val;
a--;
b--;
update(1,0,n-1,a,b,val,0);
}
else{
int l,r;
cin>>l>>r;
l--,r--;
cout<<query(1,0,n-1,l,r)<<endl;
}
}
arr.clear();
for(int i=0;i<=4*N;i++){
tree[i].first=tree[i].second=0;
lazy[i].first=lazy[i].second=0;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbGwgbW9kPTFlOSs3Owpjb25zdCBsbCBpbmYgPSAobGwpMWUxNzsKY29uc3QgbGQgZXBzID0gMWUtMTI7CmNvbnN0IGxkIFBJID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKbGwgbXVsKGxsIGEsIGxsIGIsIGxsIG0gPSBtb2QpIHsgcmV0dXJuIChsbCkoYSAqIGIpICUgbTt9CmxsIGFkZChsbCBhLCBsbCBiLCBsbCBtID0gbW9kKSB7IGEgKz0gYjsgaWYoYSA+PSBtKSBhIC09IG07IGlmKGEgPCAwKSBhICs9IG07IHJldHVybiBhO30KbGwgcG93bW9kKGxsIGEsbGwgYikge2xsIHJlcz0xO2ElPW1vZDsgYXNzZXJ0KGI+PTApOyBmb3IoO2I7Yj4+PTEpe2lmKGImMSlyZXM9cmVzKmElbW9kO2E9YSphJW1vZDt9cmV0dXJuIHJlczt9CmxsIGdjZChsbCBhLGxsIGIpIHsgcmV0dXJuIGI/Z2NkKGIsYSViKTphO30KCmNvbnN0IGludCBOPTEwMDAwNTsKcGFpcjxsbCxsbD4gdHJlZVs0Kk5dOwpwYWlyPGxsLGxsPiBsYXp5WzQqTl07CmludCBuOwp2ZWN0b3I8bGw+YXJyOwoKdm9pZCBwdXNoKGludCBub2RlLGludCBsLGludCByKXsKICAgIGlmKGxhenlbbm9kZV0uZmlyc3QpewogICAgICAgIGxhenlbMipub2RlXS5zZWNvbmQ9bGF6eVsyKm5vZGUrMV0uc2Vjb25kPTA7CiAgICAgICAgaW50IG1pZD0obCtyKS8yOwogICAgICAgIHRyZWVbMipub2RlXS5maXJzdD0obWlkLWwrMSkqbGF6eVtub2RlXS5maXJzdDsKICAgICAgICB0cmVlWzIqbm9kZV0uc2Vjb25kPShtaWQtbCsxKSpsYXp5W25vZGVdLmZpcnN0Kmxhenlbbm9kZV0uZmlyc3Q7CiAgICAgICAgdHJlZVsyKm5vZGUrMV0uZmlyc3Q9KHItbWlkKSpsYXp5W25vZGVdLmZpcnN0OwogICAgICAgIHRyZWVbMipub2RlKzFdLnNlY29uZD0oci1taWQpKmxhenlbbm9kZV0uZmlyc3QqbGF6eVtub2RlXS5maXJzdDsKICAgICAgICBsYXp5WzIqbm9kZV0uZmlyc3Q9bGF6eVtub2RlXS5maXJzdDsKICAgICAgICBsYXp5WzIqbm9kZSsxXS5maXJzdD1sYXp5W25vZGVdLmZpcnN0OwogICAgICAgIGxhenlbbm9kZV0uZmlyc3Q9MDsKICAgIH0KICAgIGlmKGxhenlbbm9kZV0uc2Vjb25kKXsKICAgICAgICBpbnQgbWlkPShsK3IpLzI7CiAgICAgICAgdHJlZVsyKm5vZGVdLnNlY29uZCs9KHRyZWVbMipub2RlXS5maXJzdCooMipsYXp5W25vZGVdLnNlY29uZCkpKyhtaWQtbCsxKSpwb3dtb2QobGF6eVtub2RlXS5zZWNvbmQsMik7CiAgICAgICAgdHJlZVsyKm5vZGUrMV0uc2Vjb25kKz0odHJlZVsyKm5vZGVdLmZpcnN0KigyKmxhenlbbm9kZV0uc2Vjb25kKSkrKHItbWlkKSpwb3dtb2QobGF6eVtub2RlXS5zZWNvbmQsMik7CiAgICAgICAgdHJlZVsyKm5vZGVdLmZpcnN0Kz0oKG1pZC1sKzEpKmxhenlbbm9kZV0uc2Vjb25kKTsKICAgICAgICB0cmVlWzIqbm9kZSsxXS5maXJzdCs9KChyLW1pZCkqbGF6eVtub2RlXS5zZWNvbmQpOwogICAgICAgIGxhenlbMipub2RlXS5zZWNvbmQrPWxhenlbbm9kZV0uc2Vjb25kOwogICAgICAgIGxhenlbMipub2RlKzFdLnNlY29uZCs9bGF6eVtub2RlXS5zZWNvbmQ7CiAgICAgICAgbGF6eVtub2RlXS5zZWNvbmQ9MDsKICAgIH0KfQoKCnZvaWQgYnVpbGQoaW50IG5vZGUsaW50IGwsaW50IHIpewogICAgaWYobD09cil7CiAgICAgICAgdHJlZVtub2RlXS5maXJzdD1hcnJbbF07CiAgICAgICAgdHJlZVtub2RlXS5zZWNvbmQ9YXJyW2xdKmFycltsXTsKICAgICAgICBsYXp5W25vZGVdLmZpcnN0PWxhenlbbm9kZV0uc2Vjb25kPTA7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZD0obCtyKS8yOwogICAgYnVpbGQoMipub2RlLGwsbWlkKTsKICAgIGJ1aWxkKDIqbm9kZSsxLG1pZCsxLHIpOwogICAgdHJlZVtub2RlXS5maXJzdD10cmVlWzIqbm9kZV0uZmlyc3QrdHJlZVsyKm5vZGUrMV0uZmlyc3Q7CiAgICB0cmVlW25vZGVdLnNlY29uZD10cmVlWzIqbm9kZV0uc2Vjb25kK3RyZWVbMipub2RlKzFdLnNlY29uZDsKICAgIGxhenlbbm9kZV0uZmlyc3Q9bGF6eVtub2RlXS5zZWNvbmQ9MDsKICAgIH0KCgp2b2lkIHVwZGF0ZShpbnQgbm9kZSxpbnQgbCxpbnQgcixpbnQgbDEsaW50IHIxLGxsIHZhbCxpbnQgdHlwZSl7CiAgICBpZihsMT5yMSB8fCBsPnIxfHwgbDE+cilyZXR1cm4gOwogICAgaWYobDE8PWwgJiYgcjw9cjEpewogICAgICAgIGlmKHR5cGU9PTApewogICAgICAgICAgICB0cmVlW25vZGVdLmZpcnN0PShyLWwrMSkqdmFsOwogICAgICAgICAgICB0cmVlW25vZGVdLnNlY29uZD0oci1sKzEpKnZhbCp2YWw7CiAgICAgICAgICAgIGxhenlbbm9kZV0uc2Vjb25kPTA7CiAgICAgICAgICAgIGxhenlbbm9kZV0uZmlyc3Q9dmFsOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICB0cmVlW25vZGVdLnNlY29uZCs9KHRyZWVbbm9kZV0uZmlyc3QqMip2YWwpKygoci1sKzEpKnZhbCp2YWwpOwogICAgICAgICAgICB0cmVlW25vZGVdLmZpcnN0Kz0oKHItbCsxKSp2YWwpOwogICAgICAgICAgICBsYXp5W25vZGVdLnNlY29uZCs9dmFsOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CiAgICBwdXNoKG5vZGUsbCxyKTsKICAgIGludCBtaWQ9KHIrbCkvMjsKICAgIHVwZGF0ZSgyKm5vZGUsbCxtaWQsbDEscjEsdmFsLHR5cGUpOwogICAgdXBkYXRlKDIqbm9kZSsxLG1pZCsxLHIsbDEscjEsdmFsLHR5cGUpOwogICAgdHJlZVtub2RlXS5maXJzdD10cmVlWzIqbm9kZV0uZmlyc3QrdHJlZVsyKm5vZGUrMV0uZmlyc3Q7CiAgICB0cmVlW25vZGVdLnNlY29uZD10cmVlWzIqbm9kZV0uc2Vjb25kK3RyZWVbMipub2RlKzFdLnNlY29uZDsKICAgIH0KCgpsbCBxdWVyeShpbnQgbm9kZSxpbnQgbCxpbnQgcixpbnQgbDEsaW50IHIxKXsKICAgIGlmKGwxPnIxIHx8bD5yMXx8bDE+cilyZXR1cm4gbGwoMCk7CiAgICBpZihsMTw9bCAmJiByPD1yMSl7CiAgICAgICAgcmV0dXJuIHRyZWVbbm9kZV0uc2Vjb25kOwogICAgfQogICAgcHVzaChub2RlLGwscik7CiAgICBpbnQgbWlkPShsK3IpLzI7CiAgICByZXR1cm4gcXVlcnkoMipub2RlLGwsbWlkLGwxLHIxKStxdWVyeSgyKm5vZGUrMSxtaWQrMSxyLGwxLHIxKTsKICAgIH0KCgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgaW50IHQ7CiAgICBjaW4+PnQ7CiAgICBmb3IoaW50IHo9MDt6PHQ7eisrKXsKICAgICAgICBpbnQgcTsKICAgICAgICBjaW4+Pm4+PnE7CiAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgICAgIGxsIGE7CiAgICAgICAgICAgIGNpbj4+YTsKICAgICAgICAgICAgYXJyLnB1c2hfYmFjayhhKTsKICAgICAgICB9CiAgICAgICAgYnVpbGQoMSwwLG4tMSk7CiAgICAgICAgY291dDw8ImNhc2UgIjw8eisxPDwiOiI8PGVuZGw7CiAgICAgICAgZm9yKGludCBpPTA7aTxxO2krKyl7CiAgICAgICAgICAgIGludCB0eXBlOwogICAgICAgICAgICBjaW4+PnR5cGU7CiAgICAgICAgICAgIGlmKHR5cGU9PTEpewogICAgICAgICAgICAgICAgaW50IGwscjsKICAgICAgICAgICAgICAgIGxsIHZhbDsKICAgICAgICAgICAgICAgIGNpbj4+bD4+cj4+dmFsOwogICAgICAgICAgICAgICAgbC0tOwogICAgICAgICAgICAgICAgci0tOwogICAgICAgICAgICAgICAgdXBkYXRlKDEsMCxuLTEsbCxyLHZhbCwxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHR5cGU9PTApewogICAgICAgICAgICAgICAgaW50IGEsYjsKICAgICAgICAgICAgICAgIGNpbj4+YT4+YjsKICAgICAgICAgICAgICAgIGxsIHZhbDsKICAgICAgICAgICAgICAgIGNpbj4+dmFsOwogICAgICAgICAgICAgICAgYS0tOwogICAgICAgICAgICAgICAgYi0tOwogICAgICAgICAgICAgICAgdXBkYXRlKDEsMCxuLTEsYSxiLHZhbCwwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgaW50IGwscjsKICAgICAgICAgICAgICAgIGNpbj4+bD4+cjsKICAgICAgICAgICAgICAgIGwtLSxyLS07CiAgICAgICAgICAgICAgICBjb3V0PDxxdWVyeSgxLDAsbi0xLGwscik8PGVuZGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXJyLmNsZWFyKCk7CiAgICAgICAgZm9yKGludCBpPTA7aTw9NCpOO2krKyl7CiAgICAgICAgICAgIHRyZWVbaV0uZmlyc3Q9dHJlZVtpXS5zZWNvbmQ9MDsKICAgICAgICAgICAgbGF6eVtpXS5maXJzdD1sYXp5W2ldLnNlY29uZD0wOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwogICAgfQo=