#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, type, l, r, x, lazy[4 * N];
long long t[4 * N];
inline void push(int v, int l, int r){
if(lazy[v] == -1){
// so there's no lazy
return;
}
lazy[v + v] = lazy[v + v + 1] = lazy[v];
int mid = (r + l) >> 1;
t[v + v] = 1ll * lazy[v] * (mid - l + 1);
t[v + v + 1] = 1ll * lazy[v] * (r - mid);
// we did all propagations
lazy[v] = -1;
}
void update(int v, int l, int r, int tl, int tr, int val){
if(l > r || l > tr || tl > r){
return;
}
if(tl <= l && r <= tr){
t[v] = 1ll * val * (r - l + 1);
lazy[v] = val;
return;
}
push(v, l, r);
int mid = (r + l) >> 1;
update(v + v, l, mid, tl, tr, val);
update(v + v + 1, mid + 1, r, tl, tr, val);
t[v] = t[v + v] + t[v + v + 1];
}
long long get(int v, int l, int r, int tl, int tr){
if(l > r || l > tr || tl > r){
return 0;
}
if(tl <= l && r <= tr){
return t[v];
}
push(v, l, r);
int mid = (r + l) >> 1;
return get(v + v, l, mid, tl, tr) + get(v + v + 1, mid + 1, r, tl, tr);
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n;
// set lazy -1
memset(lazy,-1,sizeof(lazy));
for(int i = 1; i <= n; i++){
cin >> type >> l >> r;
if(type == 1){
cin >> x;
update(1, 1, n, l, r, x);
}
else{
cout << get(1, 1, n, l, r) << "\n";
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBOID0gMWU1ICsgNTsKCgoKaW50IG4sIHR5cGUsIGwsIHIsIHgsIGxhenlbNCAqIE5dOwpsb25nIGxvbmcgdFs0ICogTl07CgppbmxpbmUgdm9pZCBwdXNoKGludCB2LCBpbnQgbCwgaW50IHIpewoJaWYobGF6eVt2XSA9PSAtMSl7CgkJLy8gc28gdGhlcmUncyBubyBsYXp5CgkJcmV0dXJuOwoJfQoJbGF6eVt2ICsgdl0gPSBsYXp5W3YgKyB2ICsgMV0gPSBsYXp5W3ZdOwoJaW50IG1pZCA9IChyICsgbCkgPj4gMTsKCXRbdiArIHZdID0gMWxsICogbGF6eVt2XSAqIChtaWQgLSBsICsgMSk7Cgl0W3YgKyB2ICsgMV0gPSAxbGwgKiBsYXp5W3ZdICogKHIgLSBtaWQpOwoJLy8gd2UgZGlkIGFsbCBwcm9wYWdhdGlvbnMKCWxhenlbdl0gPSAtMTsKfQoKdm9pZCB1cGRhdGUoaW50IHYsIGludCBsLCBpbnQgciwgaW50IHRsLCBpbnQgdHIsIGludCB2YWwpewoJaWYobCA+IHIgfHwgbCA+IHRyIHx8IHRsID4gcil7CgkJcmV0dXJuOwoJfQoJaWYodGwgPD0gbCAmJiByIDw9IHRyKXsKCQl0W3ZdID0gMWxsICogdmFsICogKHIgLSBsICsgMSk7CgkJbGF6eVt2XSA9IHZhbDsKCQlyZXR1cm47Cgl9CglwdXNoKHYsIGwsIHIpOwoJaW50IG1pZCA9IChyICsgbCkgPj4gMTsKCXVwZGF0ZSh2ICsgdiwgbCwgbWlkLCB0bCwgdHIsIHZhbCk7Cgl1cGRhdGUodiArIHYgKyAxLCBtaWQgKyAxLCByLCB0bCwgdHIsIHZhbCk7Cgl0W3ZdID0gdFt2ICsgdl0gKyB0W3YgKyB2ICsgMV07Cn0KCmxvbmcgbG9uZyBnZXQoaW50IHYsIGludCBsLCBpbnQgciwgaW50IHRsLCBpbnQgdHIpewoJaWYobCA+IHIgfHwgbCA+IHRyIHx8IHRsID4gcil7CgkJcmV0dXJuIDA7Cgl9CglpZih0bCA8PSBsICYmIHIgPD0gdHIpewoJCXJldHVybiB0W3ZdOwoJfQoJcHVzaCh2LCBsLCByKTsKCWludCBtaWQgPSAociArIGwpID4+IDE7CglyZXR1cm4gZ2V0KHYgKyB2LCBsLCBtaWQsIHRsLCB0cikgKyBnZXQodiArIHYgKyAxLCBtaWQgKyAxLCByLCB0bCwgdHIpOwp9CgppbnQgbWFpbigpewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApO2NvdXQudGllKDApOwoJY2luID4+IG47CgkvLyBzZXQgbGF6eSAtMQoJbWVtc2V0KGxhenksLTEsc2l6ZW9mKGxhenkpKTsKCWZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKCQljaW4gPj4gdHlwZSA+PiBsID4+IHI7CgkJaWYodHlwZSA9PSAxKXsKCQkJY2luID4+IHg7CgkJCXVwZGF0ZSgxLCAxLCBuLCBsLCByLCB4KTsKCQl9CgkJZWxzZXsKCQkJY291dCA8PCBnZXQoMSwgMSwgbiwgbCwgcikgPDwgIlxuIjsKCQl9Cgl9Cn0=