#include<bits/stdc++.h>
using namespace std;
const int mx= 1e5 + 2 ;
using ll= long long ;
int arr[ mx+ 2 ] ;
ll tree[ mx* 4 ] ;
ll lazy[ mx* 4 ] ;
ll gcd( ll a,ll b)
{
while ( b! = 0 )
{
ll rem= a% b;
a= b;
b= rem;
}
return a;
}
void updatelazy( int n,int b,int e)
{
tree[ n] = ( e- b+ 1 ) * lazy[ n] ;
if ( b! = e)
{
lazy[ 2 * n] = lazy[ n] ;
lazy[ 2 * n+ 1 ] = lazy[ n] ;
}
lazy[ n] = - 1 ;
}
void update( int n,int b,int e,int i,int j,int x)
{
if ( lazy[ n] ! = - 1 )
updatelazy( n,b,e) ;
if ( b> e|| e< i|| b> j)
return ;
else if ( i<= b&& e<= j)
{
lazy[ n] = x;
updatelazy( n,b,e) ;
return ;
}
int l= 2 * n;
int r= 2 * n+ 1 ;
int m= ( b+ e) / 2 ;
update( l,b,m,i,j,x) ;
update( r,m+ 1 ,e,i,j,x) ;
tree[ n] = tree[ l] + tree[ r] ;
}
ll query( int n,int b,int e,int i,int j)
{
if ( lazy[ n] ! = - 1 )
updatelazy( n,b,e) ;
if ( b> e|| e< i|| b> j)
return 0 ;
else if ( i<= b&& e<= j)
{
return tree[ n] ;
}
int l= 2 * n;
int r= 2 * n+ 1 ;
int m= ( b+ e) / 2 ;
ll p1= query( l,b,m,i,j) ;
ll p2= query( r,m+ 1 ,e,i,j) ;
tree[ n] = tree[ l] + tree[ r] ;
return p1+ p2;
}
int main( )
{
int n,q,tc,z= 1 ;
scanf ( "%d" ,& tc) ;
while ( tc-- )
{
printf ( "Case %d:\n " ,z++ ) ;
scanf ( "%d %d" ,& n,& q) ;
memset ( tree,0 ,sizeof ( tree) ) ;
memset ( lazy,- 1 ,sizeof ( lazy) ) ;
int i;
while ( q-- )
{
int a,b,c,d;
scanf ( "%d" ,& a) ;
if ( a== 1 )
{
scanf ( "%d %d %d" ,& b,& c,& d) ;
b++ ,c++ ;
update( 1 ,1 ,n,b,c,d) ;
}
else
{
scanf ( "%d %d" ,& b,& c) ;
b++ ,c++ ;
ll t= query( 1 ,1 ,n,b,c) ;
// cout<<"t="<<t<<endl;
ll r= ( c- b+ 1 ) ;
if ( t% r== 0 )
printf ( "%lld\n " ,t/ r) ;
else
{
int g= gcd( t,r) ;
t= t/ g;
r= r/ g;
printf ( "%lld/%lld\n " ,t,r) ;
}
}
// for(i=1;i<=19;i++)
// cout<<tree[i]<<" ";
// cout<<endl;
}
}
return 0 ;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IG14PTFlNSsyOwogdXNpbmcgbGw9bG9uZyBsb25nIDsKaW50IGFycltteCsyXTsKbGwgdHJlZVtteCo0XTsKbGwgbGF6eVtteCo0XTsKbGwgZ2NkKGxsIGEsbGwgYikKewogICAgd2hpbGUoYiE9MCkKICAgIHsKICAgICAgICBsbCByZW09YSViOwogICAgICAgIGE9YjsKICAgICAgICBiPXJlbTsKICAgIH0KICAgIHJldHVybiBhOwp9CnZvaWQgdXBkYXRlbGF6eShpbnQgbixpbnQgYixpbnQgZSkKewogICAgdHJlZVtuXT0oZS1iKzEpKmxhenlbbl07CiAgICBpZihiIT1lKQogICAgewogICAgICAgIGxhenlbMipuXT1sYXp5W25dOwogICAgICAgIGxhenlbMipuKzFdPWxhenlbbl07CiAgICB9CiAgICBsYXp5W25dPS0xOwp9Cgp2b2lkIHVwZGF0ZShpbnQgbixpbnQgYixpbnQgZSxpbnQgaSxpbnQgaixpbnQgeCkKewogICAgaWYobGF6eVtuXSE9LTEpCiAgICAgICAgdXBkYXRlbGF6eShuLGIsZSk7CiAgICBpZihiPmV8fGU8aXx8Yj5qKQogICAgICAgIHJldHVybiA7CiAgICBlbHNlIGlmKGk8PWImJmU8PWopCiAgICB7CiAgICAgICAgbGF6eVtuXT14OwogICAgICAgIHVwZGF0ZWxhenkobixiLGUpOwogICAgICAgIHJldHVybiA7CiAgICB9CiAgICBpbnQgbD0yKm47CiAgICBpbnQgcj0yKm4rMTsKICAgIGludCBtPShiK2UpLzI7CiAgICB1cGRhdGUobCxiLG0saSxqLHgpOwogICAgdXBkYXRlKHIsbSsxLGUsaSxqLHgpOwogICAgdHJlZVtuXT10cmVlW2xdK3RyZWVbcl07Cn0KbGwgcXVlcnkoaW50IG4saW50IGIsaW50IGUsaW50IGksaW50IGopCnsKICAgIGlmKGxhenlbbl0hPS0xKQogICAgICAgIHVwZGF0ZWxhenkobixiLGUpOwogICAgaWYoYj5lfHxlPGl8fGI+aikKICAgICAgICByZXR1cm4gMDsKICAgIGVsc2UgaWYoaTw9YiYmZTw9aikKICAgIHsKICAgICAgICByZXR1cm4gdHJlZVtuXTsKICAgIH0KICAgIGludCBsPTIqbjsKICAgIGludCByPTIqbisxOwogICAgaW50IG09KGIrZSkvMjsKICAgIGxsIHAxPXF1ZXJ5KGwsYixtLGksaik7CiAgICBsbCBwMj1xdWVyeShyLG0rMSxlLGksaik7CiAgICB0cmVlW25dPXRyZWVbbF0rdHJlZVtyXTsKICAgIHJldHVybiBwMStwMjsKCgp9CgppbnQgbWFpbigpCnsKICAgIGludCBuLHEsdGMsej0xOwogICAgc2NhbmYoIiVkIiwmdGMpOwogICAgd2hpbGUodGMtLSkKICAgIHsKICAgICAgICBwcmludGYoIkNhc2UgJWQ6XG4iLHorKyk7CiAgICAgICAgc2NhbmYoIiVkICVkIiwmbiwmcSk7CiAgICAgICAgbWVtc2V0KHRyZWUsMCxzaXplb2YodHJlZSkpOwogICAgICAgIG1lbXNldChsYXp5LC0xLHNpemVvZihsYXp5KSk7CiAgICAgICAgaW50IGk7CiAgICAgICAgd2hpbGUocS0tKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGEsYixjLGQ7CiAgICAgICAgICAgIHNjYW5mKCIlZCIsJmEpOwogICAgICAgICAgICBpZihhPT0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzY2FuZigiJWQgJWQgJWQiLCZiLCZjLCZkKTsKICAgICAgICAgICAgICAgIGIrKyxjKys7CiAgICAgICAgICAgICAgICB1cGRhdGUoMSwxLG4sYixjLGQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNjYW5mKCIlZCAlZCIsJmIsJmMpOwogICAgICAgICAgICAgICAgYisrLGMrKzsKCgogICAgICAgICAgICAgICAgbGwgdD1xdWVyeSgxLDEsbixiLGMpOwogICAgICAgICAgICAgICAvLyBjb3V0PDwidD0iPDx0PDxlbmRsOwogICAgICAgICAgICAgICAgbGwgcj0oYy1iKzEpOwogICAgICAgICAgICAgICAgaWYodCVyPT0wKQogICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIix0L3IpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGludCBnPWdjZCh0LHIpOwogICAgICAgICAgICAgICAgICAgIHQ9dC9nOwogICAgICAgICAgICAgICAgICAgIHI9ci9nOwogICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWxsZC8lbGxkXG4iLHQscik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9Ci8vICAgICAgICAgICAgIGZvcihpPTE7aTw9MTk7aSsrKQovLyAgICAgICAgICAgIGNvdXQ8PHRyZWVbaV08PCIgIjsKLy8gICAgICAgICAgICBjb3V0PDxlbmRsOwoKICAgICAgICB9CgogICAgfQoKICAgIHJldHVybiAwOwp9Cg==