def solve(String s) {
    int zeros = 0
    int nines = 0
    int takeOneFromPos = s.length() - 1
    while (s[takeOneFromPos] == '0' && takeOneFromPos >= 0) {
        --takeOneFromPos
        ++zeros
    }
    if (takeOneFromPos == -1) return '-1'
    int addOneToPos = takeOneFromPos - 1
    while (s[addOneToPos] == '9' && addOneToPos >= 0) {
        --addOneToPos
        ++nines
    }
    StringBuilder result = new StringBuilder()
    if (addOneToPos == -1) {
        result.append(1)
    }
    else {
        result.append(s.substring(0, addOneToPos))
        result.append(s[addOneToPos].toInteger() + 1)
    }
    result.append('0' * zeros)
    result.append(s[takeOneFromPos].toInteger() - 1)
    result.append('9' * nines)
    return result.toString()
}

assert solve('113') == '122'
assert solve('0050') == '0104'
assert solve('103') == '112'
assert solve('190') == '208'
assert solve('99100') == '100099'
