암호

시간 제한1초메모리 제한128 MB

요약
n x m 문자 격자에서 정확히 k번(k >= 3) 나타나는 a x b 부분배열을 찾아 모든 좌상단 위치를 행 우선 순서로 출력한다.
난이도

어려움10점 중 8점

유형
해시맵, 문자열, 구현, 정렬
정답자
아직 제출이 없습니다

문제

한 우주 기관이 우주를 탐사하던 중 외계 지성의 흔적을 발견했다. 바로 외계 언어로 쓰인 메시지가 담긴 직사각형 금속판 여러 장이다.

각 금속판에는 nn개의 행과 mm개의 열로 이루어진 2차원 배열이 새겨져 있다. 배열의 각 칸은 출력 가능한 ASCII 문자이며, 그 문자 코드는 32…12732 \dots 127 범위에 속한다. 또한 각 금속판에는 두 정수 aa와 bb가 함께 적혀 있다.

연구진은 각 메시지가 암호로 해독될 수 있음을 알아냈다. 암호란 메시지를 읽는 방법을 알려 주는 열쇠로, 금속판의 배열 속에 숨겨져 있다. 암호는 배열에서 정확히 kk번 나타나는 a×ba \times b 크기의 직사각형 부분 배열이며, k≥3k \ge 3이다. 암호가 나타나는 위치들은 서로 겹칠 수 있다. 그리고 다른 어떤 a×ba \times b 부분 배열도 k−2k - 2번을 초과해 나타나지 않음이 보장되므로, 암호는 유일하게 결정된다.

예를 들어 배열이 8×108 \times 10이고(n=8n = 8, m=10m = 10), 암호의 크기가 3×33 \times 3이며(a=3a = 3, b=3b = 3), 암호가 55번 나타난다면(k=5k = 5), 이 배열의 다른 어떤 3×33 \times 3 부분 배열도 33번을 초과해 나타나지 않는다.

메시지를 나타내는 배열과 금속판에 적힌 두 정수 aa, bb가 주어질 때, 암호와 암호가 나타나는 모든 위치를 찾아라.

입력

첫째 줄에 두 정수 nn과 mm이 공백으로 구분되어 주어진다. 이어지는 nn개의 줄에는 각각 정확히 mm개의 문자로 이루어진 문자열이 주어지며, 그중 ii번째 줄은 배열의 ii번째 행을 나타낸다. 마지막 줄에는 두 정수 aa와 bb가 공백으로 구분되어 주어진다.

출력

첫째 줄에 두 정수 aa와 bb를 공백으로 구분하여 출력한다(입력으로 주어진 값과 정확히 같아야 한다). 이어서 aa개의 줄에 걸쳐 각 줄마다 bb개의 문자로 이루어진 문자열로 암호를 출력한다. 그다음 줄에는 암호가 배열에 나타나는 횟수인 정수 kk를 출력한다. 마지막으로 kk개의 줄에 걸쳐 각 줄마다 두 정수를 출력하는데, 이는 암호가 나타나는 한 위치의 왼쪽 위 모서리의 행과 열(1부터 시작)을 나타낸다. 이 kk개의 쌍은 행이 증가하는 순서로 정렬하여 출력하며, 행이 같으면 열이 증가하는 순서로 정렬한다.

제한

  • 5≤n,m≤10005 \le n, m \le 1000
  • 2≤a≤n2 \le a \le n
  • 2≤b≤m2 \le b \le m
  • 3≤k≤10003 \le k \le 1000
  • 행과 열의 번호는 왼쪽 위 모서리에서 시작하여 11부터 매긴다.

힌트

아래 그림은 한 배열과, 그 배열에서 강조 표시된 암호의 네 번의 등장을 보여 준다.

예제3

  1. 예제 1

    입력
    8 10
    qw.aba..f.
    wq.bab.ff.
    zx.cdc.K.R
    c.ababa.es
    x.babab.Ed
    j.cdcdcaba
    yo.k.k.bab
    opu..l.cdc
    3 3
    
    예상 출력
    3 3
    aba
    bab
    cdc
    4
    1 4
    4 3
    4 5
    6 8
    
  2. 예제 2

    입력
    5 5
    XYkXY
    ZWBZW
    72#V+
    8XYed
    UZW06
    2 2
    
    예상 출력
    2 2
    XY
    ZW
    3
    1 1
    1 4
    4 2
    
  3. 예제 3

    입력
    5 6
    #####8
    #####&
    Dy8%&8
    YtDt!X
    biu<fM
    2 2
    
    예상 출력
    2 2
    ##
    ##
    4
    1 1
    1 2
    1 3
    1 4