만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

결정 크로스윈드

시간 제한5초메모리 제한1024 MB

요약
바람 방향마다 관측된 경계 칸이 주어질 때, 모든 관측과 맞는 결정 구조 중 분자가 가장 적은 것과 가장 많은 것을 출력합니다.
난이도

보통10점 중 5점

유형
구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

당신은 분자 수준에서 결정 구조를 촬영하는 새로운 기법을 개발하는 과학 팀의 일원이다. 이 기법은 아주 가는 바람을 여러 각도에서 결정 표면에 불어서 경계를 찾는다. 경계는 바람에 노출된 분자를 가리킨다. 바람 방향을 바꿔 이 과정을 반복하고, 방향마다 관측된 경계를 기록한다. 팀은 이미 데이터를 모았고, 이제 분석이 시작된다.

주어진 결정에 대해 바람이 불어온 방향들과, 각 바람이 마주친 모든 경계의 위치가 주어진다. 바람 방향이 (wx,wy)(w_x, w_y)일 때, (x,y)(x, y)에 분자가 있고 (x−wx,y−wy)(x - w_x, y - w_y)에는 분자가 없으면 (x,y)(x, y)를 경계라고 한다. 기술적인 이유로 wxw_x와 wyw_y는 서로소가 아닐 수도 있다.

데이터만으로는 결정 구조가 하나로 정해지지 않을 수 있다. 관측과 일치하면서 분자 수가 가장 적은 구조와 가장 많은 구조, 이렇게 서로 다른 두 구조를 찾아야 한다.

예를 들어 첫 번째 샘플 입력에서 주어진 바람들은 분자 아홉 개를 직접 관측하게 한다. 3번째 바람에 대해 (4,2)(4, 2)가 경계가 되지 않으려면 (3,3)(3, 3)에 분자가 있어야 한다. 같은 이유로 (4,4)(4, 4)와 (5,5)(5, 5)에도 분자가 있어야 한다. 이보다 더 많은 분자는 있을 수 없는데, 있으면 일부 바람에서 추가 관측이 생기기 때문이다.

입력

첫 줄에는 정수 dxd_x, dyd_y, kk가 주어진다. dxd_x와 dyd_y(1 ≤ dxd_x, dyd_y ≤ 10^3)는 결정 구조의 최대 크기이고, kk(1 ≤ kk ≤ 10)는 결정에 바람을 분 횟수이다.

이어지는 kk개 줄은 바람 하나씩의 데이터이다. 각 줄은 바람 방향 wxw_x, wyw_y(-dxd_x ≤ wxw_x ≤ dxd_x, -dyd_y ≤ wyw_y ≤ dyd_y, 둘 다 0은 아님)로 시작한다. 다음으로 이 바람이 마주친 경계의 수 bb(0 ≤ bb ≤ 10^5)가 나오고, 줄의 끝에는 관측된 경계를 나열하는 서로 다른 정수 쌍 bb개 xx, yy(1 ≤ xx ≤ dxd_x, 1 ≤ yy ≤ dyd_y)가 이어진다.

입력이 적어도 하나의 결정과 일치하고, 명시된 크기 밖에는 분자가 없다고 가정해도 된다.

출력

두 결정 구조를 빈 줄로 구분해 출력한다. 각 구조는 dyd_y개 행으로 이루어지며, 행마다 dxd_x개의 문자가 있다. 왼쪽 위 모서리가 (1, 1) 위치에 해당한다. 첫 번째는 관측과 일치하면서 분자 수가 가장 적은 구조이고, 두 번째는 분자 수가 가장 많은 구조이다. 분자가 있는 위치는 '#', 없는 위치는 '.'으로 출력한다.

예제2

  1. 예제 1

    입력
    6 6 3
    1 1 3 3 1 1 3 2 2
    0 2 6 3 1 1 3 2 2 6 4 5 3 4 2
    1 -1 4 1 3 2 4 3 5 4 6
    
    예상 출력
    ..#...
    .#.#..
    #.#.#.
    .#.#.#
    ..#.#.
    ...#..
    
    ..#...
    .#.#..
    #.#.#.
    .#.#.#
    ..#.#.
    ...#..
    
  2. 예제 2

    입력
    5 4 2
    1 0 6 1 1 4 1 2 2 5 2 2 3 3 4
    0 -1 7 1 1 4 1 5 2 2 3 3 4 4 4 5 4
    
    예상 출력
    #..#.
    .#..#
    .#...
    ..###
    
    ##.##
    .##.#
    .###.
    ..###