| 1234567891011121314151617181920 | func nextGreaterElement(n int) int {	runes := []rune(strconv.Itoa(n))	for n = len(runes) - 2; 0 <= n && runes[n+1] <= runes[n]; n-- {	}	if n == -1 {		return n	}	i := len(runes) - 1	for ; runes[i] <= runes[n]; i-- {	}	runes[n], runes[i] = runes[i], runes[n]	for n, i = n+1, len(runes)-1; n < i; n, i = n+1, i-1 {		runes[n], runes[i] = runes[i], runes[n]	}	n, _ = strconv.Atoi(string(runes))	if math.MaxInt32 < n {		return -1	}	return n}
 |