많은 요리에서는 어떤 작업을 다른 작업보다 먼저 끝내야 합니다. 각 작업이 의존하는 다른 작업들의 목록이 주어지면, 의존 관계를 만족하는 작업 순서를 정하는 것은 비교적 간단하며, 이는 위상 정렬(topological sort)이라는 알고리즘으로 해결할 수 있습니다.
하지만 현실은 그렇게 간단하지 않을 때가 있습니다. 예를 들어 피자 도우를 만드는 다음 레시피를 봅시다.
이 경우 작업 1과 2는 첫 1분이 지난 뒤에 시작할 수 있습니다(레시피를 읽고 계획을 세우는 데 항상 첫 1분을 씁니다). 작업 3은 아무리 빨라도 8분에, 작업 4는 시작 후 18분에 시작할 수 있으며, 이런 식으로 이어집니다. 이 레시피는 비교적 단순하지만, 어떤 작업에 의존하는 작업이 많아지면 일정 짜기가 감당하기 어려워집니다. 때로는 레시피를 실제로 실행하는 것이 불가능할 수도 있습니다. 예를 들어 다음과 같은 추상적인 레시피를 생각해 봅시다.
이 문제에서는 여러 개의 작업이 주어집니다. 일부 작업은 시작 시각을 기준으로 서로 관계를 가집니다. 모든 제약을 만족하도록 각 작업에 시작 시각을 배정하거나, 그것이 불가능하면 불가능하다고 보고해야 합니다.
입력은 여러 개의 테스트 케이스로 이루어집니다. 각 케이스의 첫 줄에는 작업의 수 $n$ ($1 \le n \le 100$)이 주어집니다. 다음 줄에는 제약의 수를 나타내는 음이 아닌 정수 $m$이 주어집니다. 이어지는 $m$개의 줄에는 각각 하나의 제약이 주어지며, 제약은 다음 두 형태 중 하나입니다.
task i starts at least A minutes later than task j
task i starts within A minutes of the starting time of task j
여기서 $i$와 $j$는 서로 다른 두 작업의 번호이고($1 \le i, j \le n$), $A$는 음이 아닌 정수입니다($A \le 150$). 첫 번째 형태는 작업 $i$가 작업 $j$의 시작 시각보다 적어도 $A$분 늦게 시작해야 함을 뜻합니다. 두 번째 형태는 작업 $i$가 작업 $j$보다 일찍 시작하지 않으면서, 작업 $j$의 시작 시각으로부터 $A$분 이내에 시작해야 함을 뜻합니다. 같은 작업 쌍에 대해 여러 제약이 주어질 수 있습니다. '적어도'와 '이내'는 경곗값을 포함합니다(예를 들어 작업 1이 1분에, 작업 2가 4분에 시작하면 작업 2는 작업 1보다 적어도 3분 늦게 시작하며, 작업 1의 시작 시각으로부터 3분 이내에 시작합니다).
입력은 $n = 0$인 줄로 끝납니다.
각 테스트 케이스마다 작업 1부터 작업 $n$까지의 시작 시각을 공백 하나로 구분하여 한 줄에 출력합니다. 각 시작 시각은 그 작업이 시작하는 분을 나타내며, 양의 정수이고 $1000000$보다 작아야 합니다.
유효한 일정이 여러 개일 수 있으므로, 이 문제에서는 가장 이른 일정을 출력합니다. 즉, 모든 제약을 만족하면서 각 작업의 시작 시각을 (동시에) 가능한 한 작게 만드는 일정을 출력하며, 가장 이른 시작 시각은 1분입니다. 유효한 일정들은 좌표별 최솟값을 취해도 다시 유효하므로 이렇게 정의되는 가장 이른 일정은 항상 유일하게 정해집니다. 유효한 일정이 존재하지 않으면 대신 한 줄에 Impossible.을 출력합니다.