이진 부호

각 단어에 읽을 수 없는 문자가 많아야 하나 있는 n개의 이진 단어가 주어질 때, 물음표를 0이나 1로 채워 어떤 단어도 다른 단어의 접두사가 되지 않도록 만들 수 있는지 판정한다.

어려움8트라이그리디문자열DFS아직 제출이 없습니다시간 제한2초메모리 제한2048 MB

문제

벤은 이진 접두사 부호를 배웠다. 이진 부호는 0과 1로만 이루어진, 서로 다른 비어 있지 않은 부호어 sis_i nn개의 집합이다. 모든 iji \ne j에 대해 sis_isjs_j의 접두사가 아니고 sjs_jsis_i의 접두사가 아니면, 그 부호를 접두사 부호라고 부른다. 단어 xx가 단어 ww의 접두사라는 말은 xy=wxy = w를 만족하는 단어 yy가 존재한다는 뜻이고, 이때 yy는 비어 있어도 된다. 예를 들어 x=11x = 11w=110w = 110의 접두사이고, x=0100x = 0100w=0100w = 0100의 접두사이다.

벤은 이진 부호 nn줄이 적힌 종이를 찾았다. 종이가 오래되어 읽을 수 없는 문자가 군데군데 있다. 다행히 각 부호어에서 읽을 수 없는 문자는 많아야 한 개다.

nn줄이 이진 접두사 부호를 나타낼 수 있는지 판정하라. 다시 말해, 읽을 수 없는 문자를 각각 0 또는 1로 바꿔서 전체를 접두사 부호로 만들 수 있는지 판정하면 된다.

입력

첫 줄에 부호어의 개수 nn이 주어진다. (1n5×1051 \le n \le 5 \times 10^5)

다음 nn줄에 부호어 기록이 한 줄에 하나씩 주어진다. 각 기록은 비어 있지 않고 0, 1, ?로만 이루어져 있다. ?는 읽을 수 없는 문자를 뜻하며, 한 기록에 많아야 한 개 들어 있다.

기록의 길이를 모두 더한 값은 5×1055 \times 10^5을 넘지 않는다.

출력

모든 ?를 0 또는 1로 바꿔서 접두사 부호를 만들 수 있으면 첫 줄에 YES를 출력하고, 만들 수 없으면 NO를 출력한다. 완성한 부호어는 출력하지 않는다.