fun main() { val builder = StringBuilder() val s = readInputLine() val posArr = Array('z' - 'a' + 1) { mutableListOf() } val allPat = s.length.toLong() * (s.length + 1).toLong() / 2L s.forEachIndexed { index, c -> posArr[c - 'a'].add(index) } var cnt = 0L for (pos in posArr) { var adder = allPat var prevIndex = -1 for (i in pos) { // prevIndex + 1 ~ i - 1の範囲で組む部分文字列パターン数を除外 adder -= (i - prevIndex - 1).toLong() * (i - prevIndex).toLong() / 2L prevIndex = i } adder -= (s.length - prevIndex - 1).toLong() * (s.length - prevIndex).toLong() / 2L cnt += adder } builder.appendln(cnt.toDouble() / allPat.toDouble()) print(builder.toString()) } fun readInputLine(): String { return readLine()!! }