fun main(args: Array<String>) {

    var tmpLine = readLine()

    
    val result = experiment(tmpLine!!)

    println(result)
}

fun experiment(input: String) : String {

    val n = input.toLong()-1
    var result = ""
    val atozList = mutableListOf<String>()
    for (alphabet in 'a'..'z') {
        atozList.add("${alphabet}")
    }



    val amari1 = n % 26 // 0-25 0 の場合は+26 -1 + 2
    val sho1 = (n - amari1) / 26
    // val idx1 = if (amari1 == 0L) 26 else amari1.toInt()
    val idx1 = amari1.toInt()
    result = atozList[idx1] + result
    if (sho1 < 1L) return result

    var nextVal = sho1

    while (nextVal > 0) {
        nextVal = nextVal -1
        val amari2 = nextVal % 26
        // val idx2 = if (amari2 == 0L) 26 else amari2.toInt()
        val idx2 = amari2.toInt()
        val sho2 = (nextVal - amari2) / 26
        result = atozList[idx2] + result
        if (sho2 < 1L) return result
        nextVal = sho2
    } 

    // var nextVal2 = sho1
    // val amari2 = nextVal2 % 26
    // val sho2 = (nextVal2 - amari2) / 26
    // result = atozList[amari2-1] + result
    // if (sho2 == 0) return result

    // var nextVal3 = sho2
    // val amari3 = nextVal3 % 26
    // val sho3 = (nextVal3 - amari3) / 26
    // result = atozList[amari3-1] + result
    // if (sho3 == 0) return result

    // var nextVal4 = sho3
    // val amari4 = nextVal4 % 26
    // val sho4 = (nextVal4 - amari4) / 26
    // result = atozList[amari4-1] + result
    // if (sho4 == 0) return result

    // var nextVal5 = sho4
    // val amari5 = nextVal5 % 26
    // val sho5 = (nextVal5 - amari5) / 26
    // result = atozList[amari5-1] + result
    // if (sho5 == 0) return result

    // var nextVal6 = sho5
    // val amari6 = nextVal6 % 26
    // val sho6 = (nextVal6 - amari6) / 26
    // result = atozList[amari6-1] + result
    // if (sho6 == 0) return result

    return result
}
