80x25 텍스트 터미널에서 주로 돌아가던, 세 글자짜리 16비트 운영체제가 PC 시장을 지배하던 시절, "Nibbles"는 모두가 가장 좋아하던 컴퓨터 게임이었습니다. 하지만 이 문제는 Nibbles에 관한 것이 아니라, Nibbles와 거의 비슷하면서도 사실은 전혀 다른 "Connect"라는 게임에 관한 것입니다.
Connect는 R개의 행과 C개의 열로 이루어진 정사각형 칸들의 판 위에서 진행되며, R과 C는 모두 홀수입니다. 행은 1부터 R까지, 열은 1부터 C까지 번호가 매겨집니다. 각 칸은 비어 있거나 벽으로 막혀 있습니다. 또한 모든 판은 다음 규칙을 만족합니다.
- 두 좌표가 모두 짝수인 칸은 방(room)입니다. 방은 절대 막히지 않습니다.
- 두 좌표가 모두 홀수인 칸은 장벽(barrier)입니다. 장벽은 항상 막혀 있습니다.
- 그 밖의 모든 칸은 통로(corridor)입니다. 통로는 막혀 있을 수도, 뚫려 있을 수도 있습니다.
- 판의 바깥 테두리에 있는 통로는 항상 막혀 있습니다.
장벽은 + 문자로, 막힌 수평 통로는 | 문자로, 막힌 수직 통로는 - 문자로 표시합니다. 방과 뚫린 통로는 공백 문자로 표시합니다.
게임이 시작될 때, 짝수 개의 말(대문자 X로 표시)이 각각 서로 다른 방 하나씩에 놓입니다. 말 A와 B 사이의 경로란, A에서 시작하여 B에서 끝나고 매 단계마다 상하좌우 네 방향 중 하나로 한 칸씩 이동하는, 비어 있는 칸들의 나열입니다(경로에는 양 끝 칸 A와 B도 포함됩니다). 경로의 길이는 A에서 B까지 가는 데 필요한 이동 횟수이며, 이는 경로에 포함된 칸의 수에서 1을 뺀 값과 같습니다.
플레이어는 먼저 모든 말을 짝으로 나눈 뒤, 각 짝의 두 말을 경로로 연결해야 하며, 이때 어떤 두 경로도 같은 칸을 공유해서는 안 됩니다. 완성된 게임의 점수는 모든 경로 길이의 합입니다.
시작 배치가 주어질 때, 모든 말을 짝지어 서로 칸을 공유하지 않는 경로들로 연결했을 때 얻을 수 있는 가장 작은 점수를 구하세요. 모든 말을 연결하는 방법이 적어도 하나는 항상 존재함이 입력 데이터로 보장됩니다.