//package atcoder.beginner_171;

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

    public static void main (String[] args) throws Exception {

        String s = "27";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long N=nlo();

        StringBuffer sb=new StringBuffer();
        while (N>26) {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        }

        char c=(char)(N%26);
        if (c>0) c+=96; else c='z';
        sb.insert(0, c);

        bw.write(sb.toString());
        bw.newLine();
        bw.flush();

    }

    static BufferedReader br;
    static BufferedWriter bw;
    static StringTokenizer st;
    static void rl() throws Exception{
        st = new StringTokenizer(br.readLine());
    }
    static long nlo(){
        return Long.parseLong(st.nextToken());
    }
    static int nin(){
        return Integer.parseInt(st.nextToken());
    }
    /*private static void te(){
      }*/
    static double ndo(){
        return Double.parseDouble(st.nextToken());
    }
    static char[] nca(){
        return st.nextToken().toCharArray();
    }
    static String nstr(){
        return st.nextToken();
    }
} import java.io.*; io.* java import java.util.Arrays; Arrays java.util import java.util.StringTokenizer; StringTokenizer java.util public class Main {

    public static void main (String[] args) throws Exception {

        String s = "27";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long N=nlo();

        StringBuffer sb=new StringBuffer();
        while (N>26) {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        }

        char c=(char)(N%26);
        if (c>0) c+=96; else c='z';
        sb.insert(0, c);

        bw.write(sb.toString());
        bw.newLine();
        bw.flush();

    }

    static BufferedReader br;
    static BufferedWriter bw;
    static StringTokenizer st;
    static void rl() throws Exception{
        st = new StringTokenizer(br.readLine());
    }
    static long nlo(){
        return Long.parseLong(st.nextToken());
    }
    static int nin(){
        return Integer.parseInt(st.nextToken());
    }
    /*private static void te(){
      }*/
    static double ndo(){
        return Double.parseDouble(st.nextToken());
    }
    static char[] nca(){
        return st.nextToken().toCharArray();
    }
    static String nstr(){
        return st.nextToken();
    }
} Main static BufferedReader br; br static BufferedWriter bw; bw static StringTokenizer st; st public static void main (String[] args) throws Exception {

        String s = "27";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long N=nlo();

        StringBuffer sb=new StringBuffer();
        while (N>26) {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        }

        char c=(char)(N%26);
        if (c>0) c+=96; else c='z';
        sb.insert(0, c);

        bw.write(sb.toString());
        bw.newLine();
        bw.flush();

    } main {

        String s = "27";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long N=nlo();

        StringBuffer sb=new StringBuffer();
        while (N>26) {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        }

        char c=(char)(N%26);
        if (c>0) c+=96; else c='z';
        sb.insert(0, c);

        bw.write(sb.toString());
        bw.newLine();
        bw.flush();

    } String s = "27"; s "27" br = new BufferedReader(new InputStreamReader(System.in)) br new BufferedReader(new InputStreamReader(System.in)) bw = new BufferedWriter(new OutputStreamWriter(System.out)) bw new BufferedWriter(new OutputStreamWriter(System.out)) rl() rl long N=nlo(); N nlo() nlo StringBuffer sb=new StringBuffer(); sb new StringBuffer() while (N>26) {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        } N>26 N 26 {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        } char c=(char)(N%26); c (char)(N%26) N 26 if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            } c>0 c 0 {
                c+=96;
                N/=26;
            } c+=96 c 96 N/=26 N 26 {
                c='z';
                N=(N-26)/26;
            } c='z' c 'z' N=(N-26)/26 N (N-26)/26 (N-26) N 26 26 sb.insert(0, c) sb.insert sb 0 c char c=(char)(N%26); c (char)(N%26) N 26 if (c>0) c+=96; else c='z'; c>0 c 0 c+=96 c 96 c='z' c 'z' sb.insert(0, c) sb.insert sb 0 c bw.write(sb.toString()) bw.write bw sb.toString() sb.toString sb bw.newLine() bw.newLine bw bw.flush() bw.flush bw String[] args args static void rl() throws Exception{
        st = new StringTokenizer(br.readLine());
    } rl {
        st = new StringTokenizer(br.readLine());
    } st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) static long nlo(){
        return Long.parseLong(st.nextToken());
    } nlo {
        return Long.parseLong(st.nextToken());
    } return Long.parseLong(st.nextToken()); Long.parseLong(st.nextToken()) Long.parseLong Long st.nextToken() st.nextToken st static int nin(){
        return Integer.parseInt(st.nextToken());
    } nin {
        return Integer.parseInt(st.nextToken());
    } return Integer.parseInt(st.nextToken()); Integer.parseInt(st.nextToken()) Integer.parseInt Integer st.nextToken() st.nextToken st /*private static void te(){
      }*/
    static double ndo(){
        return Double.parseDouble(st.nextToken());
    } ndo {
        return Double.parseDouble(st.nextToken());
    } return Double.parseDouble(st.nextToken()); Double.parseDouble(st.nextToken()) Double.parseDouble Double st.nextToken() st.nextToken st static char[] nca(){
        return st.nextToken().toCharArray();
    } nca {
        return st.nextToken().toCharArray();
    } return st.nextToken().toCharArray(); st.nextToken().toCharArray() st.nextToken().toCharArray st.nextToken() st.nextToken st static String nstr(){
        return st.nextToken();
    } nstr {
        return st.nextToken();
    } return st.nextToken(); st.nextToken() st.nextToken st public class Main {

    public static void main (String[] args) throws Exception {

        String s = "27";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long N=nlo();

        StringBuffer sb=new StringBuffer();
        while (N>26) {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        }

        char c=(char)(N%26);
        if (c>0) c+=96; else c='z';
        sb.insert(0, c);

        bw.write(sb.toString());
        bw.newLine();
        bw.flush();

    }

    static BufferedReader br;
    static BufferedWriter bw;
    static StringTokenizer st;
    static void rl() throws Exception{
        st = new StringTokenizer(br.readLine());
    }
    static long nlo(){
        return Long.parseLong(st.nextToken());
    }
    static int nin(){
        return Integer.parseInt(st.nextToken());
    }
    /*private static void te(){
      }*/
    static double ndo(){
        return Double.parseDouble(st.nextToken());
    }
    static char[] nca(){
        return st.nextToken().toCharArray();
    }
    static String nstr(){
        return st.nextToken();
    }
} public class Main {

    public static void main (String[] args) throws Exception {

        String s = "27";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long N=nlo();

        StringBuffer sb=new StringBuffer();
        while (N>26) {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        }

        char c=(char)(N%26);
        if (c>0) c+=96; else c='z';
        sb.insert(0, c);

        bw.write(sb.toString());
        bw.newLine();
        bw.flush();

    }

    static BufferedReader br;
    static BufferedWriter bw;
    static StringTokenizer st;
    static void rl() throws Exception{
        st = new StringTokenizer(br.readLine());
    }
    static long nlo(){
        return Long.parseLong(st.nextToken());
    }
    static int nin(){
        return Integer.parseInt(st.nextToken());
    }
    /*private static void te(){
      }*/
    static double ndo(){
        return Double.parseDouble(st.nextToken());
    }
    static char[] nca(){
        return st.nextToken().toCharArray();
    }
    static String nstr(){
        return st.nextToken();
    }
} Main
//package atcoder.beginner_171;

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

    public static void main (String[] args) throws Exception {

        String s = "27";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long N=nlo();

        StringBuffer sb=new StringBuffer();
        while (N>26) {
            char c=(char)(N%26);
            if (c>0) {
                c+=96;
                N/=26;
            } else {
                c='z';
                N=(N-26)/26;
            }
            sb.insert(0, c);
        }

        char c=(char)(N%26);
        if (c>0) c+=96; else c='z';
        sb.insert(0, c);

        bw.write(sb.toString());
        bw.newLine();
        bw.flush();

    }

    static BufferedReader br;
    static BufferedWriter bw;
    static StringTokenizer st;
    static void rl() throws Exception{
        st = new StringTokenizer(br.readLine());
    }
    static long nlo(){
        return Long.parseLong(st.nextToken());
    }
    static int nin(){
        return Integer.parseInt(st.nextToken());
    }
    /*private static void te(){
      }*/
    static double ndo(){
        return Double.parseDouble(st.nextToken());
    }
    static char[] nca(){
        return st.nextToken().toCharArray();
    }
    static String nstr(){
        return st.nextToken();
    }
}