만드는 중입니다

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

프로그래밍 가능한 뱀

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

요약
H행 W열 격자에서 K개 명령을 반복할 때 자기 몸과 부딪히지 않고 계속 움직이는 뱀의 최대 길이를 구합니다.
난이도

어려움10점 중 9점

유형
수학, 정수론, 시뮬레이션
정답자
아직 제출이 없습니다

문제

Konia는 저가형 모바일 기기를 만드는 회사인데 최근 시장 점유율이 떨어지고 있습니다. 회사를 살리려고 이사회는 Konia의 모든 기기에서 돌아가는 가장 유명한 게임인 뱀 게임을 바꾸기로 했습니다. 그렇습니다, 또 뱀 게임입니다.

게임은 H개 행과 W개 열로 이루어진 격자 판에서 진행됩니다. 행은 위에서 아래로 1부터 H까지, 열은 왼쪽에서 오른쪽으로 1부터 W까지 번호를 붙입니다. 칸 A는 (Ar,Ac)(A_r, A_c)로 나타내며, ArA_r은 행 번호, AcA_c는 열 번호입니다. 두 칸 A와 B는 ∣Ar−Br∣+∣Ac−Bc∣=1|A_r - B_r| + |A_c - B_c| = 1이면 인접합니다. 맨 위 행과 맨 아래 행의 칸끼리, 맨 왼쪽 열과 맨 오른쪽 열의 칸끼리도 인접합니다. 즉 모든 ii(1부터 W까지)에 대해 (1,i)(1, i)와 (H,i)(H, i)가 인접하고, 모든 ii(1부터 H까지)에 대해 (i,1)(i, 1)과 (i,W)(i, W)가 인접합니다.

뱀은 칸의 수열 A1,A2,…,ALA_1, A_2, \ldots, A_L입니다. L은 뱀의 길이인 양의 정수입니다. 수열 안에서 같은 칸이 두 번 나오면 안 되고, 수열에서 이웃한 두 칸은 판에서도 인접해야 합니다. 가능한 최대 길이는 H×WH \times W입니다. A1A_1을 머리라고 합니다.

플레이어가 조작하는 것은 머리뿐이며, 명령은 네 가지입니다.

  • L: 머리를 왼쪽으로 한 열 옮깁니다. 머리가 가장 왼쪽 열에 있으면 같은 행의 가장 오른쪽 열로 옮깁니다.
  • R: 머리를 오른쪽으로 한 열 옮깁니다. 머리가 가장 오른쪽 열에 있으면 같은 행의 가장 왼쪽 열로 옮깁니다.
  • U: 머리를 위로 한 행 옮깁니다. 머리가 맨 위 행에 있으면 같은 열의 맨 아래 행으로 옮깁니다.
  • D: 머리를 아래로 한 행 옮깁니다. 머리가 맨 아래 행에 있으면 같은 열의 맨 위 행으로 옮깁니다.

명령을 하나 실행하면 뱀의 모든 칸이 동시에 움직입니다. 머리는 위 규칙대로 움직이고, 나머지 칸은 앞 칸이 있던 자리로 따라갑니다. 즉 2 이상인 모든 ii에 대해 AiA_i는 Ai−1A_{i-1}이 있던 자리로 이동합니다. 예를 들어 L≥2L \ge 2이면 두 번째 칸은 머리가 있던 자리로 가고, L≥3L \ge 3이면 세 번째 칸은 두 번째 칸이 있던 자리로 갑니다.

뱀이 자기 자신과 부딪히는 순간 게임이 끝납니다. 즉 이동 뒤에 모든 칸이 서로 달라야 한다는 조건이 깨지면 끝납니다. 머리가 뱀의 다른 부분이 차지한 칸으로 이동하면 이에 해당합니다. 특히 뱀 길이가 3 이상이면 머리를 A2A_2 쪽으로 옮기는 명령은 충돌을 일으킵니다. 이동 후 A1A_1과 A3A_3이 같은 칸에 놓이기 때문입니다.

원래 게임에는 사과를 먹고 길어지는 기능이 있지만, 이 문제에서는 다루지 않습니다.

새 버전에서는 버튼을 계속 누를 필요가 없습니다. 플레이어는 뱀을 판 위에 한 번 놓고, 길이 K인 프로그램, 즉 머리의 이동 명령 K개를 씁니다. 게임이 시작되면 뱀은 명령을 차례로 수행합니다. K개 명령을 충돌 없이 모두 마치면 같은 순서로 처음부터 다시 수행합니다. 충돌이 일어나거나 플레이어가 지켜보기를 멈출 때까지 이 과정이 반복됩니다.

여러분은 Konia의 뱀 프로그래밍 수석 엔지니어로서 다음 문제를 풀어야 합니다. 판의 크기를 정하는 서로 다른 소수 H와 W, 그리고 명령 프로그램이 주어집니다. 게임을 시작한 뒤 자기 자신과 절대 부딪히지 않도록 놓을 수 있는 뱀의 최대 길이를 구하세요. 회사는 H와 W가 왜 소수여야 하는지 설명하지 못했지만, 소수는 양의 약수가 정확히 두 개인 수라는 점은 알려 주었습니다.

입력

첫 줄에 정수 H, W, K가 주어집니다. 판의 크기와 프로그램 길이입니다. 2≤H,W≤109+92 \le H, W \le 10^9 + 9, H≠WH \ne W, 1≤K≤min⁡{100 000,H×W}1 \le K \le \min\{100\,000, H \times W\}입니다.

H와 W는 서로 다른 소수라고 보장됩니다.

둘째 줄에는 공백 없이 K개의 문자가 이어서 주어집니다. 각 문자는 L, R, U, D 중 하나입니다.

출력

명령 수열을 따라 자기 자신과 부딪히지 않고 무한히 움직일 수 있는 뱀의 최대 길이를 한 줄에 출력합니다.

힌트

첫 번째 테스트에서는 명령 네 개를 모두 실행하면 머리가 시작 칸으로 돌아옵니다. 따라서 길이가 4칸보다 긴 뱀은 4번 이동하기 전에 부딪힙니다.

두 번째 테스트에서는 뱀을 올바르게 놓으면 판의 거의 전체를 차지할 수 있습니다.

예제3

  1. 예제 1

    입력
    5 7 4
    LURD
    
    예상 출력
    4
    
  2. 예제 2

    입력
    11 2 2
    RD
    
    예상 출력
    21
    
  3. 예제 3

    입력
    5 13 4
    ULUD
    
    예상 출력
    2