R행 C열 격자의 각 칸에 소문자 알파벳이 하나씩 적혀 있다. 아무 칸에서나 출발해 상하좌우로 인접한 칸으로 L−1번 이동하면 단어 하나가 만들어진다. 지나간 칸의 글자를 방문 순서대로 이어 붙인 문자열이 그 단어이고, 길이는 L이다.
이동 규칙은 두 가지다. 격자 밖으로는 나갈 수 없다. 이미 지나온 칸으로 다시 들어가도 되고, 직전 칸으로 되돌아가는 이동도 허용한다. L이 1이면 이동이 없으므로 칸 하나의 글자가 곧 단어다.
가능한 모든 출발 칸과 모든 이동 방법으로 단어를 전부 만든다. 다만 a, c, m 세 글자는 금지 글자다. 금지 글자를 하나라도 포함하는 단어는 버린다. 예를 들어 ici, ahi, mrk는 모두 버린다.
버리고 남은 단어가 몇 개인지, 그중 서로 다른 문자열이 몇 개인지 구하라. 출발 칸이나 이동 경로가 다르면 같은 문자열이라도 각각 한 개로 세지만, 서로 다른 단어의 개수를 셀 때는 같은 문자열을 한 번만 센다.
첫 줄에 격자의 행 수 R, 열 수 C, 단어의 길이 L이 공백으로 구분되어 주어진다. (0<R<11, 0<C<11, 0<L<7)
이어지는 R개의 줄에 격자가 한 줄에 한 행씩 주어진다. 각 줄은 공백 없이 C개의 소문자로 이루어진다.
첫 줄에 만들어진 길이 L짜리 단어의 개수를 출력한다. 둘째 줄에 그중 서로 다른 단어의 개수를 출력한다.