H. Новый год и неоднозначные направления
ограничение по времени на тест
5 секунд
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

У вашего друга есть неизвестный вам ориентированный граф из n вершин.

Пусть f(u, v) будет истиной, если существует ориентированный путь из вершины u в вершину v, и ложью иначе. Для каждой пары различных вершин u, v вам известно, что как минимум одно из следующих утверждений верно:

Здесь AND, OR и XOR обозначают, соответственно, операции И, ИЛИ, исключающее ИЛИ.

Вам дана матрица n на n, показывающая, какое из этих утверждений верно для каждой пары вершин. Ячейка в u-й строке и v-м столбце содержит один символ.

  1. Если выполняется первое утверждение, то в ячейке находится 'A'.
  2. Если выполняется второе утверждение, то в ячейке находится 'O'.
  3. Если выполняется третье утверждение, то в ячейке находится 'X'.
  4. Ячейки на диагонали матрицы содержат только символы '-'.

Обратите внимание, возможно, некоторые пары вершин удовлетворяют сразу нескольким из утверждений, в таком случае, символ в матрице указывает на произвольное из выполняющихся утверждений для этой пары. Гарантируется, что матрица симметрична.

Вы хотите узнать, существует ли ориентированный граф, подходящий под данную матрицу. Если такого графа нет, выведите -1. Иначе выведите минимальное число ребер в графе, удовлетворяющем данным ограничениям.

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

Первая строка содержит одно целое число n (1 ≤ n ≤ 47) — количество вершин.

Следующие n строк содержат по n символов: матрицу с информацией о связности графа в формате, описанном выше.

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

Выведите минимальное число ребер в графе, удовлетворяющем условию, или -1, если такого графа не существует.

Примеры
Входные данные
4
-AAA
A-AA
AA-A
AAA-
Выходные данные
4
Входные данные
3
-XX
X-X
XX-
Выходные данные
2
Примечание

Пример 1: Данный граф является сильносвязным. Можно расположите все четыре вершины в один цикл.

Пример 2: Один из подходящих графов: 3 → 1 → 2. Для каждой пары различных вершин ровно одно из f(u, v), f(v, u) истинно.