#D7346. RSQ and RUQ

    ID: 6105 Type: Default 1000ms 268MiB

RSQ and RUQ

RSQ and RUQ

Write a program which manipulates a sequence AA = {a0,a1,...,an1a_0, a_1, ..., a_{n-1}} with the following operations:

  • update(s,t,x)update(s, t, x): change as,as+1,...,ata_s, a_{s+1}, ..., a_t to xx.
  • getSum(s,t)getSum(s, t): print the sum of as,as+1,...,ata_s, a_{s+1}, ..., a_t.

Note that the initial values of ai(i=0,1,...,n1)a_i ( i = 0, 1, ..., n-1 ) are 0.

Constraints

  • 1n1000001 ≤ n ≤ 100000
  • 1q1000001 ≤ q ≤ 100000
  • 0st<n0 ≤ s ≤ t < n
  • 1000x1000-1000 ≤ x ≤ 1000

Input

nn qq query1query_1 query2query_2 : queryqquery_q

In the first line, nn (the number of elements in AA) and qq (the number of queries) are given. Then, ii-th query queryiquery_i is given in the following format:

0 ss tt xx

or

1 ss tt

The first digit represents the type of the query. '0' denotes update(s,t,x)update(s, t, x) and '1' denotes find(s,t)find(s, t).

Output

For each getSumgetSum query, print the sum in a line.

Example

Input

6 7 0 1 3 1 0 2 4 -2 1 0 5 1 0 1 0 3 5 3 1 3 4 1 0 5

Output

-5 1 6 8

inputFormat

Input

nn qq query1query_1 query2query_2 : queryqquery_q

In the first line, nn (the number of elements in AA) and qq (the number of queries) are given. Then, ii-th query queryiquery_i is given in the following format:

0 ss tt xx

or

1 ss tt

The first digit represents the type of the query. '0' denotes update(s,t,x)update(s, t, x) and '1' denotes find(s,t)find(s, t).

outputFormat

Output

For each getSumgetSum query, print the sum in a line.

Example

Input

6 7 0 1 3 1 0 2 4 -2 1 0 5 1 0 1 0 3 5 3 1 3 4 1 0 5

Output

-5 1 6 8

样例

6 7
0 1 3 1
0 2 4 -2
1 0 5
1 0 1
0 3 5 3
1 3 4
1 0 5
-5

1 6 8

</p>