# 풀이 (시간초과)
- 로직은 맞는데 문자열 처리가 스위프트에서 느려서 시간초과 발생하는 것으로 판단
- 추후 비트마스킹 학습 이후 재풀이 예정
import Foundation
let rc = readLine()!.split(separator: " ").map { Int($0)! }; let r = rc[0]; let c = rc[1]
var adj: [[Character]] = .init(repeating: .init(repeating: " ", count: c), count: r)
var visitedAlphabet: [Bool] = .init(repeating: false, count: 26)
var ret = 0
let dy = [-1, 0, 1, 0]; let dx = [0, 1, 0, -1]
for row in 0..<r {
adj[row] = readLine()!.map { $0 }
}
func dfs(_ y: Int, _ x: Int, _ cnt: Int) {
ret = max(cnt, ret)
for i in 0..<4 {
let ny = dy[i] + y
let nx = dx[i] + x
if ny < 0 || nx < 0 || ny >= r || nx >= c {
continue
}
let next = Int(adj[ny][nx].asciiValue!) - Int(Character("A").asciiValue!)
if !visitedAlphabet[next] {
visitedAlphabet[next] = true
dfs(ny, nx, cnt + 1)
visitedAlphabet[next] = false
}
}
}
visitedAlphabet[Int(adj[0][0].asciiValue!) - Int(Character("A").asciiValue!)] = true
dfs(0, 0, 1)
print(ret)