Существуют задачи со следующей структурой: вам дана модель, и вы можете выполнять некоторые операции, эти операции надо использовать для достижения определенной цели. Один из способ создания задач — использовать прежнюю модель и прежние операции, но поменять цель задачи.
Давайте попробуем. Как-то раз я придумал следующую сложную задачу для Topcoder SRM 557. Вам даны n целых чисел x1, x2, ..., xn. Разрешено выполнять сколько угодно присвоений следующего вида: xi ^= xj (в изначальной задаче i и j должны были быть различными, но в этой задаче мы позволим i равняться j). Ваша задача — максимизировать сумму всех xi.
Теперь мы просто меняем цель. Дополнительно вам заданы n целых чисел y1, y2, ..., yn. Вы должны добиться того, чтобы x1, x2, ..., xn в точности равнялись y1, y2, ..., yn. Иными словами, для каждого i число xi должно равняться yi.
Выходные данные
Если решения не существует, выведите -1.
Если решение существует, то выведите в первой строке целое число m (0 ≤ m ≤ 1000000) — количество присвоений, которые надо выполнить. Затем выведите m строк, в каждой строке должно быть записано два целых числа i и j (1 ≤ i, j ≤ n), которые обозначают присвоение xi ^= xj.
Если существует несколько решений, разрешается вывести любое. Можно доказать, что при этих ограничениях если существует решение, то всегда существует решение с не более 106 операциями.
Примечание
Присвоение a ^= b обозначает присвоение a = a ^ b, где операция «^» является побитовым XOR двух целых чисел.
Примеры
| № | Входные данные | Выходные данные |
|
1
|
2 3 5 6 0
|
2
1 2
2 2
|
|
2
|
5 0 0 0 0 0 1 2 3 4 5
|
-1
|
|
3
|
3 4 5 6 1 2 3
|
5
3 1
1 2
2 2
2 3
3 1
|
|
4
|
3 1 2 3 4 5 6
|
-1
|