최근 대규모 스타크래프트 II 리그가 열렸습니다. 이 대회에는 N명의 선수가 참가했고, 모든 선수는 서로 정확히 한 번씩 경기를 치렀습니다(라운드 로빈). 경기 결과는 N×N 크기의 표에 기록되었지만, 표만 보아서는 어떤 선수가 더 강한지 한눈에 알기 어렵습니다. 그래서 대회 주최자인 당신은 선수들의 합리적인 순위를 만들기로 했습니다.
서로 다른 두 선수 x와 y가 있고, x가 y보다 높은 순위에 있다고 합시다. 순서쌍 (x,y)가 합리적이라는 것은 다음 두 조건 중 적어도 하나를 만족한다는 뜻입니다.
모든 선수를 높은 순위부터 낮은 순위까지 나열한 순위가 합리적인 순위라는 것은, x가 y보다 높은 순위인 모든 쌍 (x,y)가 합리적이라는 뜻입니다.
결과 표가 주어질 때, 선수들의 합리적인 순위를 구하세요.
입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 선수의 수를 나타내는 정수 N (1≤N≤1,000)이 주어집니다. 이어지는 N개의 줄은 승패 표 M을 나타냅니다. 각 줄은 문자 '0'과 '1'로만 이루어진 길이 N의 문자열이며, 앞뒤에 공백은 없습니다. i번째 줄의 j번째 문자 Mij는 선수 i가 선수 j를 이겼으면 1, 그렇지 않으면 0입니다. i=j인 모든 경우에 대해 Mij와 Mji 중 정확히 하나만 1입니다(무승부는 없습니다). 또한 모든 i에 대해 Mii=0입니다. 입력의 마지막에는 N=0인 줄이 하나 주어지며, 이 줄은 처리하지 않습니다.
각 테스트 케이스에 대해, 선수들의 합리적인 순위를 가장 높은 순위의 선수부터 가장 낮은 순위의 선수까지 공백으로 구분하여 한 줄에 출력하세요. 합리적인 순위는 여러 개일 수 있으므로, 그중 사전순으로 가장 앞서는 것을 출력합니다(순위를 선수 번호의 수열로 보고 비교합니다). 만약 합리적인 순위가 존재하지 않으면, 대신 (따옴표 없이) impossible을 출력하세요.