| Codeforces Round 1086 (Div. 2) |
|---|
| Закончено |
Это простая версия задачи. Разница между версиями заключается в том, что в этой версии ограничение на $$$n$$$ ниже. Вы можете совершать взломы только в том случае, если вы решили все версии этой задачи.
Однажды у вас было неориентированное дерево с $$$n$$$ вершинами. Чтобы сделать дерево более интересным, вы решили назначить произвольное направление каждому из $$$n-1$$$ рёбер.
Со временем вы забыли структуру вашего дерева. Однако вы нашли записку, в которой зафиксировано после того, как направления рёбер были назначены, может ли $$$u$$$ достичь $$$v$$$$$$^{\text{∗}}$$$ для всех упорядоченных пар $$$(u,v)$$$, которые удовлетворяют $$$1\le u,v\le n$$$.
Вы хотите выяснить структуру дерева и направление рёбер на основе информации, представленной в записке. Определите, существует ли возможное решение, и постройте одно из них. Если существует несколько решений, вам нужно найти только одно из них.
$$$^{\text{∗}}$$$Для ориентированного графа мы говорим, что $$$x$$$ может достичь $$$y$$$, если и только если существует последовательность вершин $$$u_1,u_2,\ldots,u_k$$$, такая что $$$u_1=x,u_k=y$$$ и для всех $$$i$$$ от $$$2$$$ до $$$k$$$ существует направленное ребро $$$u_{i-1}\rightarrow u_i$$$. В частности, вершина всегда может достичь саму себя.
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 10^4$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
Первая строка каждого набора входных данных содержит целое число $$$n$$$ ($$$2\le n\le 500$$$), обозначающее количество вершин в вашем дереве.
Следующие $$$n$$$ строк содержат строку $$$s_i$$$. $$$s_i$$$ имеет длину $$$n$$$ и состоит только из $$$0$$$ и $$$1$$$. $$$j$$$-й символ $$$s_i$$$ равен $$$1$$$, если и только если $$$i$$$ может достичь $$$j$$$ после направления рёбер.
Гарантируется, что сумма $$$n^3$$$ по всем наборам входных данных не превосходит $$$500^3$$$.
Для каждого набора входных данных выведите $$$\texttt{Yes}$$$, если решение существует, в противном случае выведите $$$\texttt{No}$$$. Если ответ $$$\texttt{Yes}$$$, на следующих строках выведите описание построенных рёбер.
Выведите $$$n-1$$$ строк, обозначающих направленные рёбра. Каждая строка должна содержать два целых числа $$$x$$$ и $$$y$$$, обозначающих, что после направления рёбер существует направленное ребро $$$x\rightarrow y$$$. Если существует несколько решений, выведите любое из них.
Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.
11410001111101000014111101110010011140011011100110001410000110001011114100001101010111151000001011001110001000001510000110001010110111000015100000110100100011101000141100010000110001411100100001001013100111101
Yes2 32 43 1NoNoYes2 34 14 2NoNoYes2 13 13 54 3NoNoYes1 21 34 2Yes2 33 1
В первом наборе входных данных вершины $$$1$$$ и $$$4$$$ могут достигать только самих себя, вершина $$$2$$$ может достигать каждую вершину, вершина $$$3$$$ может достигать только вершины $$$1$$$ и $$$3$$$. Построенные рёбра удовлетворяют этому ограничению.
Для второго набора входных данных можно доказать, что подходящего решения не существует.
| Название |
|---|


