Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun isCorrectXML(s: String): Boolean {
val stack = ArrayDeque<String>()
var i = 0
val n = s.length
while (i < n) {
if (s[i] != '<') {
return false
}
i++
if (i >= n) return false
if (s[i] == '/') {
i++
val startPos = i
while (i < n && s[i].isLowerCase()) {
i++
}
val tagName = s.substring(startPos, i)
if (tagName.isEmpty()) {
return false
}
if (i >= n || s[i] != '>') {
return false
}
i++
if (stack.isEmpty() || stack.last() != tagName) {
return false
}
stack.removeLast()
} else {
val startPos = i
while (i < n && s[i].isLowerCase()) {
i++
}
val tagName = s.substring(startPos, i)
if (tagName.isEmpty()) {
return false
}
if (i >= n || s[i] != '>') {
return false
}
i++
stack.addLast(tagName)
}
}
return stack.isEmpty()
}
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val input = reader.readLine() ?: ""
reader.close()
val candidates = mutableListOf<Char>()
for (ch in 'a'..'z') {
candidates.add(ch)
}
candidates.add('/')
candidates.add('<')
candidates.add('>')
val n = input.length
for (i in 0 until n) {
val oldChar = input[i]
for (c in candidates) {
if (c == oldChar) continue
val modified = buildString {
append(input.substring(0, i))
append(c)
append(input.substring(i + 1))
}
if (isCorrectXML(modified)) {
writer.write(modified)
writer.newLine()
writer.close()
return
}
}
}
writer.close()
}