func compress(chars []byte) int {
	fast, slow, cnt, n := 1, 0, 1, len(chars)
	if n <= 1 {
		return n
	}
	for ; fast < n; fast++ {
		if chars[fast] != chars[fast-1] {
			chars[slow] = chars[fast-1]
			slow++
			if cnt != 1 {
				num := strconv.Itoa(cnt)
				for end, i := slow+len(num), 0; slow < end; slow, i = slow+1, i+1 {
					chars[slow] = num[i]
				}
				cnt = 1
			}
		} else {
			cnt++
		}
	}
	chars[slow] = chars[fast-1]
	slow++
	if cnt != 1 {
		num := strconv.Itoa(cnt)
		for end, i := slow+len(num), 0; slow < end; slow, i = slow+1, i+1 {
			chars[slow] = num[i]
		}
	}
	return slow
}