D. Построение турнира
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Иван читает книгу про турниры. Ваня уже знает, что турнир это ориентированный граф с ровно одним ребром между каждой парой вершин. Так же он знает, что очки вершины это число ребер, исходящих из нее.

Кроме определений, Иван узнал про критерий Ландау: существует турнир с последовательностью очков d1 ≤ d2 ≤ ... ≤ dn тогда и только тогда, когда для всех 1 ≤ k < n и .

Теперь Ваня хочет решить следующую задачу: пусть есть множество чисел S = {a1, a2, ..., am}, существует ли турнир с данным множеством очков? Иными словами, существует ли турнир с последовательностью очков d1, d2, ..., dn, такой, что если убрать повторяющиеся числа, то получим множество {a1, a2, ..., am}?

Если ответ существует, найдите турним с минимальным числом вершин.

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

Первая строка содержит число m (1 ≤ m ≤ 31).

Следующая строка содержит m различных чисел a1, a2, ..., am (0 ≤ ai ≤ 30) — элементы множества S. Гарантируется, что элементы множества различны.

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

Если ответа не существует, выведите одну строку «=(» (без кавычек).

Иначе, выведите число n — число вершин в ответе.

После этого выведите n строк из n символов каждая — матрицу смежности турнира. j-й элемент i-й строки должен быть равен 1, если в турнире ребро между вершинами i и j направлено в сторону вершины j, и 0 иначе. Главная диагональ должна содержать только нули.

Примеры
Входные данные
2
1 2
Выходные данные
4
0011
1001
0100
0010
Входные данные
2
0 3
Выходные данные
6
000111
100011
110001
011001
001101
000000