만드는 중입니다

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

경로 계산기 반환

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

요약
격자에서 오른쪽이나 아래로만 이동하는 모든 경로를 식으로 읽고, 그 값들의 합을 M으로 나눈 나머지를 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 수학, 문자열
정답자
아직 제출이 없습니다

문제

격자는 HH행 WW열로 이루어져 있다. 각 칸에는 다음 11가지 문자 중 하나가 적혀 있다. 덧셈 연산자 '+', 곱셈 연산자 '*', 또는 1부터 9까지의 숫자이다.

왼쪽 위 칸에서 시작해 오른쪽 아래 칸에서 끝나는 경로가 있다. 이동은 오른쪽 또는 아래로만 할 수 있다. 경로의 값은 경로에 놓인 칸의 문자를 순서대로 이어 붙여 얻은 수식을 계산한 결과이다. 가능한 모든 경로의 값을 더한 합을 구하라. 합이 클 수 있으므로 MM으로 나눈 나머지를 출력한다.

왼쪽 위 칸과 오른쪽 아래 칸은 항상 숫자이다. 또한 변을 공유하는 두 칸 중 적어도 하나는 숫자이다. 따라서 어떤 경로에서 얻은 수식도 올바른 수식이다.

입력

첫째 줄에 세 정수 HH, WW, MM이 주어진다 (1≤H,W≤20001 \le H, W \le 2000, 2≤M≤1092 \le M \le 10^9). 다음 HH개의 줄에는 격자가 주어진다. ai,ja_{i,j}는 ii행 jj열 칸에 적힌 문자이다. 각 ai,ja_{i,j}는 '+', '*', 또는 1부터 9까지의 숫자이다. a1,1a_{1,1}과 aH,Wa_{H,W}는 모두 숫자이다. 변을 공유하는 두 칸 중 적어도 하나는 숫자이다.

출력

가능한 모든 경로의 값을 더한 합을 MM으로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

    입력
    2 3 1000
    3*1
    +27
    
    예상 출력
    162
    
  2. 예제 2

    입력
    4 4 3000000
    24+7
    *23*
    9+48
    *123
    
    예상 출력
    2159570