В Уральском государственном университете n компьютерных
классов. В субботу, 9 октября, было решено провести в университете сразу n
соревнований по программированию подряд!
Организаторы составили расписание — таблицу размером n × n из
нулей и единиц. j-е число в i-й строке равно единице, если
j-й класс задействован в проведении i-го соревнования, и нулю в противном случае.
В пятницу уборщица Зина напомнила организаторам, что после
соревнований ей нужно прибраться в классах.
Она сказала, что сразу же после завершения первого
соревнования хочет прибраться в первом компьютерном классе, после завершения
второго соревнования — во втором классе, и так далее. Конечно, ни во
время уборки класса, ни после неё в этом классе уже не могут проходить
соревнования.
Председатель жюри согласился с Зиной. За одну операцию
он может выбрать пару различных целых чисел i и j (1 ≤ i, j ≤ n),
поменять в таблице местами i-ю и j-ю строку, после чего сразу же поменять местами i-й и j-й
столбец. До вечера председатель успеет выполнить не более двухсот таких операций.
Сможет ли он получить расписание, устраивающее Зину?
Исходные данные
В первой строке записано целое число n (2 ≤ n ≤ 100).
Далее следует расписание соревнований: n строк по n чисел в каждой.
Результат
Если председатель не успеет исправить расписание, выведите
«−1». В противном случае выведите в первой строке количество операций t, а затем
выведите t строк по два числа в каждой, задающие числа i и j, которые
должен выбрать председатель для очередной операции. Если есть несколько способов исправить расписание, выведите любой из них.
Примеры
исходные данные | результат |
---|
3
0 0 0
1 1 0
1 1 0
| 1
1 3
|
3
1 1 1
1 1 0
1 0 0
| -1 |
Автор задачи: Алексей Самсонов
Источник задачи: XV Открытый командный чемпионат УрГУ по программированию