import java.util.Scanner;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		long N = sc.nextLong();

		// 文字列の長さを求める
		long[] max = new long[12];
		int l = 1;
		max[l] = 26;
		while(N > max[l]) {
			l++;
			max[l] = (max[l - 1] + 1) * 26;
		}


		// l桁の範囲で、元の数字をa~zを0~25の26進数として変換する
		N = N - max[l - 1] - 1;
		char[] c = new char[l];
		for (int i = 0; i < l; i++) {
			c[i] = (char)('a' + (N % 26));
			N /= 26;
		}
		for (int i = l - 1; i >= 0; i--) {
			System.out.print(c[i]);
		}
		System.out.println();
	}
} import java.util.Scanner; Scanner java.util class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		long N = sc.nextLong();

		// 文字列の長さを求める
		long[] max = new long[12];
		int l = 1;
		max[l] = 26;
		while(N > max[l]) {
			l++;
			max[l] = (max[l - 1] + 1) * 26;
		}


		// l桁の範囲で、元の数字をa~zを0~25の26進数として変換する
		N = N - max[l - 1] - 1;
		char[] c = new char[l];
		for (int i = 0; i < l; i++) {
			c[i] = (char)('a' + (N % 26));
			N /= 26;
		}
		for (int i = l - 1; i >= 0; i--) {
			System.out.print(c[i]);
		}
		System.out.println();
	}
} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		long N = sc.nextLong();

		// 文字列の長さを求める
		long[] max = new long[12];
		int l = 1;
		max[l] = 26;
		while(N > max[l]) {
			l++;
			max[l] = (max[l - 1] + 1) * 26;
		}


		// l桁の範囲で、元の数字をa~zを0~25の26進数として変換する
		N = N - max[l - 1] - 1;
		char[] c = new char[l];
		for (int i = 0; i < l; i++) {
			c[i] = (char)('a' + (N % 26));
			N /= 26;
		}
		for (int i = l - 1; i >= 0; i--) {
			System.out.print(c[i]);
		}
		System.out.println();
	} main {
		Scanner sc = new Scanner(System.in);
		long N = sc.nextLong();

		// 文字列の長さを求める
		long[] max = new long[12];
		int l = 1;
		max[l] = 26;
		while(N > max[l]) {
			l++;
			max[l] = (max[l - 1] + 1) * 26;
		}


		// l桁の範囲で、元の数字をa~zを0~25の26進数として変換する
		N = N - max[l - 1] - 1;
		char[] c = new char[l];
		for (int i = 0; i < l; i++) {
			c[i] = (char)('a' + (N % 26));
			N /= 26;
		}
		for (int i = l - 1; i >= 0; i--) {
			System.out.print(c[i]);
		}
		System.out.println();
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) long N = sc.nextLong(); N sc.nextLong() sc.nextLong sc long[] max = new long[12]; max new long[12] 12 int l = 1; l 1 max[l] = 26 max[l] max l 26 while(N > max[l]) {
			l++;
			max[l] = (max[l - 1] + 1) * 26;
		} N > max[l] N max[l] max l {
			l++;
			max[l] = (max[l - 1] + 1) * 26;
		} l++ l max[l] = (max[l - 1] + 1) * 26 max[l] max l (max[l - 1] + 1) * 26 (max[l - 1] + 1) max[l - 1] max l - 1 l 1 1 26 N = N - max[l - 1] - 1 N N - max[l - 1] - 1 N - max[l - 1] - 1 N max[l - 1] max l - 1 l 1 1 char[] c = new char[l]; c new char[l] l for (int i = 0; i < l; i++) {
			c[i] = (char)('a' + (N % 26));
			N /= 26;
		} int i = 0; int i = 0; i 0 i < l i l i++ i++ i {
			c[i] = (char)('a' + (N % 26));
			N /= 26;
		} {
			c[i] = (char)('a' + (N % 26));
			N /= 26;
		} c[i] = (char)('a' + (N % 26)) c[i] c i (char)('a' + (N % 26)) 'a' (N % 26) N 26 N /= 26 N 26 for (int i = l - 1; i >= 0; i--) {
			System.out.print(c[i]);
		} int i = l - 1; int i = l - 1; i l - 1 l 1 i >= 0 i 0 i-- i-- i {
			System.out.print(c[i]);
		} {
			System.out.print(c[i]);
		} System.out.print(c[i]) System.out.print System.out System System.out c[i] c i System.out.println() System.out.println System.out System System.out String[] args args
import java.util.Scanner;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		long N = sc.nextLong();

		// 文字列の長さを求める
		long[] max = new long[12];
		int l = 1;
		max[l] = 26;
		while(N > max[l]) {
			l++;
			max[l] = (max[l - 1] + 1) * 26;
		}


		// l桁の範囲で、元の数字をa~zを0~25の26進数として変換する
		N = N - max[l - 1] - 1;
		char[] c = new char[l];
		for (int i = 0; i < l; i++) {
			c[i] = (char)('a' + (N % 26));
			N /= 26;
		}
		for (int i = l - 1; i >= 0; i--) {
			System.out.print(c[i]);
		}
		System.out.println();
	}
}
