EduBrick

F. Прибавляем, суммируем

1500 мс · 256 МБ · всё или ничего

Есть массив целых чисел длины n=224n = 2^{24}, изначально заполненный нулями. Нужно сперва обработать mm случайных запросов вида «прибавление на отрезке», затем qq случайных запросов вида «сумма на отрезке».

Запросы порождаются генератором:

unsigned int a, b;          // даны во входных данных
unsigned int cur = 0;
unsigned int nextRand() {
    cur = cur * a + b;      // вычисляется с переполнениями
    return cur >> 8;        // число от 0 до 2^24 − 1
}

Запрос первого вида: add = nextRand(), затем l = nextRand(), r = nextRand(), и если l>rl > r, границы меняются местами. Запрос второго вида: то же без add. Сперва порождаются все запросы первого вида, затем второго.

Формат ввода

На первой строке числа mm, qq (1m,q2241 \le m, q \le 2^{24}). На второй строке пара целых чисел aa, bb от 1 до 10910^9.

Формат вывода

Выведите сумму ответов на все запросы второго типа по модулю 2322^{32}.

Примеры

ввод
5 5
13 239
вывод
811747796
Войдите, чтобы отправлять решения.