// created on : Sun Jun 21 2020
 
import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        long n = in.nextLong();
        StringBuilder sb = new StringBuilder();
        while(n > 0){
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        }
        println(sb.reverse().toString());
        in.close();
        out.close();
    }

    static int MIN = Integer.MIN_VALUE;
    static int MAX = Integer.MAX_VALUE;
    static Reader in = new Reader();
    static PrintWriter out = new PrintWriter(System.out);

    static int[] readInt(int N) throws IOException { 
    	int arr[] = new int[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextInt(); 
    	} 
    	return arr;
    }
    
    static long[] readLong(int N) throws IOException { 
    	long arr[] = new long[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextLong(); 
    	} 
    	return arr;
    }
    
    static void print(Object O) {  
    	out.print(O); 
    }
    
    static void println(Object O) { 
    	out.println(O); 
    }
    
    static void println(int arr[]) { 
    	for(int i = 0; i < arr.length; i++){ 
    		print(arr[i] + " "); 
    	} 
    	println(""); 
    }
    
    static void displayRuntime(long startTime){
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("Runtime: " + elapsedTime / 1000D);
    }
}

class Reader {
    BufferedReader reader;
    StringTokenizer tokenizer;

    Reader() {
        reader = new BufferedReader(new InputStreamReader(System.in));
        tokenizer = new StringTokenizer("");
    }

    String next() throws IOException {
        while (!tokenizer.hasMoreTokens() ) { 
            tokenizer = new StringTokenizer(reader.readLine()); 
        }
        return tokenizer.nextToken();
    }

    int nextInt() throws IOException { 
        return Integer.parseInt(next()); 
    }
    
    double nextDouble() throws IOException { 
        return Double.parseDouble(next());
    }
    
    long nextLong() throws IOException { 
        return Long.parseLong(next()); 
    }
    
    String nextLine() throws IOException { 
        return reader.readLine(); 
    }
    
    void close() throws IOException { 
        reader.close(); 
    }
} import java.io.*; io.* java import java.util.*; util.* java public class Main {

    public static void main(String[] args) throws IOException {
        long n = in.nextLong();
        StringBuilder sb = new StringBuilder();
        while(n > 0){
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        }
        println(sb.reverse().toString());
        in.close();
        out.close();
    }

    static int MIN = Integer.MIN_VALUE;
    static int MAX = Integer.MAX_VALUE;
    static Reader in = new Reader();
    static PrintWriter out = new PrintWriter(System.out);

    static int[] readInt(int N) throws IOException { 
    	int arr[] = new int[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextInt(); 
    	} 
    	return arr;
    }
    
    static long[] readLong(int N) throws IOException { 
    	long arr[] = new long[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextLong(); 
    	} 
    	return arr;
    }
    
    static void print(Object O) {  
    	out.print(O); 
    }
    
    static void println(Object O) { 
    	out.println(O); 
    }
    
    static void println(int arr[]) { 
    	for(int i = 0; i < arr.length; i++){ 
    		print(arr[i] + " "); 
    	} 
    	println(""); 
    }
    
    static void displayRuntime(long startTime){
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("Runtime: " + elapsedTime / 1000D);
    }
} Main static int MIN = Integer.MIN_VALUE; MIN Integer.MIN_VALUE Integer Integer.MIN_VALUE static int MAX = Integer.MAX_VALUE; MAX Integer.MAX_VALUE Integer Integer.MAX_VALUE static Reader in = new Reader(); in new Reader() static PrintWriter out = new PrintWriter(System.out); out new PrintWriter(System.out) public static void main(String[] args) throws IOException {
        long n = in.nextLong();
        StringBuilder sb = new StringBuilder();
        while(n > 0){
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        }
        println(sb.reverse().toString());
        in.close();
        out.close();
    } main {
        long n = in.nextLong();
        StringBuilder sb = new StringBuilder();
        while(n > 0){
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        }
        println(sb.reverse().toString());
        in.close();
        out.close();
    } long n = in.nextLong(); n in.nextLong() in.nextLong in StringBuilder sb = new StringBuilder(); sb new StringBuilder() while(n > 0){
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        } n > 0 n 0 {
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        } long mod = (n - 1) % 26; mod (n - 1) % 26 (n - 1) n 1 26 sb.append((char) (mod + 97)) sb.append sb (char) (mod + 97) mod 97 if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            } n % 26 == 0 n % 26 n 26 0 {
                n = n/26 - 1;
            } n = n/26 - 1 n n/26 - 1 n/26 n 26 1 {
                n = n / 26;
            } n = n / 26 n n / 26 n 26 println(sb.reverse().toString()) println sb.reverse().toString() sb.reverse().toString sb.reverse() sb.reverse sb in.close() in.close in out.close() out.close out String[] args args static int[] readInt(int N) throws IOException { 
    	int arr[] = new int[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextInt(); 
    	} 
    	return arr;
    } readInt { 
    	int arr[] = new int[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextInt(); 
    	} 
    	return arr;
    } int arr[] = new int[N]; arr new int[N] N for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextInt(); 
    	} int i = 0; int i = 0; i 0 i < N i N i++ i++ i { 
    		arr[i] = in.nextInt(); 
    	} { 
    		arr[i] = in.nextInt(); 
    	} arr[i] = in.nextInt() arr[i] arr i in.nextInt() in.nextInt in return arr; arr int N N static long[] readLong(int N) throws IOException { 
    	long arr[] = new long[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextLong(); 
    	} 
    	return arr;
    } readLong { 
    	long arr[] = new long[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextLong(); 
    	} 
    	return arr;
    } long arr[] = new long[N]; arr new long[N] N for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextLong(); 
    	} int i = 0; int i = 0; i 0 i < N i N i++ i++ i { 
    		arr[i] = in.nextLong(); 
    	} { 
    		arr[i] = in.nextLong(); 
    	} arr[i] = in.nextLong() arr[i] arr i in.nextLong() in.nextLong in return arr; arr int N N static void print(Object O) {  
    	out.print(O); 
    } print {  
    	out.print(O); 
    } out.print(O) out.print out O Object O O static void println(Object O) { 
    	out.println(O); 
    } println { 
    	out.println(O); 
    } out.println(O) out.println out O Object O O static void println(int arr[]) { 
    	for(int i = 0; i < arr.length; i++){ 
    		print(arr[i] + " "); 
    	} 
    	println(""); 
    } println { 
    	for(int i = 0; i < arr.length; i++){ 
    		print(arr[i] + " "); 
    	} 
    	println(""); 
    } for(int i = 0; i < arr.length; i++){ 
    		print(arr[i] + " "); 
    	} int i = 0; int i = 0; i 0 i < arr.length i arr.length arr arr.length i++ i++ i { 
    		print(arr[i] + " "); 
    	} { 
    		print(arr[i] + " "); 
    	} print(arr[i] + " ") print arr[i] + " " arr[i] arr i " " println("") println "" int arr[] arr static void displayRuntime(long startTime){
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("Runtime: " + elapsedTime / 1000D);
    } displayRuntime {
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("Runtime: " + elapsedTime / 1000D);
    } long stopTime = System.currentTimeMillis(); stopTime System.currentTimeMillis() System.currentTimeMillis System long elapsedTime = stopTime - startTime; elapsedTime stopTime - startTime stopTime startTime System.out.println("Runtime: " + elapsedTime / 1000D) System.out.println System.out System System.out "Runtime: " + elapsedTime / 1000D "Runtime: " elapsedTime / 1000D elapsedTime 1000D long startTime startTime class Reader {
    BufferedReader reader;
    StringTokenizer tokenizer;

    Reader() {
        reader = new BufferedReader(new InputStreamReader(System.in));
        tokenizer = new StringTokenizer("");
    }

    String next() throws IOException {
        while (!tokenizer.hasMoreTokens() ) { 
            tokenizer = new StringTokenizer(reader.readLine()); 
        }
        return tokenizer.nextToken();
    }

    int nextInt() throws IOException { 
        return Integer.parseInt(next()); 
    }
    
    double nextDouble() throws IOException { 
        return Double.parseDouble(next());
    }
    
    long nextLong() throws IOException { 
        return Long.parseLong(next()); 
    }
    
    String nextLine() throws IOException { 
        return reader.readLine(); 
    }
    
    void close() throws IOException { 
        reader.close(); 
    }
} Reader BufferedReader reader; reader StringTokenizer tokenizer; tokenizer Reader() {
        reader = new BufferedReader(new InputStreamReader(System.in));
        tokenizer = new StringTokenizer("");
    } Reader {
        reader = new BufferedReader(new InputStreamReader(System.in));
        tokenizer = new StringTokenizer("");
    } reader = new BufferedReader(new InputStreamReader(System.in)) reader new BufferedReader(new InputStreamReader(System.in)) tokenizer = new StringTokenizer("") tokenizer new StringTokenizer("") String next() throws IOException {
        while (!tokenizer.hasMoreTokens() ) { 
            tokenizer = new StringTokenizer(reader.readLine()); 
        }
        return tokenizer.nextToken();
    } next {
        while (!tokenizer.hasMoreTokens() ) { 
            tokenizer = new StringTokenizer(reader.readLine()); 
        }
        return tokenizer.nextToken();
    } while (!tokenizer.hasMoreTokens() ) { 
            tokenizer = new StringTokenizer(reader.readLine()); 
        } !tokenizer.hasMoreTokens() tokenizer.hasMoreTokens() tokenizer.hasMoreTokens tokenizer { 
            tokenizer = new StringTokenizer(reader.readLine()); 
        } tokenizer = new StringTokenizer(reader.readLine()) tokenizer new StringTokenizer(reader.readLine()) return tokenizer.nextToken(); tokenizer.nextToken() tokenizer.nextToken tokenizer int nextInt() throws IOException { 
        return Integer.parseInt(next()); 
    } nextInt { 
        return Integer.parseInt(next()); 
    } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next double nextDouble() throws IOException { 
        return Double.parseDouble(next());
    } nextDouble { 
        return Double.parseDouble(next());
    } return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next long nextLong() throws IOException { 
        return Long.parseLong(next()); 
    } nextLong { 
        return Long.parseLong(next()); 
    } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next String nextLine() throws IOException { 
        return reader.readLine(); 
    } nextLine { 
        return reader.readLine(); 
    } return reader.readLine(); reader.readLine() reader.readLine reader void close() throws IOException { 
        reader.close(); 
    } close { 
        reader.close(); 
    } reader.close() reader.close reader public class Main {

    public static void main(String[] args) throws IOException {
        long n = in.nextLong();
        StringBuilder sb = new StringBuilder();
        while(n > 0){
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        }
        println(sb.reverse().toString());
        in.close();
        out.close();
    }

    static int MIN = Integer.MIN_VALUE;
    static int MAX = Integer.MAX_VALUE;
    static Reader in = new Reader();
    static PrintWriter out = new PrintWriter(System.out);

    static int[] readInt(int N) throws IOException { 
    	int arr[] = new int[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextInt(); 
    	} 
    	return arr;
    }
    
    static long[] readLong(int N) throws IOException { 
    	long arr[] = new long[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextLong(); 
    	} 
    	return arr;
    }
    
    static void print(Object O) {  
    	out.print(O); 
    }
    
    static void println(Object O) { 
    	out.println(O); 
    }
    
    static void println(int arr[]) { 
    	for(int i = 0; i < arr.length; i++){ 
    		print(arr[i] + " "); 
    	} 
    	println(""); 
    }
    
    static void displayRuntime(long startTime){
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("Runtime: " + elapsedTime / 1000D);
    }
} public class Main {

    public static void main(String[] args) throws IOException {
        long n = in.nextLong();
        StringBuilder sb = new StringBuilder();
        while(n > 0){
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        }
        println(sb.reverse().toString());
        in.close();
        out.close();
    }

    static int MIN = Integer.MIN_VALUE;
    static int MAX = Integer.MAX_VALUE;
    static Reader in = new Reader();
    static PrintWriter out = new PrintWriter(System.out);

    static int[] readInt(int N) throws IOException { 
    	int arr[] = new int[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextInt(); 
    	} 
    	return arr;
    }
    
    static long[] readLong(int N) throws IOException { 
    	long arr[] = new long[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextLong(); 
    	} 
    	return arr;
    }
    
    static void print(Object O) {  
    	out.print(O); 
    }
    
    static void println(Object O) { 
    	out.println(O); 
    }
    
    static void println(int arr[]) { 
    	for(int i = 0; i < arr.length; i++){ 
    		print(arr[i] + " "); 
    	} 
    	println(""); 
    }
    
    static void displayRuntime(long startTime){
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("Runtime: " + elapsedTime / 1000D);
    }
} Main
// created on : Sun Jun 21 2020
 
import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        long n = in.nextLong();
        StringBuilder sb = new StringBuilder();
        while(n > 0){
            long mod = (n - 1) % 26;
            sb.append((char) (mod + 97));
            if(n % 26 == 0){
                n = n/26 - 1;
            }
            else{
                n = n / 26;
            }
        }
        println(sb.reverse().toString());
        in.close();
        out.close();
    }

    static int MIN = Integer.MIN_VALUE;
    static int MAX = Integer.MAX_VALUE;
    static Reader in = new Reader();
    static PrintWriter out = new PrintWriter(System.out);

    static int[] readInt(int N) throws IOException { 
    	int arr[] = new int[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextInt(); 
    	} 
    	return arr;
    }
    
    static long[] readLong(int N) throws IOException { 
    	long arr[] = new long[N];
    	for(int i = 0; i < N; i++){ 
    		arr[i] = in.nextLong(); 
    	} 
    	return arr;
    }
    
    static void print(Object O) {  
    	out.print(O); 
    }
    
    static void println(Object O) { 
    	out.println(O); 
    }
    
    static void println(int arr[]) { 
    	for(int i = 0; i < arr.length; i++){ 
    		print(arr[i] + " "); 
    	} 
    	println(""); 
    }
    
    static void displayRuntime(long startTime){
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("Runtime: " + elapsedTime / 1000D);
    }
}

class Reader {
    BufferedReader reader;
    StringTokenizer tokenizer;

    Reader() {
        reader = new BufferedReader(new InputStreamReader(System.in));
        tokenizer = new StringTokenizer("");
    }

    String next() throws IOException {
        while (!tokenizer.hasMoreTokens() ) { 
            tokenizer = new StringTokenizer(reader.readLine()); 
        }
        return tokenizer.nextToken();
    }

    int nextInt() throws IOException { 
        return Integer.parseInt(next()); 
    }
    
    double nextDouble() throws IOException { 
        return Double.parseDouble(next());
    }
    
    long nextLong() throws IOException { 
        return Long.parseLong(next()); 
    }
    
    String nextLine() throws IOException { 
        return reader.readLine(); 
    }
    
    void close() throws IOException { 
        reader.close(); 
    }
}
