만드는 중입니다

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

알파벳 여행

면접 대비

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

요약
문자 격자에서 길이가 L인 모든 이동 경로를 세고 a, c, m이 들어간 단어를 제외한 서로 다른 문자열 개수를 구합니다.
난이도

쉬움10점 중 3점

유형
백트래킹, DFS, 해시맵
정답자
아직 제출이 없습니다

문제

RR행 CC열 격자의 각 칸에 소문자 알파벳이 하나씩 적혀 있다. 아무 칸에서나 출발해 상하좌우로 인접한 칸으로 L−1L-1번 이동하면 단어 하나가 만들어진다. 지나간 칸의 글자를 방문 순서대로 이어 붙인 문자열이 그 단어이고, 길이는 LL이다.

이동 규칙은 두 가지다. 격자 밖으로는 나갈 수 없다. 이미 지나온 칸으로 다시 들어가도 되고, 직전 칸으로 되돌아가는 이동도 허용한다. LL이 1이면 이동이 없으므로 칸 하나의 글자가 곧 단어다.

가능한 모든 출발 칸과 모든 이동 방법으로 단어를 전부 만든다. 다만 a, c, m 세 글자는 금지 글자다. 금지 글자를 하나라도 포함하는 단어는 버린다. 예를 들어 ici, ahi, mrk는 모두 버린다.

버리고 남은 단어가 몇 개인지, 그중 서로 다른 문자열이 몇 개인지 구하라. 출발 칸이나 이동 경로가 다르면 같은 문자열이라도 각각 한 개로 세지만, 서로 다른 단어의 개수를 셀 때는 같은 문자열을 한 번만 센다.

입력

첫 줄에 격자의 행 수 RR, 열 수 CC, 단어의 길이 LL이 공백으로 구분되어 주어진다. (0<R<110 < R < 11, 0<C<110 < C < 11, 0<L<70 < L < 7)

이어지는 RR개의 줄에 격자가 한 줄에 한 행씩 주어진다. 각 줄은 공백 없이 CC개의 소문자로 이루어진다.

출력

첫 줄에 만들어진 길이 LL짜리 단어의 개수를 출력한다. 둘째 줄에 그중 서로 다른 단어의 개수를 출력한다.

예제3

  1. 예제 1

    입력
    3 3 1
    abc
    def
    hij
    
    예상 출력
    7
    7
    
  2. 예제 2

    입력
    3 4 2
    acip
    mpbk
    pioc
    
    예상 출력
    18
    14
    
  3. 예제 3

    입력
    4 4 3
    abox
    btoy
    gitm
    ceui
    
    예상 출력
    100
    73