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

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

사각형 수식 (큰 입력)

시간 제한15초메모리 제한512 MB

요약
숫자와 부호가 번갈아 놓인 W x W 격자에서 각 목표값을 만드는 가장 짧고 사전순으로 가장 앞선 경로 수식을 찾는다.
난이도

보통10점 중 7점

유형
BFS, 그래프, 구현, 최단 경로
정답자
아직 제출이 없습니다

문제

한 변에 WW개의 칸이 있는 정사각형 판을 생각한다. 칸은 모두 W2W^2개다. 각 칸에는 다음 세 가지 중 하나를 적는다.

  • 0부터 9까지의 숫자 하나
  • 덧셈 기호 +
  • 뺄셈 기호 -

여기에 조건을 하나 더 붙인다. 가로나 세로로 맞닿은 두 칸에 숫자가 함께 오지 않고, 가로나 세로로 맞닿은 두 칸에 연산 기호가 함께 오지 않는다. 이 조건을 지킨 판을 산술 사각형이라고 부른다.

산술 사각형 하나가 주어지면 다음 퍼즐을 풀 수 있다. 숫자 칸 하나에서 출발해 한 번에 한 칸씩 가로나 세로로 움직이고, 숫자 칸에서 멈춘다. 지나간 칸의 문자를 순서대로 이어 쓰면 수식이 되고, 이 수식을 왼쪽에서 오른쪽으로 계산하면 값 하나가 나온다. 이 퍼즐의 이름이 사각형 수식이다.

아래는 W=3W = 3인 산술 사각형이다.

2+3
+4-
1+0

왼쪽 위의 2에서 출발해 오른쪽으로 한 칸, 아래로 한 칸 움직이면 2+4가 되고 값은 6이다. 여기서 오른쪽으로 한 칸, 위로 한 칸 더 움직이면 2+4-3이 되고 값은 3이다.

한 칸은 몇 번이든 다시 지날 수 있다. 어떤 칸에서 이웃 칸으로 갔다가 곧바로 원래 칸으로 돌아오는 이동도 허용한다. 한 번도 움직이지 않고 숫자 칸 하나로만 이루어진 수식도 유효하다.

산술 사각형과 값 목록이 주어진다. 각 값을 만드는 사각형 수식을 찾아라.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 줄에 두 정수 WW와 QQ가 주어진다. 다음 WW개의 줄에는 각각 WW개의 문자가 주어지고, 이것이 산술 사각형이다. 입력에 주어지는 산술 사각형은 모두 위 조건을 지킨 판이다. 그다음 줄에 사각형 수식으로 만들어야 하는 값 QQ개가 공백으로 구분되어 주어진다. 주어지는 값은 모두 사각형 수식으로 만들 수 있다.

제한

  • 1≤T≤601 \le T \le 60
  • 2≤W≤202 \le W \le 20
  • 1≤Q≤501 \le Q \le 50
  • 각 값은 11 이상 250250 이하의 정수

출력

각 테스트 케이스마다 먼저 Case #X:를 한 줄에 출력한다. XX는 1부터 시작하는 테스트 케이스 번호다. 그다음 그 테스트 케이스의 값마다 그 값이 되는 사각형 수식을 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

값을 만드는 사각형 수식이 여러 개면 가장 짧은 것을 출력한다. 가장 짧은 것이 여러 개면 그중 사전순으로 가장 앞선 것을 출력한다. +는 -보다 사전순으로 앞선다.

예제2

  1. 예제 1

    입력
    2
    5 3
    2+1-2
    +3-4+
    5+2+1
    -4-0-
    9+5+1
    20 30 40
    3 2
    2+1
    +4+
    5+1
    2 20
    
    예상 출력
    Case #1:
    1+5+5+9
    3+4+5+9+9
    4+9+9+9+9
    Case #2:
    2
    5+5+5+5
    
  2. 예제 2

    입력
    1
    3 6
    5+5
    -3-
    2+7
    1 2 4 8 12 30
    
    예상 출력
    Case #1:
    3-2
    2
    2+2
    3+5
    2+3+7
    2+7+7+7+7