
import java.io.*;
import java.util.*;
import static java.lang.Math.*;

public class Main implements Runnable {

    private boolean console=false;
    private long MOD = 1000_000_007L;
    private int MAX = 1000_001;

    private void solve1(){

        long n = in.nl();

//        int idx=0;
//        long name = 0;
//        while (true){
//            name += (long)pow(26L,++idx);
//            if(name>=n){
//                name -= (long)pow(26L,idx);
//                break;
//            }
//        }
//
//        n-=name;
//
////        out.print(n+" "+name);
//
//        if(n==1){
//            for(int i=0;i<idx;++i){
//                out.print('a');
//            }
//            return;
//        }

        StringBuilder ans = new StringBuilder();
        while (n>0){

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        }

        ans.reverse();
        out.print(ans.toString());


    }

    private void solve() {
        int testCases = 1;
//        testCases = in.ni();
        while (testCases-->0){
            solve1();
        }
    }

    private void add(TreeMap<Integer, Integer> map, int key){
        map.put(key,map.getOrDefault(key,0)+1);
    }

    private void remove(TreeMap<Integer,Integer> map,int key){
        if(!map.containsKey(key))
            return;
        map.put(key,map.getOrDefault(key,0)-1);
        if(map.get(key)==0)
            map.remove(key);
    }

    @Override
    public void run() {
        long time = System.currentTimeMillis();
        try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        }catch (Exception e){
            e.printStackTrace(); System.exit(1);
        }
    }

    /* -------------------- Templates and Input Classes -------------------------------*/

    private FastInput in;
    private FastOutput out;
    public static void main(String[] args) throws Exception {
        new Main().run();
//        new Thread(null, new Main(), "Main", 1 << 27).start();
    }
    private void init() throws FileNotFoundException {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        try {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } catch (Exception ignored) {
        }
        out = new FastOutput(outputStream);
        in = new FastInput(inputStream);
    }
    private void maualAssert(int a,int b,int c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void maualAssert(long a,long b,long c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void sort(int[] arr) {
        List<Integer> list = new ArrayList<>();
        for (int object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private void sort(long[] arr) {
        List<Long> list = new ArrayList<>();
        for (long object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private long ModPow(long x, long y, long MOD) {
        long res = 1L;
        x = x % MOD;
        while (y >= 1L) {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        }
        return res;
    }
    private int gcd(int a, int b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private long gcd(long a, long b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private int[] arrInt(int n){
        int[] arr=new int[n];for(int i=0;i<n;++i)arr[i]=in.ni();
        return arr;
    }
    private long[] arrLong(int n){
        long[] arr=new long[n];for(int i=0;i<n;++i)arr[i]=in.nl();
        return arr;
    }

    private int arrMax(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMax(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private int arrMin(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMin(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    class FastInput { InputStream obj;
        public FastInput(InputStream obj) {
            this.obj = obj;
        }
        private byte inbuffer[] = new byte[1024];
        private int lenbuffer = 0, ptrbuffer = 0;
        private int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
            if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } }
            if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; }
        String ns() { int b = skip();StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); }return sb.toString();}
        int ni() {
            int num = 0, b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); }}
        long nl() { long num = 0;int b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } }
        private boolean isSpaceChar(int c) {
            return (!(c >= 33 && c <= 126));
        }
        int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; }
        float nf() {return Float.parseFloat(ns());}
        double nd() {return Double.parseDouble(ns());}
        char nc() {return (char) skip();}
    }

    class FastOutput{

        private final PrintWriter writer;

        public FastOutput(OutputStream outputStream) {
            writer = new PrintWriter(outputStream);
        }
        public PrintWriter getWriter(){
            return writer;
        }
        public void print(Object obj){
            writer.print(obj);
        }
        public void printLn(){
            writer.println();
        }
        public void printLn(Object obj){
            writer.print(obj);
            printLn();
        }
        public void printSp(Object obj){
            writer.print(obj+" ");
        }
        public void printArr(int[]  arr){
            for(int i:arr)
                printSp(i);
            printLn();
        }
        public void printArr(long[]  arr){
            for(long i:arr)
                printSp(i);
            printLn();
        }
        public void flush(){
            writer.flush();
        }
    }
}
 import java.io.*; io.* java import java.util.*; util.* java import static java.lang.Math.*; import static java.lang.Math.*; import static java.lang.Math.*; public class Main implements Runnable {

    private boolean console=false;
    private long MOD = 1000_000_007L;
    private int MAX = 1000_001;

    private void solve1(){

        long n = in.nl();

//        int idx=0;
//        long name = 0;
//        while (true){
//            name += (long)pow(26L,++idx);
//            if(name>=n){
//                name -= (long)pow(26L,idx);
//                break;
//            }
//        }
//
//        n-=name;
//
////        out.print(n+" "+name);
//
//        if(n==1){
//            for(int i=0;i<idx;++i){
//                out.print('a');
//            }
//            return;
//        }

        StringBuilder ans = new StringBuilder();
        while (n>0){

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        }

        ans.reverse();
        out.print(ans.toString());


    }

    private void solve() {
        int testCases = 1;
//        testCases = in.ni();
        while (testCases-->0){
            solve1();
        }
    }

    private void add(TreeMap<Integer, Integer> map, int key){
        map.put(key,map.getOrDefault(key,0)+1);
    }

    private void remove(TreeMap<Integer,Integer> map,int key){
        if(!map.containsKey(key))
            return;
        map.put(key,map.getOrDefault(key,0)-1);
        if(map.get(key)==0)
            map.remove(key);
    }

    @Override
    public void run() {
        long time = System.currentTimeMillis();
        try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        }catch (Exception e){
            e.printStackTrace(); System.exit(1);
        }
    }

    /* -------------------- Templates and Input Classes -------------------------------*/

    private FastInput in;
    private FastOutput out;
    public static void main(String[] args) throws Exception {
        new Main().run();
//        new Thread(null, new Main(), "Main", 1 << 27).start();
    }
    private void init() throws FileNotFoundException {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        try {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } catch (Exception ignored) {
        }
        out = new FastOutput(outputStream);
        in = new FastInput(inputStream);
    }
    private void maualAssert(int a,int b,int c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void maualAssert(long a,long b,long c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void sort(int[] arr) {
        List<Integer> list = new ArrayList<>();
        for (int object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private void sort(long[] arr) {
        List<Long> list = new ArrayList<>();
        for (long object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private long ModPow(long x, long y, long MOD) {
        long res = 1L;
        x = x % MOD;
        while (y >= 1L) {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        }
        return res;
    }
    private int gcd(int a, int b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private long gcd(long a, long b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private int[] arrInt(int n){
        int[] arr=new int[n];for(int i=0;i<n;++i)arr[i]=in.ni();
        return arr;
    }
    private long[] arrLong(int n){
        long[] arr=new long[n];for(int i=0;i<n;++i)arr[i]=in.nl();
        return arr;
    }

    private int arrMax(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMax(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private int arrMin(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMin(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    class FastInput { InputStream obj;
        public FastInput(InputStream obj) {
            this.obj = obj;
        }
        private byte inbuffer[] = new byte[1024];
        private int lenbuffer = 0, ptrbuffer = 0;
        private int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
            if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } }
            if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; }
        String ns() { int b = skip();StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); }return sb.toString();}
        int ni() {
            int num = 0, b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); }}
        long nl() { long num = 0;int b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } }
        private boolean isSpaceChar(int c) {
            return (!(c >= 33 && c <= 126));
        }
        int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; }
        float nf() {return Float.parseFloat(ns());}
        double nd() {return Double.parseDouble(ns());}
        char nc() {return (char) skip();}
    }

    class FastOutput{

        private final PrintWriter writer;

        public FastOutput(OutputStream outputStream) {
            writer = new PrintWriter(outputStream);
        }
        public PrintWriter getWriter(){
            return writer;
        }
        public void print(Object obj){
            writer.print(obj);
        }
        public void printLn(){
            writer.println();
        }
        public void printLn(Object obj){
            writer.print(obj);
            printLn();
        }
        public void printSp(Object obj){
            writer.print(obj+" ");
        }
        public void printArr(int[]  arr){
            for(int i:arr)
                printSp(i);
            printLn();
        }
        public void printArr(long[]  arr){
            for(long i:arr)
                printSp(i);
            printLn();
        }
        public void flush(){
            writer.flush();
        }
    }
} Main private boolean console=false; console false private long MOD = 1000_000_007L; MOD 1000_000_007L private int MAX = 1000_001; MAX 1000_001 private FastInput in; in private FastOutput out; out private void solve1(){

        long n = in.nl();

//        int idx=0;
//        long name = 0;
//        while (true){
//            name += (long)pow(26L,++idx);
//            if(name>=n){
//                name -= (long)pow(26L,idx);
//                break;
//            }
//        }
//
//        n-=name;
//
////        out.print(n+" "+name);
//
//        if(n==1){
//            for(int i=0;i<idx;++i){
//                out.print('a');
//            }
//            return;
//        }

        StringBuilder ans = new StringBuilder();
        while (n>0){

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        }

        ans.reverse();
        out.print(ans.toString());


    } solve1 {

        long n = in.nl();

//        int idx=0;
//        long name = 0;
//        while (true){
//            name += (long)pow(26L,++idx);
//            if(name>=n){
//                name -= (long)pow(26L,idx);
//                break;
//            }
//        }
//
//        n-=name;
//
////        out.print(n+" "+name);
//
//        if(n==1){
//            for(int i=0;i<idx;++i){
//                out.print('a');
//            }
//            return;
//        }

        StringBuilder ans = new StringBuilder();
        while (n>0){

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        }

        ans.reverse();
        out.print(ans.toString());


    } long n = in.nl(); n in.nl() in.nl in StringBuilder ans = new StringBuilder(); ans new StringBuilder() while (n>0){

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        } n>0 n 0 {

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        } long t = n%26L; t n%26L n 26L if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1)); t==0 t 0 ans.append('z') ans.append ans 'z' ans.append((char)('a'+t-1)) ans.append ans (char)('a'+t-1) 'a'+t 'a' t 1 if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            } n%26L==0 n%26L n 26L 0 {
                n /= 26L;
                n--;
            } n /= 26L n 26L n-- n {
                n/=26;
            } n/=26 n 26 ans.reverse() ans.reverse ans out.print(ans.toString()) out.print out ans.toString() ans.toString ans private void solve() {
        int testCases = 1;
//        testCases = in.ni();
        while (testCases-->0){
            solve1();
        }
    } solve {
        int testCases = 1;
//        testCases = in.ni();
        while (testCases-->0){
            solve1();
        }
    } int testCases = 1; testCases 1 while (testCases-->0){
            solve1();
        } testCases-->0 testCases-- testCases 0 {
            solve1();
        } solve1() solve1 private void add(TreeMap<Integer, Integer> map, int key){
        map.put(key,map.getOrDefault(key,0)+1);
    } add {
        map.put(key,map.getOrDefault(key,0)+1);
    } map.put(key,map.getOrDefault(key,0)+1) map.put map key map.getOrDefault(key,0)+1 map.getOrDefault(key,0) map.getOrDefault map key 0 1 TreeMap<Integer, Integer> map map int key key private void remove(TreeMap<Integer,Integer> map,int key){
        if(!map.containsKey(key))
            return;
        map.put(key,map.getOrDefault(key,0)-1);
        if(map.get(key)==0)
            map.remove(key);
    } remove {
        if(!map.containsKey(key))
            return;
        map.put(key,map.getOrDefault(key,0)-1);
        if(map.get(key)==0)
            map.remove(key);
    } if(!map.containsKey(key))
            return; !map.containsKey(key) map.containsKey(key) map.containsKey map key return; map.put(key,map.getOrDefault(key,0)-1) map.put map key map.getOrDefault(key,0)-1 map.getOrDefault(key,0) map.getOrDefault map key 0 1 if(map.get(key)==0)
            map.remove(key); map.get(key)==0 map.get(key) map.get map key 0 map.remove(key) map.remove map key TreeMap<Integer,Integer> map map int key key @Override
    public void run() {
        long time = System.currentTimeMillis();
        try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        }catch (Exception e){
            e.printStackTrace(); System.exit(1);
        }
    } run {
        long time = System.currentTimeMillis();
        try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        }catch (Exception e){
            e.printStackTrace(); System.exit(1);
        }
    } long time = System.currentTimeMillis(); time System.currentTimeMillis() System.currentTimeMillis System try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } FileNotFoundException e {
            e.printStackTrace();
        } e.printStackTrace() e.printStackTrace e {
            init();
        } init() init try {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        }catch (Exception e){
            e.printStackTrace(); System.exit(1);
        } catch (Exception e){
            e.printStackTrace(); System.exit(1);
        } Exception e {
            e.printStackTrace(); System.exit(1);
        } e.printStackTrace() e.printStackTrace e System.exit(1) System.exit System 1 {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        } solve() solve out.flush() out.flush out System.err.println(System.currentTimeMillis()-time) System.err.println System.err System System.err System.currentTimeMillis()-time System.currentTimeMillis() System.currentTimeMillis System time System.exit(0) System.exit System 0 public static void main(String[] args) throws Exception {
        new Main().run();
//        new Thread(null, new Main(), "Main", 1 << 27).start();
    } main {
        new Main().run();
//        new Thread(null, new Main(), "Main", 1 << 27).start();
    } new Main().run() new Main().run new Main() String[] args args private void init() throws FileNotFoundException {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        try {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } catch (Exception ignored) {
        }
        out = new FastOutput(outputStream);
        in = new FastInput(inputStream);
    } init {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        try {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } catch (Exception ignored) {
        }
        out = new FastOutput(outputStream);
        in = new FastInput(inputStream);
    } InputStream inputStream = System.in; inputStream System.in System System.in OutputStream outputStream = System.out; outputStream System.out System System.out try {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } catch (Exception ignored) {
        } catch (Exception ignored) {
        } Exception ignored {
        } {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            } !console && System.getProperty("user.name").equals("puneet") !console console System.getProperty("user.name").equals("puneet") System.getProperty("user.name").equals System.getProperty("user.name") System.getProperty System "user.name" "puneet" {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            } outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt") outputStream new FileOutputStream("/home/puneet/Desktop/output.txt") inputStream = new FileInputStream("/home/puneet/Desktop/input.txt") inputStream new FileInputStream("/home/puneet/Desktop/input.txt") out = new FastOutput(outputStream) out new FastOutput(outputStream) in = new FastInput(inputStream) in new FastInput(inputStream) private void maualAssert(int a,int b,int c){
        if(a<b || a>c) throw new RuntimeException();
    } maualAssert {
        if(a<b || a>c) throw new RuntimeException();
    } if(a<b || a>c) throw new RuntimeException(); a<b || a>c a<b a b a>c a c throw new RuntimeException(); new RuntimeException() int a a int b b int c c private void maualAssert(long a,long b,long c){
        if(a<b || a>c) throw new RuntimeException();
    } maualAssert {
        if(a<b || a>c) throw new RuntimeException();
    } if(a<b || a>c) throw new RuntimeException(); a<b || a>c a<b a b a>c a c throw new RuntimeException(); new RuntimeException() long a a long b b long c c private void sort(int[] arr) {
        List<Integer> list = new ArrayList<>();
        for (int object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    } sort {
        List<Integer> list = new ArrayList<>();
        for (int object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    } List<Integer> list = new ArrayList<>(); list new ArrayList<>() for (int object : arr) list.add(object); int object arr list.add(object); list.add(object) list.add list object Collections.sort(list) Collections.sort Collections list for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i); int i = 0; int i = 0; i 0 i < list.size() i list.size() list.size list ++i ++i i arr[i] = list.get(i); arr[i] = list.get(i) arr[i] arr i list.get(i) list.get list i int[] arr arr private void sort(long[] arr) {
        List<Long> list = new ArrayList<>();
        for (long object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    } sort {
        List<Long> list = new ArrayList<>();
        for (long object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    } List<Long> list = new ArrayList<>(); list new ArrayList<>() for (long object : arr) list.add(object); long object arr list.add(object); list.add(object) list.add list object Collections.sort(list) Collections.sort Collections list for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i); int i = 0; int i = 0; i 0 i < list.size() i list.size() list.size list ++i ++i i arr[i] = list.get(i); arr[i] = list.get(i) arr[i] arr i list.get(i) list.get list i long[] arr arr private long ModPow(long x, long y, long MOD) {
        long res = 1L;
        x = x % MOD;
        while (y >= 1L) {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        }
        return res;
    } ModPow {
        long res = 1L;
        x = x % MOD;
        while (y >= 1L) {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        }
        return res;
    } long res = 1L; res 1L x = x % MOD x x % MOD x MOD while (y >= 1L) {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        } y >= 1L y 1L {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        } if ((y & 1L) > 0) res = (res * x) % MOD; (y & 1L) > 0 (y & 1L) y 1L 0 res = (res * x) % MOD res (res * x) % MOD (res * x) res x MOD x = (x * x) % MOD x (x * x) % MOD (x * x) x x MOD y >>= 1L y 1L return res; res long x x long y y long MOD MOD private int gcd(int a, int b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    } gcd {
        if (a == 0) return b;
        return gcd(b % a, a);
    } if (a == 0) return b; a == 0 a 0 return b; b return gcd(b % a, a); gcd(b % a, a) gcd b % a b a a int a a int b b private long gcd(long a, long b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    } gcd {
        if (a == 0) return b;
        return gcd(b % a, a);
    } if (a == 0) return b; a == 0 a 0 return b; b return gcd(b % a, a); gcd(b % a, a) gcd b % a b a a long a a long b b private int[] arrInt(int n){
        int[] arr=new int[n];for(int i=0;i<n;++i)arr[i]=in.ni();
        return arr;
    } arrInt {
        int[] arr=new int[n];for(int i=0;i<n;++i)arr[i]=in.ni();
        return arr;
    } int[] arr=new int[n]; arr new int[n] n for(int i=0;i<n;++i)arr[i]=in.ni(); int i=0; int i=0; i 0 i<n i n ++i ++i i arr[i]=in.ni(); arr[i]=in.ni() arr[i] arr i in.ni() in.ni in return arr; arr int n n private long[] arrLong(int n){
        long[] arr=new long[n];for(int i=0;i<n;++i)arr[i]=in.nl();
        return arr;
    } arrLong {
        long[] arr=new long[n];for(int i=0;i<n;++i)arr[i]=in.nl();
        return arr;
    } long[] arr=new long[n]; arr new long[n] n for(int i=0;i<n;++i)arr[i]=in.nl(); int i=0; int i=0; i 0 i<n i n ++i ++i i arr[i]=in.nl(); arr[i]=in.nl() arr[i] arr i in.nl() in.nl in return arr; arr int n n private int arrMax(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    } arrMax {
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    } int ans = arr[0]; ans arr[0] arr 0 for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        } int i=1; int i=1; i 1 i<arr.length i arr.length arr arr.length ++i ++i i {
            ans = max(ans,arr[i]);
        } {
            ans = max(ans,arr[i]);
        } ans = max(ans,arr[i]) ans max(ans,arr[i]) max ans arr[i] arr i return ans; ans int[] arr arr private long arrMax(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    } arrMax {
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    } long ans = arr[0]; ans arr[0] arr 0 for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        } int i=1; int i=1; i 1 i<arr.length i arr.length arr arr.length ++i ++i i {
            ans = max(ans,arr[i]);
        } {
            ans = max(ans,arr[i]);
        } ans = max(ans,arr[i]) ans max(ans,arr[i]) max ans arr[i] arr i return ans; ans long[] arr arr private int arrMin(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    } arrMin {
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    } int ans = arr[0]; ans arr[0] arr 0 for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        } int i=1; int i=1; i 1 i<arr.length i arr.length arr arr.length ++i ++i i {
            ans = max(ans,arr[i]);
        } {
            ans = max(ans,arr[i]);
        } ans = max(ans,arr[i]) ans max(ans,arr[i]) max ans arr[i] arr i return ans; ans int[] arr arr private long arrMin(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    } arrMin {
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    } long ans = arr[0]; ans arr[0] arr 0 for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        } int i=1; int i=1; i 1 i<arr.length i arr.length arr arr.length ++i ++i i {
            ans = max(ans,arr[i]);
        } {
            ans = max(ans,arr[i]);
        } ans = max(ans,arr[i]) ans max(ans,arr[i]) max ans arr[i] arr i return ans; ans long[] arr arr class FastInput { InputStream obj;
        public FastInput(InputStream obj) {
            this.obj = obj;
        }
        private byte inbuffer[] = new byte[1024];
        private int lenbuffer = 0, ptrbuffer = 0;
        private int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
            if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } }
            if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; }
        String ns() { int b = skip();StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); }return sb.toString();}
        int ni() {
            int num = 0, b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); }}
        long nl() { long num = 0;int b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } }
        private boolean isSpaceChar(int c) {
            return (!(c >= 33 && c <= 126));
        }
        int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; }
        float nf() {return Float.parseFloat(ns());}
        double nd() {return Double.parseDouble(ns());}
        char nc() {return (char) skip();}
    } FastInput InputStream obj; obj private byte inbuffer[] = new byte[1024]; inbuffer new byte[1024] 1024 private int lenbuffer = 0 lenbuffer 0 ptrbuffer = 0; ptrbuffer 0 public FastInput(InputStream obj) {
            this.obj = obj;
        } FastInput {
            this.obj = obj;
        } this.obj = obj this.obj this this.obj obj InputStream obj obj private int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
            if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } }
            if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; } readByte { if (lenbuffer == -1) throw new InputMismatchException();
            if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } }
            if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; } if (lenbuffer == -1) throw new InputMismatchException(); lenbuffer == -1 lenbuffer -1 1 throw new InputMismatchException(); new InputMismatchException() if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } } ptrbuffer >= lenbuffer ptrbuffer lenbuffer { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } } ptrbuffer = 0 ptrbuffer 0 try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } catch (IOException e) { throw new InputMismatchException(); } IOException e { throw new InputMismatchException(); } throw new InputMismatchException(); new InputMismatchException() { lenbuffer = obj.read(inbuffer);
                } lenbuffer = obj.read(inbuffer) lenbuffer obj.read(inbuffer) obj.read obj inbuffer if (lenbuffer <= 0) return -1; lenbuffer <= 0 lenbuffer 0 return -1; -1 1 return inbuffer[ptrbuffer++]; inbuffer[ptrbuffer++] inbuffer ptrbuffer++ ptrbuffer String ns() { int b = skip();StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); }return sb.toString();} ns { int b = skip();StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); }return sb.toString();} int b = skip(); b skip() skip StringBuilder sb = new StringBuilder(); sb new StringBuilder() while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); } !(isSpaceChar(b)) (isSpaceChar(b)) isSpaceChar b { sb.appendCodePoint(b);b = readByte(); } sb.appendCodePoint(b) sb.appendCodePoint sb b b = readByte() b readByte() readByte return sb.toString(); sb.toString() sb.toString sb int ni() {
            int num = 0, b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); }} ni {
            int num = 0, b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); }} int num = 0 num 0 b; b boolean minus = false; minus false while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ; (b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-') (b = readByte()) != -1 (b = readByte()) b readByte() readByte -1 1 !((b >= '0' && b <= '9') || b == '-') ((b >= '0' && b <= '9') || b == '-') (b >= '0' && b <= '9') b >= '0' b '0' b <= '9' b '9' b == '-' b '-' if (b == '-') { minus = true;b = readByte(); } b == '-' b '-' { minus = true;b = readByte(); } minus = true minus true b = readByte() b readByte() readByte while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } true { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; } b >= '0' && b <= '9' b >= '0' b '0' b <= '9' b '9' { num = num * 10 + (b - '0'); } num = num * 10 + (b - '0') num num * 10 + (b - '0') num * 10 num 10 (b - '0') b '0' {
                return minus ? -num : num; } return minus ? -num : num; minus ? -num : num minus -num num num b = readByte() b readByte() readByte long nl() { long num = 0;int b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } } nl { long num = 0;int b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } } long num = 0; num 0 int b; b boolean minus = false; minus false while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ; (b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-') (b = readByte()) != -1 (b = readByte()) b readByte() readByte -1 1 !((b >= '0' && b <= '9') || b == '-') ((b >= '0' && b <= '9') || b == '-') (b >= '0' && b <= '9') b >= '0' b '0' b <= '9' b '9' b == '-' b '-' if (b == '-') { minus = true;b = readByte(); } b == '-' b '-' { minus = true;b = readByte(); } minus = true minus true b = readByte() b readByte() readByte while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } true { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; } b >= '0' && b <= '9' b >= '0' b '0' b <= '9' b '9' { num = num * 10L + (b - '0'); } num = num * 10L + (b - '0') num num * 10L + (b - '0') num * 10L num 10L (b - '0') b '0' {
                return minus ? -num : num; } return minus ? -num : num; minus ? -num : num minus -num num num b = readByte() b readByte() readByte private boolean isSpaceChar(int c) {
            return (!(c >= 33 && c <= 126));
        } isSpaceChar {
            return (!(c >= 33 && c <= 126));
        } return (!(c >= 33 && c <= 126)); (!(c >= 33 && c <= 126)) (c >= 33 && c <= 126) c >= 33 c 33 c <= 126 c 126 int c c int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; } skip { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; } int b; b while ((b = readByte()) != -1 && isSpaceChar(b)) ; (b = readByte()) != -1 && isSpaceChar(b) (b = readByte()) != -1 (b = readByte()) b readByte() readByte -1 1 isSpaceChar(b) isSpaceChar b return b; b float nf() {return Float.parseFloat(ns());} nf {return Float.parseFloat(ns());} return Float.parseFloat(ns()); Float.parseFloat(ns()) Float.parseFloat Float ns() ns double nd() {return Double.parseDouble(ns());} nd {return Double.parseDouble(ns());} return Double.parseDouble(ns()); Double.parseDouble(ns()) Double.parseDouble Double ns() ns char nc() {return (char) skip();} nc {return (char) skip();} return (char) skip(); (char) skip() skip class FastOutput{

        private final PrintWriter writer;

        public FastOutput(OutputStream outputStream) {
            writer = new PrintWriter(outputStream);
        }
        public PrintWriter getWriter(){
            return writer;
        }
        public void print(Object obj){
            writer.print(obj);
        }
        public void printLn(){
            writer.println();
        }
        public void printLn(Object obj){
            writer.print(obj);
            printLn();
        }
        public void printSp(Object obj){
            writer.print(obj+" ");
        }
        public void printArr(int[]  arr){
            for(int i:arr)
                printSp(i);
            printLn();
        }
        public void printArr(long[]  arr){
            for(long i:arr)
                printSp(i);
            printLn();
        }
        public void flush(){
            writer.flush();
        }
    } FastOutput private final PrintWriter writer; writer public FastOutput(OutputStream outputStream) {
            writer = new PrintWriter(outputStream);
        } FastOutput {
            writer = new PrintWriter(outputStream);
        } writer = new PrintWriter(outputStream) writer new PrintWriter(outputStream) OutputStream outputStream outputStream public PrintWriter getWriter(){
            return writer;
        } getWriter {
            return writer;
        } return writer; writer public void print(Object obj){
            writer.print(obj);
        } print {
            writer.print(obj);
        } writer.print(obj) writer.print writer obj Object obj obj public void printLn(){
            writer.println();
        } printLn {
            writer.println();
        } writer.println() writer.println writer public void printLn(Object obj){
            writer.print(obj);
            printLn();
        } printLn {
            writer.print(obj);
            printLn();
        } writer.print(obj) writer.print writer obj printLn() printLn Object obj obj public void printSp(Object obj){
            writer.print(obj+" ");
        } printSp {
            writer.print(obj+" ");
        } writer.print(obj+" ") writer.print writer obj+" " obj " " Object obj obj public void printArr(int[]  arr){
            for(int i:arr)
                printSp(i);
            printLn();
        } printArr {
            for(int i:arr)
                printSp(i);
            printLn();
        } for(int i:arr)
                printSp(i); int i arr printSp(i); printSp(i) printSp i printLn() printLn int[]  arr arr public void printArr(long[]  arr){
            for(long i:arr)
                printSp(i);
            printLn();
        } printArr {
            for(long i:arr)
                printSp(i);
            printLn();
        } for(long i:arr)
                printSp(i); long i arr printSp(i); printSp(i) printSp i printLn() printLn long[]  arr arr public void flush(){
            writer.flush();
        } flush {
            writer.flush();
        } writer.flush() writer.flush writer Runnable public class Main implements Runnable {

    private boolean console=false;
    private long MOD = 1000_000_007L;
    private int MAX = 1000_001;

    private void solve1(){

        long n = in.nl();

//        int idx=0;
//        long name = 0;
//        while (true){
//            name += (long)pow(26L,++idx);
//            if(name>=n){
//                name -= (long)pow(26L,idx);
//                break;
//            }
//        }
//
//        n-=name;
//
////        out.print(n+" "+name);
//
//        if(n==1){
//            for(int i=0;i<idx;++i){
//                out.print('a');
//            }
//            return;
//        }

        StringBuilder ans = new StringBuilder();
        while (n>0){

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        }

        ans.reverse();
        out.print(ans.toString());


    }

    private void solve() {
        int testCases = 1;
//        testCases = in.ni();
        while (testCases-->0){
            solve1();
        }
    }

    private void add(TreeMap<Integer, Integer> map, int key){
        map.put(key,map.getOrDefault(key,0)+1);
    }

    private void remove(TreeMap<Integer,Integer> map,int key){
        if(!map.containsKey(key))
            return;
        map.put(key,map.getOrDefault(key,0)-1);
        if(map.get(key)==0)
            map.remove(key);
    }

    @Override
    public void run() {
        long time = System.currentTimeMillis();
        try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        }catch (Exception e){
            e.printStackTrace(); System.exit(1);
        }
    }

    /* -------------------- Templates and Input Classes -------------------------------*/

    private FastInput in;
    private FastOutput out;
    public static void main(String[] args) throws Exception {
        new Main().run();
//        new Thread(null, new Main(), "Main", 1 << 27).start();
    }
    private void init() throws FileNotFoundException {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        try {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } catch (Exception ignored) {
        }
        out = new FastOutput(outputStream);
        in = new FastInput(inputStream);
    }
    private void maualAssert(int a,int b,int c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void maualAssert(long a,long b,long c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void sort(int[] arr) {
        List<Integer> list = new ArrayList<>();
        for (int object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private void sort(long[] arr) {
        List<Long> list = new ArrayList<>();
        for (long object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private long ModPow(long x, long y, long MOD) {
        long res = 1L;
        x = x % MOD;
        while (y >= 1L) {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        }
        return res;
    }
    private int gcd(int a, int b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private long gcd(long a, long b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private int[] arrInt(int n){
        int[] arr=new int[n];for(int i=0;i<n;++i)arr[i]=in.ni();
        return arr;
    }
    private long[] arrLong(int n){
        long[] arr=new long[n];for(int i=0;i<n;++i)arr[i]=in.nl();
        return arr;
    }

    private int arrMax(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMax(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private int arrMin(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMin(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    class FastInput { InputStream obj;
        public FastInput(InputStream obj) {
            this.obj = obj;
        }
        private byte inbuffer[] = new byte[1024];
        private int lenbuffer = 0, ptrbuffer = 0;
        private int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
            if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } }
            if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; }
        String ns() { int b = skip();StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); }return sb.toString();}
        int ni() {
            int num = 0, b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); }}
        long nl() { long num = 0;int b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } }
        private boolean isSpaceChar(int c) {
            return (!(c >= 33 && c <= 126));
        }
        int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; }
        float nf() {return Float.parseFloat(ns());}
        double nd() {return Double.parseDouble(ns());}
        char nc() {return (char) skip();}
    }

    class FastOutput{

        private final PrintWriter writer;

        public FastOutput(OutputStream outputStream) {
            writer = new PrintWriter(outputStream);
        }
        public PrintWriter getWriter(){
            return writer;
        }
        public void print(Object obj){
            writer.print(obj);
        }
        public void printLn(){
            writer.println();
        }
        public void printLn(Object obj){
            writer.print(obj);
            printLn();
        }
        public void printSp(Object obj){
            writer.print(obj+" ");
        }
        public void printArr(int[]  arr){
            for(int i:arr)
                printSp(i);
            printLn();
        }
        public void printArr(long[]  arr){
            for(long i:arr)
                printSp(i);
            printLn();
        }
        public void flush(){
            writer.flush();
        }
    }
} public class Main implements Runnable {

    private boolean console=false;
    private long MOD = 1000_000_007L;
    private int MAX = 1000_001;

    private void solve1(){

        long n = in.nl();

//        int idx=0;
//        long name = 0;
//        while (true){
//            name += (long)pow(26L,++idx);
//            if(name>=n){
//                name -= (long)pow(26L,idx);
//                break;
//            }
//        }
//
//        n-=name;
//
////        out.print(n+" "+name);
//
//        if(n==1){
//            for(int i=0;i<idx;++i){
//                out.print('a');
//            }
//            return;
//        }

        StringBuilder ans = new StringBuilder();
        while (n>0){

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        }

        ans.reverse();
        out.print(ans.toString());


    }

    private void solve() {
        int testCases = 1;
//        testCases = in.ni();
        while (testCases-->0){
            solve1();
        }
    }

    private void add(TreeMap<Integer, Integer> map, int key){
        map.put(key,map.getOrDefault(key,0)+1);
    }

    private void remove(TreeMap<Integer,Integer> map,int key){
        if(!map.containsKey(key))
            return;
        map.put(key,map.getOrDefault(key,0)-1);
        if(map.get(key)==0)
            map.remove(key);
    }

    @Override
    public void run() {
        long time = System.currentTimeMillis();
        try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        }catch (Exception e){
            e.printStackTrace(); System.exit(1);
        }
    }

    /* -------------------- Templates and Input Classes -------------------------------*/

    private FastInput in;
    private FastOutput out;
    public static void main(String[] args) throws Exception {
        new Main().run();
//        new Thread(null, new Main(), "Main", 1 << 27).start();
    }
    private void init() throws FileNotFoundException {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        try {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } catch (Exception ignored) {
        }
        out = new FastOutput(outputStream);
        in = new FastInput(inputStream);
    }
    private void maualAssert(int a,int b,int c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void maualAssert(long a,long b,long c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void sort(int[] arr) {
        List<Integer> list = new ArrayList<>();
        for (int object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private void sort(long[] arr) {
        List<Long> list = new ArrayList<>();
        for (long object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private long ModPow(long x, long y, long MOD) {
        long res = 1L;
        x = x % MOD;
        while (y >= 1L) {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        }
        return res;
    }
    private int gcd(int a, int b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private long gcd(long a, long b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private int[] arrInt(int n){
        int[] arr=new int[n];for(int i=0;i<n;++i)arr[i]=in.ni();
        return arr;
    }
    private long[] arrLong(int n){
        long[] arr=new long[n];for(int i=0;i<n;++i)arr[i]=in.nl();
        return arr;
    }

    private int arrMax(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMax(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private int arrMin(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMin(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    class FastInput { InputStream obj;
        public FastInput(InputStream obj) {
            this.obj = obj;
        }
        private byte inbuffer[] = new byte[1024];
        private int lenbuffer = 0, ptrbuffer = 0;
        private int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
            if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } }
            if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; }
        String ns() { int b = skip();StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); }return sb.toString();}
        int ni() {
            int num = 0, b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); }}
        long nl() { long num = 0;int b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } }
        private boolean isSpaceChar(int c) {
            return (!(c >= 33 && c <= 126));
        }
        int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; }
        float nf() {return Float.parseFloat(ns());}
        double nd() {return Double.parseDouble(ns());}
        char nc() {return (char) skip();}
    }

    class FastOutput{

        private final PrintWriter writer;

        public FastOutput(OutputStream outputStream) {
            writer = new PrintWriter(outputStream);
        }
        public PrintWriter getWriter(){
            return writer;
        }
        public void print(Object obj){
            writer.print(obj);
        }
        public void printLn(){
            writer.println();
        }
        public void printLn(Object obj){
            writer.print(obj);
            printLn();
        }
        public void printSp(Object obj){
            writer.print(obj+" ");
        }
        public void printArr(int[]  arr){
            for(int i:arr)
                printSp(i);
            printLn();
        }
        public void printArr(long[]  arr){
            for(long i:arr)
                printSp(i);
            printLn();
        }
        public void flush(){
            writer.flush();
        }
    }
} Main

import java.io.*;
import java.util.*;
import static java.lang.Math.*;

public class Main implements Runnable {

    private boolean console=false;
    private long MOD = 1000_000_007L;
    private int MAX = 1000_001;

    private void solve1(){

        long n = in.nl();

//        int idx=0;
//        long name = 0;
//        while (true){
//            name += (long)pow(26L,++idx);
//            if(name>=n){
//                name -= (long)pow(26L,idx);
//                break;
//            }
//        }
//
//        n-=name;
//
////        out.print(n+" "+name);
//
//        if(n==1){
//            for(int i=0;i<idx;++i){
//                out.print('a');
//            }
//            return;
//        }

        StringBuilder ans = new StringBuilder();
        while (n>0){

            long t = n%26L;

//            out.printLn(n);

            if(t==0)
                ans.append('z');
            else
                ans.append((char)('a'+t-1));

            if(n%26L==0) {
                n /= 26L;
                n--;
            }else {
                n/=26;
            }

        }

        ans.reverse();
        out.print(ans.toString());


    }

    private void solve() {
        int testCases = 1;
//        testCases = in.ni();
        while (testCases-->0){
            solve1();
        }
    }

    private void add(TreeMap<Integer, Integer> map, int key){
        map.put(key,map.getOrDefault(key,0)+1);
    }

    private void remove(TreeMap<Integer,Integer> map,int key){
        if(!map.containsKey(key))
            return;
        map.put(key,map.getOrDefault(key,0)-1);
        if(map.get(key)==0)
            map.remove(key);
    }

    @Override
    public void run() {
        long time = System.currentTimeMillis();
        try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            solve();
            out.flush();
            System.err.println(System.currentTimeMillis()-time);
            System.exit(0);
        }catch (Exception e){
            e.printStackTrace(); System.exit(1);
        }
    }

    /* -------------------- Templates and Input Classes -------------------------------*/

    private FastInput in;
    private FastOutput out;
    public static void main(String[] args) throws Exception {
        new Main().run();
//        new Thread(null, new Main(), "Main", 1 << 27).start();
    }
    private void init() throws FileNotFoundException {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        try {
            if (!console && System.getProperty("user.name").equals("puneet")) {
                outputStream = new FileOutputStream("/home/puneet/Desktop/output.txt");
                inputStream = new FileInputStream("/home/puneet/Desktop/input.txt");
            }
        } catch (Exception ignored) {
        }
        out = new FastOutput(outputStream);
        in = new FastInput(inputStream);
    }
    private void maualAssert(int a,int b,int c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void maualAssert(long a,long b,long c){
        if(a<b || a>c) throw new RuntimeException();
    }
    private void sort(int[] arr) {
        List<Integer> list = new ArrayList<>();
        for (int object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private void sort(long[] arr) {
        List<Long> list = new ArrayList<>();
        for (long object : arr) list.add(object);
        Collections.sort(list);
        for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
    }
    private long ModPow(long x, long y, long MOD) {
        long res = 1L;
        x = x % MOD;
        while (y >= 1L) {
            if ((y & 1L) > 0) res = (res * x) % MOD;
            x = (x * x) % MOD;
            y >>= 1L;
        }
        return res;
    }
    private int gcd(int a, int b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private long gcd(long a, long b) {
        if (a == 0) return b;
        return gcd(b % a, a);
    }
    private int[] arrInt(int n){
        int[] arr=new int[n];for(int i=0;i<n;++i)arr[i]=in.ni();
        return arr;
    }
    private long[] arrLong(int n){
        long[] arr=new long[n];for(int i=0;i<n;++i)arr[i]=in.nl();
        return arr;
    }

    private int arrMax(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMax(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private int arrMin(int[] arr){
        int ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    private long arrMin(long[] arr){
        long ans = arr[0];
        for(int i=1;i<arr.length;++i){
            ans = max(ans,arr[i]);
        }
        return ans;
    }

    class FastInput { InputStream obj;
        public FastInput(InputStream obj) {
            this.obj = obj;
        }
        private byte inbuffer[] = new byte[1024];
        private int lenbuffer = 0, ptrbuffer = 0;
        private int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
            if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
                try { lenbuffer = obj.read(inbuffer);
                } catch (IOException e) { throw new InputMismatchException(); } }
            if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; }
        String ns() { int b = skip();StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) // when nextLine, (isSpaceChar(b) && b!=' ')
            { sb.appendCodePoint(b);b = readByte(); }return sb.toString();}
        int ni() {
            int num = 0, b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); }}
        long nl() { long num = 0;int b;boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') { minus = true;b = readByte(); }
            while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
                return minus ? -num : num; }b = readByte(); } }
        private boolean isSpaceChar(int c) {
            return (!(c >= 33 && c <= 126));
        }
        int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; }
        float nf() {return Float.parseFloat(ns());}
        double nd() {return Double.parseDouble(ns());}
        char nc() {return (char) skip();}
    }

    class FastOutput{

        private final PrintWriter writer;

        public FastOutput(OutputStream outputStream) {
            writer = new PrintWriter(outputStream);
        }
        public PrintWriter getWriter(){
            return writer;
        }
        public void print(Object obj){
            writer.print(obj);
        }
        public void printLn(){
            writer.println();
        }
        public void printLn(Object obj){
            writer.print(obj);
            printLn();
        }
        public void printSp(Object obj){
            writer.print(obj+" ");
        }
        public void printArr(int[]  arr){
            for(int i:arr)
                printSp(i);
            printLn();
        }
        public void printArr(long[]  arr){
            for(long i:arr)
                printSp(i);
            printLn();
        }
        public void flush(){
            writer.flush();
        }
    }
}

