class Solution {
    fun nextGreaterElement(n: Int): Int {
        val s = n.toString().toCharArray()
        
        var anchor1 = s.lastIndex-1
        while(anchor1 >= 0 && s[anchor1] >= s[anchor1+1]) {
            --anchor1
        }
        
        if(anchor1 < 0){
            return -1
        }
        
        var anchor2 = s.lastIndex
        while(anchor2 >= 0 && s[anchor2] <= s[anchor1]) {
            --anchor2
        }
        
        s[anchor1] = s[anchor2].also { s[anchor2] = s[anchor1] }
        
        ++anchor1
        anchor2 = s.lastIndex
        while(anchor1 < anchor2) {
            s[anchor1] = s[anchor2].also { s[anchor2] = s[anchor1] }
            ++anchor1
            --anchor2
        }
        
        val ans = String(s).toLong()
        
        return if(ans > Int.MAX_VALUE) -1 else ans.toInt()
    }
}