// well named variable const val INF: Int = 100 fun main() { // Read input val lines = (0 until 6).map{ readln() } // DP with index, letter val dp = Array(17) { IntArray(26) } for (i in 0..25) dp[16][i] = 0 for (i in 15 downTo 0) { for (j in 0..25) { dp[i][j] = INF for (k in 0..5) { val j2: Int = lines[k].get(i).code - 'A'.code val j3 = if (lines[k].get(i) == 'Q') 'U'.code - 'A'.code else j2 val s = if (k == 0) 0 else if (k == 5) 2 else 1 if (j <= j2) { dp[i][j] = kotlin.math.min(dp[i][j], dp[i + 1][j3] + s) } } } } if (dp[0][0] == INF) println("impossible") else println(dp[0][0]) }