Дерева відрізків — надзвичайно корисна структура даних. Наприклад, використовуючи ліниве просування (lazy propagation), можна ефективно виконувати операції: обчислення суми на відрізку за O(\log n) та оновлення на відрізку за O(\log n).
У цій задачі вам потрібно обчислювати суму квадратів на заданому відрізку, при цьому підтримуючи два типи модифікацій:
додавання заданого значення до всіх елементів на відрізку,
присвоєння заданого значення всім елементам на відрізку.
Перша стрічка містить кількість тестів.
Перша стрічка кожного тесту містить два цілі числа n~(1 \le n \le 10^5) та q~(1 \le q \le 10^5).
Наступна стрічка містить цілих чисел, кожне з яких по модулю не перевищує . Далі йдуть стрічок, кожна з яких описує одну операцію:
— виведіть суму квадратів елементів з індексами від до nd~(1 \le st \le nd \le n) включно,
1~st~nd~x — додати значення до всіх елементів відрізка [st, nd]~(1 \le st \le nd \le n, -1000 \le x \le 1000),
0~st~nd~x — присвоїти значення всім елементам відрізка [st, nd]~(1 \le st \le nd \le n, −1000 \le x \le 1000).
Для кожного тесту в першій стрічці виведіть "Case <caseno>:". Потім для кожної операції типу виведіть значення суми квадратів на відповідному відрізку.
Щоб уникнути переповнення, використовуйте -бітний знаковий цілочисельний тип даних.
Приклад 1