아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

산등성이

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

요약
각 칸보다 낮은 인접 칸의 개수가 주어진 n×m 격자에서 왼쪽 위 칸의 높이가 가질 수 있는 최솟값과 최댓값을 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 비트 연산, 행렬
정답자
아직 제출이 없습니다

문제

Torunn은 n×mn \times m 격자로 나뉜 산악 주거 지역에 살고 있다. 격자의 각 칸에는 택지가 하나씩 있다. Torunn은 가장 왼쪽 위 칸에 살고 있다. 안타깝게도 아주 골치 아픈 세입자가 최근에 이사 와서, Torunn은 집을 팔고 다른 곳으로 이사하기로 했다. 그 전에 먼저 집의 가치가 얼마인지 알아내야 한다.

격자의 각 칸에는 높이가 있다. 모든 높이는 서로 다르므로, 단순하게 생각해서 높이는 1,2,3,⋯ ,n⋅m1, 2, 3, \cdots, n\cdot m이라고 가정한다. 부동산 시장에서는 높은 택지일수록 가치가 높으므로, Torunn은 자신의 택지 높이를 알고 싶어 한다. 그래서 격자의 모든 칸을 돌아다니며 인접한 칸 중 자신보다 낮은 칸이 몇 개인지 셌다. 두 칸이 변을 공유하면 인접한 칸이다. 따라서 주거 지역 가장자리에 있지 않은 칸은 인접한 칸이 4개다.

Torunn이 모은 정보가 주어졌을 때, 왼쪽 위 칸 택지의 높이가 가질 수 있는 최솟값과 최댓값을 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 격자의 행 수와 열 수를 나타내는 두 정수 nn과 mm (1≤n,m≤81 \leq n,m \leq 8)이 주어진다.

다음 nn개 줄에는 각각 길이가 mm인 문자열이 주어진다. 이 격자는 Torunn이 모은 정보이며, 각 숫자는 그 숫자가 적힌 칸보다 높이가 낮은 인접 칸의 개수이다. 모은 정보가 올바르도록 높이 1,2,⋯ ,n⋅m1, 2, \cdots, n\cdot m을 칸에 배정하는 방법이 적어도 하나 있음이 보장된다. 모은 값은 항상 00에서 44 사이라는 점에 유의하라.

출력

왼쪽 위 칸 택지의 높이가 가질 수 있는 최솟값과 최댓값을 공백으로 구분하여 두 정수로 출력하라.

힌트

첫 번째 입력 예시와 일치하는 높이 배정 방법 두 가지이다.

예제2

  1. 예제 1

    입력
    2 3
    122
    101
    
    예상 출력
    3 4
    
  2. 예제 2

    입력
    1 4
    0111
    
    예상 출력
    1 1