Олимпиадный тренинг

Задача . F. Ним


Кратко напомним правила игры «Ним». Имеется \(n\) кучек камней, при этом в кучке \(i\) изначально лежит какое-то число камней. Два игрока по очереди выбирают непустую кучку и берут из нее произвольное положительное (строго больше \(0\)) количество камней. Проигрывает тот, кто не может сделать ход.

Дан массив \(a\), состоящий из \(n\) целых чисел. Артем и Руслан решили играть в Ним на подотрезках массива. Каждый из \(q\) раундов определяется отрезком \((l_i, r_i)\), где элементы массива \(a_{l_i}, a_{l_i+1}, \dots, a_{r_i}\) рассматриваются как размеры кучек камней.

До начала игры Руслан может удалить любое количество кучек из выбранного подотрезка. Однако хотя бы одна кучка должна остаться, поэтому в рамках одного раунда он может удалить не более \((r_i - l_i)\) кучек. Разрешается удалить \(0\) кучек. После удаления ребята играют в Ним на всех оставшихся кучках из этого отрезка.

Все раунды независимы: удаления, произведенные в одном раунде, не влияют на исходный массив или другие раунды.

Руслану нужно удалить как можно больше кучек так, чтобы Артем, который будет ходить первым, проиграл.

Для каждого раунда определите:

  1. максимальное количество кучек, которые Руслан может удалить;
  2. количество способов выбрать максимальное количество кучек для удаления.

Два способа считаются различными, если существует такая позиция \(i\), что в одном из способов кучка на позиции \(i\) удаляется, а во втором — нет. Поскольку количество способов может быть большим, выведите его по модулю \(998\,244\,353\).

Если в каком-то раунде Руслан не может сделать так, чтобы Артем проиграл, выведите для этого раунда одно число -1.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)) — размер массива и количество раундов.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 50\)) — элементы исходного массива.

Далее следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i, r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезка, на котором ребята хотят сыграть в игру в \(i\)-м раунде.

Выходные данные

Для каждого раунда:

  • если Руслан может победить, выведите два целых числа — максимальное количество кучек, которые можно удалить, и количество способов удалить максимальное количество кучек, взятое по модулю \(998\,244\,353\);
  • иначе выведите -1.

Примеры
Входные данныеВыходные данные
1 9 5
0 1 2 1 3 4 5 6 0
1 5
2 5
3 5
4 5
1 9
4 1
2 1
0 1
-1
8 2

time 6000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя