const val DIVIDER = 1_000_000_007 data class Counts( var cntBiggers: Long, var cntSmallers: Long ) fun inversionCount(s: String, n: Long): Int { val alphabetCounts = MutableList(26, { 0 }); val counts = Counts(0, 0) s.forEach { ch -> val index = ch.code - 'a'.code val cntBiggers = alphabetCounts.slice(index + 1 until 26).sum() val cntSmallers = alphabetCounts.slice(0 until index).sum() alphabetCounts[index] += 1 counts.cntBiggers += cntBiggers counts.cntSmallers += cntSmallers } val (n_mod: Long, np_mod: Long, nm_mod: Long) = if (n % 2 == 0L) { Triple((n / 2) % DIVIDER, (n + 1) % DIVIDER, (n - 1) % DIVIDER) } else { Triple(n % DIVIDER, ((n + 1) / 2) % DIVIDER, ((n - 1) / 2) % DIVIDER) } return (( (((((counts.cntBiggers % DIVIDER) * np_mod) % DIVIDER) * n_mod) % DIVIDER) + (((((counts.cntSmallers % DIVIDER) * n_mod) % DIVIDER) * nm_mod) % DIVIDER) ) % DIVIDER ).toInt() } fun main() = with(System.`in`.bufferedReader()) { val s = readln().trim() val n = readln().trim().toLong() println(inversionCount(s, n)) }