fun main(args: Array<String>)
{
    val s = readString().toByteArray()

    val m = mutableMapOf<Byte, Int>()
    for (item in s) {
        if (m.containsKey(item)) {
            m[item] = m[item]!! + 1
        } else {
            m.put(item, 1)
        }
    }

    val keysize = m.keys.indices.last() + 1
    println(if (keysize == 2 && m.values.all { it == 2 }) "Yes" else "No")
}


// Read an integer
// Usage: val a = readInt()
private fun readInt() = readLine()!!.toInt()

// Read N integers separated by " "
// Usage: val (a, b, c) = readNInts()
private fun readNInts() = readLine()!!.split(" ").map(String::toInt)

// Read a string
// Usage: val a = readString()
private fun readString() = readLine()!!
