Дана последовательность из n чисел . Требуется привести её к минимальному виду. Последовательность можно лексикографически уменьшить, меняя местами два разрешённых элемента. Количество обменов не ограничено. При этом существуют пары индексов, которые можно менять между собой, а есть такие, которые менять нельзя.
Лексикографическое сравнение двух последовательностей
Последовательность лексикографически меньше последовательности тогда и только тогда, когда существует такое целое число k (1 ≤ k ≤ n), что , , …, и . Иными словами, лексикографическая разница определяется первым индексом k, на котором , при условии, что все предыдущие элементы совпадают.
Имея матрицу разрешённых обменов, необходимо определить, какую лексикографически наименьшую последовательность можно получить из исходной.
Входные данные
В первой строке входных данных содержится одно целое число n (1 ≤ n ≤ 300).
Во второй строке записаны n чисел (1 ≤ ≤ n), разделённых пробелами, которые образуют исходную последовательность. Все числа в ней различны.
В следующих n строках содержится по n символов 0 или 1, определяющих, разрешён ли обмен между элементами под номерами i и j. Если в позиции строки i и столбца j стоит 1, значит элементы i-го и j-го индексов можно поменять местами. Если там 0, то такой обмен не допускается.
Выходные данные
Программа должна вывести лексикографически наименьшую последовательность, которую можно получить из заданной.