결정 크로스윈드
시간 제한5초메모리 제한1024 MB
바람 방향마다 관측된 경계 칸이 주어질 때, 모든 관측과 맞는 결정 구조 중 분자가 가장 적은 것과 가장 많은 것을 출력합니다.
문제
당신은 분자 수준에서 결정 구조를 촬영하는 새로운 기법을 개발하는 과학 팀의 일원이다. 이 기법은 아주 가는 바람을 여러 각도에서 결정 표면에 불어서 경계를 찾는다. 경계는 바람에 노출된 분자를 가리킨다. 바람 방향을 바꿔 이 과정을 반복하고, 방향마다 관측된 경계를 기록한다. 팀은 이미 데이터를 모았고, 이제 분석이 시작된다.
주어진 결정에 대해 바람이 불어온 방향들과, 각 바람이 마주친 모든 경계의 위치가 주어진다. 바람 방향이 일 때, 에 분자가 있고 에는 분자가 없으면 를 경계라고 한다. 기술적인 이유로 와 는 서로소가 아닐 수도 있다.
데이터만으로는 결정 구조가 하나로 정해지지 않을 수 있다. 관측과 일치하면서 분자 수가 가장 적은 구조와 가장 많은 구조, 이렇게 서로 다른 두 구조를 찾아야 한다.
예를 들어 첫 번째 샘플 입력에서 주어진 바람들은 분자 아홉 개를 직접 관측하게 한다. 3번째 바람에 대해 가 경계가 되지 않으려면 에 분자가 있어야 한다. 같은 이유로 와 에도 분자가 있어야 한다. 이보다 더 많은 분자는 있을 수 없는데, 있으면 일부 바람에서 추가 관측이 생기기 때문이다.
입력
첫 줄에는 정수 , , 가 주어진다. 와 (1 ≤ , ≤ 10^3)는 결정 구조의 최대 크기이고, (1 ≤ ≤ 10)는 결정에 바람을 분 횟수이다.
이어지는 개 줄은 바람 하나씩의 데이터이다. 각 줄은 바람 방향 , (- ≤ ≤ , - ≤ ≤ , 둘 다 0은 아님)로 시작한다. 다음으로 이 바람이 마주친 경계의 수 (0 ≤ ≤ 10^5)가 나오고, 줄의 끝에는 관측된 경계를 나열하는 서로 다른 정수 쌍 개 , (1 ≤ ≤ , 1 ≤ ≤ )가 이어진다.
입력이 적어도 하나의 결정과 일치하고, 명시된 크기 밖에는 분자가 없다고 가정해도 된다.
출력
두 결정 구조를 빈 줄로 구분해 출력한다. 각 구조는 개 행으로 이루어지며, 행마다 개의 문자가 있다. 왼쪽 위 모서리가 (1, 1) 위치에 해당한다. 첫 번째는 관측과 일치하면서 분자 수가 가장 적은 구조이고, 두 번째는 분자 수가 가장 많은 구조이다. 분자가 있는 위치는 '#', 없는 위치는 '.'으로 출력한다.