import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.InputMismatchException;


public class Main {

	static long mod = (long)(1e+9 + 7);
	static int[] sieve;
	static ArrayList<Integer> primes;

	public static void main(String[] args) {

		int digitMax = 11;
		long base = 26;
		long[] digitNum = new long[digitMax+1];
		digitNum[0] = 1;
		for(int i = 1; i < digitMax+1; i++) {
			digitNum[i] = digitNum[i-1] * base;
		}

		fast s = new fast();
		long n = s.nextLong();

		int numChar = 1;
		while(n > 0) {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		}

		int[] digits = new int[numChar];
		n--;
		for(int i = numChar; i > 0; i--) {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		}

		String ans = "";
		for(int i = numChar-1; i > -1; i--) {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		}


		PrintWriter out = new PrintWriter(System.out);
		StringBuilder sb = new StringBuilder("");
		sb.append(ans);

		out.println(sb);
		out.close();

	}



	static class Pair implements Comparable<Pair>{

		private int v1;
		private int v2;
		private int weight;

		public Pair(int v1, int v2, int weight) {
			this.v1 = v1;
			this.v2 = v2;
			this.weight = weight;
		}

		public int getv1() {
			return this.v1;
		}

		public int getv2() {
			return this.v2;
		}

		public int getWeight() {
			return this.weight;
		}

		public int compareTo(Pair e) {
			return Integer.compare(this.weight, e.weight);
		}

	}

	static class UnionFind {
		private int[] par;
		private int[] sizes;
		private int setNum;

		//Constructor
		public UnionFind(int n) {
			par = new int[n];
			sizes = new int[n];
			for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			}
			setNum = n;
		}

		public int find(int x) {
			if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			}
		}

		public boolean unite(int x, int y) {
			x = find(x);
			y = find(y);

			if(x == y) return false;

			if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			}

			par[y] = x;
			sizes[x] += sizes[y];
			setNum--;
			return true;
		}

		public boolean same(int x, int y) {
			return find(x)==find(y);
		}

		public int size(int x) {
			return sizes[find(x)];
		}

		public int getSetNum() {
			return this.setNum;
		}

	}







	static class fast {

		   private InputStream i;
			private byte[]  buf = new byte[1024];
			private int curChar;

			private int numChars;

			//Return floor log2n
			public static long log2(long bits) // returns 0 for bits=0
				{
				    int log = 0;
				    if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; }
				    if( bits >= 256 ) { bits >>>= 8; log += 8; }
				    if( bits >= 16  ) { bits >>>= 4; log += 4; }
				    if( bits >= 4   ) { bits >>>= 2; log += 2; }
				    return log + ( bits >>> 1 );
				}

			public static boolean next_permutation(int a[])
			   {
				   int i=0,j=0;int index=-1;
				   int n=a.length;

				   for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i;

				   if(index==-1) return false;
				   i=index;


				   for(j=i+1;j<n && a[i]<a[j];j++);

				   int temp=a[i];
				   a[i]=a[j-1];
				   a[j-1]=temp;

				   for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   }

				   return true;
			   }

			public static void sieve(int size)
			{
				sieve=new int[size+1];

				primes=new ArrayList<Integer>();

				sieve[1]=1;

				for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				}

				for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				}
			}

			public static long pow(long a, long p){
			    long o = 1;
			    for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    }
			    return o;
			}

			public static long add(long... a){
			    long o = 0;
			    for(long x:a)o = (o+mod+x)%mod;
			    return o;
			}

			public static long mul(long... a){
			    long p = 1;
			    for(long x:a)p = (mod+(p*x)%mod)%mod;
			    return p;
			}

			public static long mod_inv(long n)
			{
				return pow(n,mod-2);
			}

			public long gcd(long r,long ans)
			{
				if(r==0) return ans;
				return gcd(ans%r,r);
			}

			public fast() {
				this(System.in);
			}
			public fast(InputStream is) {
				i = is;
			}
			public int read() {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			}
			public String nextLine() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c));
				return res.toString();
			}
			public String nextString() {
	     		int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			}
			public long nextLong() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				long res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public int nextInt() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				int res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public boolean isSpaceChar(int c) {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			}
			public boolean isEndOfLine(int c) {
				return c == '\n' || c == '\r' || c == -1;
			}

		}



} import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.PrintWriter; PrintWriter java.io import java.util.ArrayList; ArrayList java.util import java.util.Arrays; Arrays java.util import java.util.Comparator; Comparator java.util import java.util.InputMismatchException; InputMismatchException java.util public class Main {

	static long mod = (long)(1e+9 + 7);
	static int[] sieve;
	static ArrayList<Integer> primes;

	public static void main(String[] args) {

		int digitMax = 11;
		long base = 26;
		long[] digitNum = new long[digitMax+1];
		digitNum[0] = 1;
		for(int i = 1; i < digitMax+1; i++) {
			digitNum[i] = digitNum[i-1] * base;
		}

		fast s = new fast();
		long n = s.nextLong();

		int numChar = 1;
		while(n > 0) {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		}

		int[] digits = new int[numChar];
		n--;
		for(int i = numChar; i > 0; i--) {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		}

		String ans = "";
		for(int i = numChar-1; i > -1; i--) {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		}


		PrintWriter out = new PrintWriter(System.out);
		StringBuilder sb = new StringBuilder("");
		sb.append(ans);

		out.println(sb);
		out.close();

	}



	static class Pair implements Comparable<Pair>{

		private int v1;
		private int v2;
		private int weight;

		public Pair(int v1, int v2, int weight) {
			this.v1 = v1;
			this.v2 = v2;
			this.weight = weight;
		}

		public int getv1() {
			return this.v1;
		}

		public int getv2() {
			return this.v2;
		}

		public int getWeight() {
			return this.weight;
		}

		public int compareTo(Pair e) {
			return Integer.compare(this.weight, e.weight);
		}

	}

	static class UnionFind {
		private int[] par;
		private int[] sizes;
		private int setNum;

		//Constructor
		public UnionFind(int n) {
			par = new int[n];
			sizes = new int[n];
			for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			}
			setNum = n;
		}

		public int find(int x) {
			if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			}
		}

		public boolean unite(int x, int y) {
			x = find(x);
			y = find(y);

			if(x == y) return false;

			if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			}

			par[y] = x;
			sizes[x] += sizes[y];
			setNum--;
			return true;
		}

		public boolean same(int x, int y) {
			return find(x)==find(y);
		}

		public int size(int x) {
			return sizes[find(x)];
		}

		public int getSetNum() {
			return this.setNum;
		}

	}







	static class fast {

		   private InputStream i;
			private byte[]  buf = new byte[1024];
			private int curChar;

			private int numChars;

			//Return floor log2n
			public static long log2(long bits) // returns 0 for bits=0
				{
				    int log = 0;
				    if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; }
				    if( bits >= 256 ) { bits >>>= 8; log += 8; }
				    if( bits >= 16  ) { bits >>>= 4; log += 4; }
				    if( bits >= 4   ) { bits >>>= 2; log += 2; }
				    return log + ( bits >>> 1 );
				}

			public static boolean next_permutation(int a[])
			   {
				   int i=0,j=0;int index=-1;
				   int n=a.length;

				   for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i;

				   if(index==-1) return false;
				   i=index;


				   for(j=i+1;j<n && a[i]<a[j];j++);

				   int temp=a[i];
				   a[i]=a[j-1];
				   a[j-1]=temp;

				   for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   }

				   return true;
			   }

			public static void sieve(int size)
			{
				sieve=new int[size+1];

				primes=new ArrayList<Integer>();

				sieve[1]=1;

				for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				}

				for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				}
			}

			public static long pow(long a, long p){
			    long o = 1;
			    for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    }
			    return o;
			}

			public static long add(long... a){
			    long o = 0;
			    for(long x:a)o = (o+mod+x)%mod;
			    return o;
			}

			public static long mul(long... a){
			    long p = 1;
			    for(long x:a)p = (mod+(p*x)%mod)%mod;
			    return p;
			}

			public static long mod_inv(long n)
			{
				return pow(n,mod-2);
			}

			public long gcd(long r,long ans)
			{
				if(r==0) return ans;
				return gcd(ans%r,r);
			}

			public fast() {
				this(System.in);
			}
			public fast(InputStream is) {
				i = is;
			}
			public int read() {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			}
			public String nextLine() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c));
				return res.toString();
			}
			public String nextString() {
	     		int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			}
			public long nextLong() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				long res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public int nextInt() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				int res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public boolean isSpaceChar(int c) {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			}
			public boolean isEndOfLine(int c) {
				return c == '\n' || c == '\r' || c == -1;
			}

		}



} Main static long mod = (long)(1e+9 + 7); mod (long)(1e+9 + 7) 1e+9 7 static int[] sieve; sieve static ArrayList<Integer> primes; primes public static void main(String[] args) {

		int digitMax = 11;
		long base = 26;
		long[] digitNum = new long[digitMax+1];
		digitNum[0] = 1;
		for(int i = 1; i < digitMax+1; i++) {
			digitNum[i] = digitNum[i-1] * base;
		}

		fast s = new fast();
		long n = s.nextLong();

		int numChar = 1;
		while(n > 0) {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		}

		int[] digits = new int[numChar];
		n--;
		for(int i = numChar; i > 0; i--) {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		}

		String ans = "";
		for(int i = numChar-1; i > -1; i--) {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		}


		PrintWriter out = new PrintWriter(System.out);
		StringBuilder sb = new StringBuilder("");
		sb.append(ans);

		out.println(sb);
		out.close();

	} main {

		int digitMax = 11;
		long base = 26;
		long[] digitNum = new long[digitMax+1];
		digitNum[0] = 1;
		for(int i = 1; i < digitMax+1; i++) {
			digitNum[i] = digitNum[i-1] * base;
		}

		fast s = new fast();
		long n = s.nextLong();

		int numChar = 1;
		while(n > 0) {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		}

		int[] digits = new int[numChar];
		n--;
		for(int i = numChar; i > 0; i--) {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		}

		String ans = "";
		for(int i = numChar-1; i > -1; i--) {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		}


		PrintWriter out = new PrintWriter(System.out);
		StringBuilder sb = new StringBuilder("");
		sb.append(ans);

		out.println(sb);
		out.close();

	} int digitMax = 11; digitMax 11 long base = 26; base 26 long[] digitNum = new long[digitMax+1]; digitNum new long[digitMax+1] digitMax+1 digitMax 1 digitNum[0] = 1 digitNum[0] digitNum 0 1 for(int i = 1; i < digitMax+1; i++) {
			digitNum[i] = digitNum[i-1] * base;
		} int i = 1; int i = 1; i 1 i < digitMax+1 i digitMax+1 digitMax 1 i++ i++ i {
			digitNum[i] = digitNum[i-1] * base;
		} {
			digitNum[i] = digitNum[i-1] * base;
		} digitNum[i] = digitNum[i-1] * base digitNum[i] digitNum i digitNum[i-1] * base digitNum[i-1] digitNum i-1 i 1 base fast s = new fast(); s new fast() long n = s.nextLong(); n s.nextLong() s.nextLong s int numChar = 1; numChar 1 while(n > 0) {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		} n > 0 n 0 {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		} long tmp = n - digitNum[numChar]; tmp n - digitNum[numChar] n digitNum[numChar] digitNum numChar if(tmp < 1) break; tmp < 1 tmp 1 break; numChar++ numChar n = tmp n tmp int[] digits = new int[numChar]; digits new int[numChar] numChar n-- n for(int i = numChar; i > 0; i--) {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		} int i = numChar; int i = numChar; i numChar i > 0 i 0 i-- i-- i {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		} {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		} digits[i-1] = (int)(n/digitNum[i-1]) digits[i-1] digits i-1 i 1 (int)(n/digitNum[i-1]) n digitNum[i-1] digitNum i-1 i 1 n %= digitNum[i-1] n digitNum[i-1] digitNum i-1 i 1 String ans = ""; ans "" for(int i = numChar-1; i > -1; i--) {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		} int i = numChar-1; int i = numChar-1; i numChar-1 numChar 1 i > -1 i -1 1 i-- i-- i {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		} {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		} char tmpc = (char)('a' + digits[i]); tmpc (char)('a' + digits[i]) 'a' digits[i] digits i ans += tmpc ans tmpc PrintWriter out = new PrintWriter(System.out); out new PrintWriter(System.out) StringBuilder sb = new StringBuilder(""); sb new StringBuilder("") sb.append(ans) sb.append sb ans out.println(sb) out.println out sb out.close() out.close out String[] args args static class Pair implements Comparable<Pair>{

		private int v1;
		private int v2;
		private int weight;

		public Pair(int v1, int v2, int weight) {
			this.v1 = v1;
			this.v2 = v2;
			this.weight = weight;
		}

		public int getv1() {
			return this.v1;
		}

		public int getv2() {
			return this.v2;
		}

		public int getWeight() {
			return this.weight;
		}

		public int compareTo(Pair e) {
			return Integer.compare(this.weight, e.weight);
		}

	} Pair private int v1; v1 private int v2; v2 private int weight; weight public Pair(int v1, int v2, int weight) {
			this.v1 = v1;
			this.v2 = v2;
			this.weight = weight;
		} Pair {
			this.v1 = v1;
			this.v2 = v2;
			this.weight = weight;
		} this.v1 = v1 this.v1 this this.v1 v1 this.v2 = v2 this.v2 this this.v2 v2 this.weight = weight this.weight this this.weight weight int v1 v1 int v2 v2 int weight weight public int getv1() {
			return this.v1;
		} getv1 {
			return this.v1;
		} return this.v1; this.v1 this this.v1 public int getv2() {
			return this.v2;
		} getv2 {
			return this.v2;
		} return this.v2; this.v2 this this.v2 public int getWeight() {
			return this.weight;
		} getWeight {
			return this.weight;
		} return this.weight; this.weight this this.weight public int compareTo(Pair e) {
			return Integer.compare(this.weight, e.weight);
		} compareTo {
			return Integer.compare(this.weight, e.weight);
		} return Integer.compare(this.weight, e.weight); Integer.compare(this.weight, e.weight) Integer.compare Integer this.weight this this.weight e.weight e e.weight Pair e e Comparable static class UnionFind {
		private int[] par;
		private int[] sizes;
		private int setNum;

		//Constructor
		public UnionFind(int n) {
			par = new int[n];
			sizes = new int[n];
			for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			}
			setNum = n;
		}

		public int find(int x) {
			if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			}
		}

		public boolean unite(int x, int y) {
			x = find(x);
			y = find(y);

			if(x == y) return false;

			if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			}

			par[y] = x;
			sizes[x] += sizes[y];
			setNum--;
			return true;
		}

		public boolean same(int x, int y) {
			return find(x)==find(y);
		}

		public int size(int x) {
			return sizes[find(x)];
		}

		public int getSetNum() {
			return this.setNum;
		}

	} UnionFind private int[] par; par private int[] sizes; sizes private int setNum; setNum //Constructor
		public UnionFind(int n) {
			par = new int[n];
			sizes = new int[n];
			for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			}
			setNum = n;
		} UnionFind {
			par = new int[n];
			sizes = new int[n];
			for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			}
			setNum = n;
		} par = new int[n] par new int[n] n sizes = new int[n] sizes new int[n] n for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
				par[i] = i;
				sizes[i] = 1;
			} {
				par[i] = i;
				sizes[i] = 1;
			} par[i] = i par[i] par i i sizes[i] = 1 sizes[i] sizes i 1 setNum = n setNum n int n n public int find(int x) {
			if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			}
		} find {
			if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			}
		} if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			} par[x] == x par[x] par x x {
				return x;
			} return x; x {
				return par[x]=find(par[x]);
			} return par[x]=find(par[x]); par[x]=find(par[x]) par[x] par x find(par[x]) find par[x] par x int x x public boolean unite(int x, int y) {
			x = find(x);
			y = find(y);

			if(x == y) return false;

			if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			}

			par[y] = x;
			sizes[x] += sizes[y];
			setNum--;
			return true;
		} unite {
			x = find(x);
			y = find(y);

			if(x == y) return false;

			if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			}

			par[y] = x;
			sizes[x] += sizes[y];
			setNum--;
			return true;
		} x = find(x) x find(x) find x y = find(y) y find(y) find y if(x == y) return false; x == y x y return false; false if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			} x < y x y {
				int temp = x;
				x = y;
				y = temp;
			} int temp = x; temp x x = y x y y = temp y temp par[y] = x par[y] par y x sizes[x] += sizes[y] sizes[x] sizes x sizes[y] sizes y setNum-- setNum return true; true int x x int y y public boolean same(int x, int y) {
			return find(x)==find(y);
		} same {
			return find(x)==find(y);
		} return find(x)==find(y); find(x)==find(y) find(x) find x find(y) find y int x x int y y public int size(int x) {
			return sizes[find(x)];
		} size {
			return sizes[find(x)];
		} return sizes[find(x)]; sizes[find(x)] sizes find(x) find x int x x public int getSetNum() {
			return this.setNum;
		} getSetNum {
			return this.setNum;
		} return this.setNum; this.setNum this this.setNum static class fast {

		   private InputStream i;
			private byte[]  buf = new byte[1024];
			private int curChar;

			private int numChars;

			//Return floor log2n
			public static long log2(long bits) // returns 0 for bits=0
				{
				    int log = 0;
				    if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; }
				    if( bits >= 256 ) { bits >>>= 8; log += 8; }
				    if( bits >= 16  ) { bits >>>= 4; log += 4; }
				    if( bits >= 4   ) { bits >>>= 2; log += 2; }
				    return log + ( bits >>> 1 );
				}

			public static boolean next_permutation(int a[])
			   {
				   int i=0,j=0;int index=-1;
				   int n=a.length;

				   for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i;

				   if(index==-1) return false;
				   i=index;


				   for(j=i+1;j<n && a[i]<a[j];j++);

				   int temp=a[i];
				   a[i]=a[j-1];
				   a[j-1]=temp;

				   for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   }

				   return true;
			   }

			public static void sieve(int size)
			{
				sieve=new int[size+1];

				primes=new ArrayList<Integer>();

				sieve[1]=1;

				for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				}

				for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				}
			}

			public static long pow(long a, long p){
			    long o = 1;
			    for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    }
			    return o;
			}

			public static long add(long... a){
			    long o = 0;
			    for(long x:a)o = (o+mod+x)%mod;
			    return o;
			}

			public static long mul(long... a){
			    long p = 1;
			    for(long x:a)p = (mod+(p*x)%mod)%mod;
			    return p;
			}

			public static long mod_inv(long n)
			{
				return pow(n,mod-2);
			}

			public long gcd(long r,long ans)
			{
				if(r==0) return ans;
				return gcd(ans%r,r);
			}

			public fast() {
				this(System.in);
			}
			public fast(InputStream is) {
				i = is;
			}
			public int read() {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			}
			public String nextLine() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c));
				return res.toString();
			}
			public String nextString() {
	     		int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			}
			public long nextLong() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				long res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public int nextInt() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				int res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public boolean isSpaceChar(int c) {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			}
			public boolean isEndOfLine(int c) {
				return c == '\n' || c == '\r' || c == -1;
			}

		} fast private InputStream i; i private byte[]  buf = new byte[1024]; buf new byte[1024] 1024 private int curChar; curChar private int numChars; numChars //Return floor log2n
			public static long log2(long bits) // returns 0 for bits=0
				{
				    int log = 0;
				    if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; }
				    if( bits >= 256 ) { bits >>>= 8; log += 8; }
				    if( bits >= 16  ) { bits >>>= 4; log += 4; }
				    if( bits >= 4   ) { bits >>>= 2; log += 2; }
				    return log + ( bits >>> 1 );
				} log2 {
				    int log = 0;
				    if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; }
				    if( bits >= 256 ) { bits >>>= 8; log += 8; }
				    if( bits >= 16  ) { bits >>>= 4; log += 4; }
				    if( bits >= 4   ) { bits >>>= 2; log += 2; }
				    return log + ( bits >>> 1 );
				} int log = 0; log 0 if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; } ( bits & 0xffff0000 ) != 0 ( bits & 0xffff0000 ) bits 0xffff0000 0 { bits >>>= 16; log = 16; } bits >>>= 16 bits 16 log = 16 log 16 if( bits >= 256 ) { bits >>>= 8; log += 8; } bits >= 256 bits 256 { bits >>>= 8; log += 8; } bits >>>= 8 bits 8 log += 8 log 8 if( bits >= 16  ) { bits >>>= 4; log += 4; } bits >= 16 bits 16 { bits >>>= 4; log += 4; } bits >>>= 4 bits 4 log += 4 log 4 if( bits >= 4   ) { bits >>>= 2; log += 2; } bits >= 4 bits 4 { bits >>>= 2; log += 2; } bits >>>= 2 bits 2 log += 2 log 2 return log + ( bits >>> 1 ); log + ( bits >>> 1 ) log ( bits >>> 1 ) bits 1 long bits bits public static boolean next_permutation(int a[])
			   {
				   int i=0,j=0;int index=-1;
				   int n=a.length;

				   for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i;

				   if(index==-1) return false;
				   i=index;


				   for(j=i+1;j<n && a[i]<a[j];j++);

				   int temp=a[i];
				   a[i]=a[j-1];
				   a[j-1]=temp;

				   for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   }

				   return true;
			   } next_permutation {
				   int i=0,j=0;int index=-1;
				   int n=a.length;

				   for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i;

				   if(index==-1) return false;
				   i=index;


				   for(j=i+1;j<n && a[i]<a[j];j++);

				   int temp=a[i];
				   a[i]=a[j-1];
				   a[j-1]=temp;

				   for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   }

				   return true;
			   } int i=0 i 0 j=0; j 0 int index=-1; index -1 1 int n=a.length; n a.length a a.length for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i; i=0; i=0 i 0 i<n-1 i n-1 n 1 i++ i++ i if(a[i]<a[i+1]) index=i; if(a[i]<a[i+1]) index=i; a[i]<a[i+1] a[i] a i a[i+1] a i+1 i 1 index=i index i if(index==-1) return false; index==-1 index -1 1 return false; false i=index i index for(j=i+1;j<n && a[i]<a[j];j++); j=i+1; j=i+1 j i+1 i 1 j<n && a[i]<a[j] j<n j n a[i]<a[j] a[i] a i a[j] a j j++ j++ j ; int temp=a[i]; temp a[i] a i a[i]=a[j-1] a[i] a i a[j-1] a j-1 j 1 a[j-1]=temp a[j-1] a j-1 j 1 temp for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   } int p=i+1,q=n-1; int p=i+1 p i+1 i 1 q=n-1; q n-1 n 1 p<q p q p++,q-- p++ p q-- q {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   } {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   } temp=a[p] temp a[p] a p a[p]=a[q] a[p] a p a[q] a q a[q]=temp a[q] a q temp return true; true int a[] a public static void sieve(int size)
			{
				sieve=new int[size+1];

				primes=new ArrayList<Integer>();

				sieve[1]=1;

				for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				}

				for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				}
			} sieve {
				sieve=new int[size+1];

				primes=new ArrayList<Integer>();

				sieve[1]=1;

				for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				}

				for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				}
			} sieve=new int[size+1] sieve new int[size+1] size+1 size 1 primes=new ArrayList<Integer>() primes new ArrayList<Integer>() sieve[1]=1 sieve[1] sieve 1 1 for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				} int i=2; int i=2; i 2 i*i<=size i*i i i size i++ i++ i {
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				} {
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				} if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 } sieve[i]==0 sieve[i] sieve i 0 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 } for(int j=i*i;j<size;j+=i) {sieve[j]=1;} int j=i*i; int j=i*i; j i*i i i j<size j size j+=i j+=i j i {sieve[j]=1;} {sieve[j]=1;} sieve[j]=1 sieve[j] sieve j 1 for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				} int i=2; int i=2; i 2 i<=size i size i++ i++ i {
					if(sieve[i]==0) primes.add(i);
				} {
					if(sieve[i]==0) primes.add(i);
				} if(sieve[i]==0) primes.add(i); sieve[i]==0 sieve[i] sieve i 0 primes.add(i) primes.add primes i int size size public static long pow(long a, long p){
			    long o = 1;
			    for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    }
			    return o;
			} pow {
			    long o = 1;
			    for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    }
			    return o;
			} long o = 1; o 1 for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    } ; p>0 p 0 p>>=1 p>>=1 p 1 {
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    } {
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    } if((p&1)==1)o = mul(o, a); (p&1)==1 (p&1) p 1 1 o = mul(o, a) o mul(o, a) mul o a a = mul(a, a) a mul(a, a) mul a a return o; o long a a long p p public static long add(long... a){
			    long o = 0;
			    for(long x:a)o = (o+mod+x)%mod;
			    return o;
			} add {
			    long o = 0;
			    for(long x:a)o = (o+mod+x)%mod;
			    return o;
			} long o = 0; o 0 for(long x:a)o = (o+mod+x)%mod; long x a o = (o+mod+x)%mod; o = (o+mod+x)%mod o (o+mod+x)%mod (o+mod+x) o+mod+x o mod x mod return o; o long... a a public static long mul(long... a){
			    long p = 1;
			    for(long x:a)p = (mod+(p*x)%mod)%mod;
			    return p;
			} mul {
			    long p = 1;
			    for(long x:a)p = (mod+(p*x)%mod)%mod;
			    return p;
			} long p = 1; p 1 for(long x:a)p = (mod+(p*x)%mod)%mod; long x a p = (mod+(p*x)%mod)%mod; p = (mod+(p*x)%mod)%mod p (mod+(p*x)%mod)%mod (mod+(p*x)%mod) mod (p*x)%mod (p*x) p x mod mod return p; p long... a a public static long mod_inv(long n)
			{
				return pow(n,mod-2);
			} mod_inv {
				return pow(n,mod-2);
			} return pow(n,mod-2); pow(n,mod-2) pow n mod-2 mod 2 long n n public long gcd(long r,long ans)
			{
				if(r==0) return ans;
				return gcd(ans%r,r);
			} gcd {
				if(r==0) return ans;
				return gcd(ans%r,r);
			} if(r==0) return ans; r==0 r 0 return ans; ans return gcd(ans%r,r); gcd(ans%r,r) gcd ans%r ans r r long r r long ans ans public fast() {
				this(System.in);
			} fast {
				this(System.in);
			} this(System.in) this System.in System System.in public fast(InputStream is) {
				i = is;
			} fast {
				i = is;
			} i = is i is InputStream is is public int read() {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			} read {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			} if (numChars == -1)
					throw new InputMismatchException(); numChars == -1 numChars -1 1 throw new InputMismatchException(); new InputMismatchException() if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				} curChar >= numChars curChar numChars {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				} curChar = 0 curChar 0 try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					} catch (IOException e) {
						throw new InputMismatchException();
					} IOException e {
						throw new InputMismatchException();
					} throw new InputMismatchException(); new InputMismatchException() {
						numChars = i.read(buf);
					} numChars = i.read(buf) numChars i.read(buf) i.read i buf if (numChars <= 0)
						return -1; numChars <= 0 numChars 0 return -1; -1 1 return buf[curChar++]; buf[curChar++] buf curChar++ curChar public String nextLine() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c));
				return res.toString();
			} nextLine {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c));
				return res.toString();
			} int c = read(); c read() read while (isSpaceChar(c))
					c = read(); isSpaceChar(c) isSpaceChar c c = read() c read() read StringBuilder res = new StringBuilder(); res new StringBuilder() do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c)); !isEndOfLine(c) isEndOfLine(c) isEndOfLine c {
					res.appendCodePoint(c);
					c = read();
				} res.appendCodePoint(c) res.appendCodePoint res c c = read() c read() read return res.toString(); res.toString() res.toString res public String nextString() {
	     		int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			} nextString {
	     		int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			} int c = read(); c read() read while (isSpaceChar(c))
					c = read(); isSpaceChar(c) isSpaceChar c c = read() c read() read StringBuilder res = new StringBuilder(); res new StringBuilder() do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c)); !isSpaceChar(c) isSpaceChar(c) isSpaceChar c {
					res.appendCodePoint(c);
					c = read();
				} res.appendCodePoint(c) res.appendCodePoint res c c = read() c read() read return res.toString(); res.toString() res.toString res public long nextLong() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				long res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			} nextLong {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				long res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			} int c = read(); c read() read while (isSpaceChar(c))
					c = read(); isSpaceChar(c) isSpaceChar c c = read() c read() read int sgn = 1; sgn 1 if (c == '-') {
					sgn = -1;
					c = read();
				} c == '-' c '-' {
					sgn = -1;
					c = read();
				} sgn = -1 sgn -1 1 c = read() c read() read long res = 0; res 0 do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c)); !isSpaceChar(c) isSpaceChar(c) isSpaceChar c {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} if (c < '0' || c > '9')
						throw new InputMismatchException(); c < '0' || c > '9' c < '0' c '0' c > '9' c '9' throw new InputMismatchException(); new InputMismatchException() res *= 10 res 10 res += c - '0' res c - '0' c '0' c = read() c read() read return res * sgn; res * sgn res sgn public int nextInt() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				int res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			} nextInt {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				int res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			} int c = read(); c read() read while (isSpaceChar(c))
					c = read(); isSpaceChar(c) isSpaceChar c c = read() c read() read int sgn = 1; sgn 1 if (c == '-') {
					sgn = -1;
					c = read();
				} c == '-' c '-' {
					sgn = -1;
					c = read();
				} sgn = -1 sgn -1 1 c = read() c read() read int res = 0; res 0 do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c)); !isSpaceChar(c) isSpaceChar(c) isSpaceChar c {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} if (c < '0' || c > '9')
						throw new InputMismatchException(); c < '0' || c > '9' c < '0' c '0' c > '9' c '9' throw new InputMismatchException(); new InputMismatchException() res *= 10 res 10 res += c - '0' res c - '0' c '0' c = read() c read() read return res * sgn; res * sgn res sgn public boolean isSpaceChar(int c) {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			} isSpaceChar {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			} return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1 c == '\t' c == '\r' c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1 c == ' ' c ' ' c == '\n' c '\n' c == '\r' c '\r' c == '\t' c '\t' c == -1 c -1 1 int c c public boolean isEndOfLine(int c) {
				return c == '\n' || c == '\r' || c == -1;
			} isEndOfLine {
				return c == '\n' || c == '\r' || c == -1;
			} return c == '\n' || c == '\r' || c == -1; c == '\n' || c == '\r' || c == -1 c == '\n' || c == '\r' || c == -1 c == '\n' c '\n' c == '\r' c '\r' c == -1 c -1 1 int c c public class Main {

	static long mod = (long)(1e+9 + 7);
	static int[] sieve;
	static ArrayList<Integer> primes;

	public static void main(String[] args) {

		int digitMax = 11;
		long base = 26;
		long[] digitNum = new long[digitMax+1];
		digitNum[0] = 1;
		for(int i = 1; i < digitMax+1; i++) {
			digitNum[i] = digitNum[i-1] * base;
		}

		fast s = new fast();
		long n = s.nextLong();

		int numChar = 1;
		while(n > 0) {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		}

		int[] digits = new int[numChar];
		n--;
		for(int i = numChar; i > 0; i--) {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		}

		String ans = "";
		for(int i = numChar-1; i > -1; i--) {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		}


		PrintWriter out = new PrintWriter(System.out);
		StringBuilder sb = new StringBuilder("");
		sb.append(ans);

		out.println(sb);
		out.close();

	}



	static class Pair implements Comparable<Pair>{

		private int v1;
		private int v2;
		private int weight;

		public Pair(int v1, int v2, int weight) {
			this.v1 = v1;
			this.v2 = v2;
			this.weight = weight;
		}

		public int getv1() {
			return this.v1;
		}

		public int getv2() {
			return this.v2;
		}

		public int getWeight() {
			return this.weight;
		}

		public int compareTo(Pair e) {
			return Integer.compare(this.weight, e.weight);
		}

	}

	static class UnionFind {
		private int[] par;
		private int[] sizes;
		private int setNum;

		//Constructor
		public UnionFind(int n) {
			par = new int[n];
			sizes = new int[n];
			for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			}
			setNum = n;
		}

		public int find(int x) {
			if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			}
		}

		public boolean unite(int x, int y) {
			x = find(x);
			y = find(y);

			if(x == y) return false;

			if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			}

			par[y] = x;
			sizes[x] += sizes[y];
			setNum--;
			return true;
		}

		public boolean same(int x, int y) {
			return find(x)==find(y);
		}

		public int size(int x) {
			return sizes[find(x)];
		}

		public int getSetNum() {
			return this.setNum;
		}

	}







	static class fast {

		   private InputStream i;
			private byte[]  buf = new byte[1024];
			private int curChar;

			private int numChars;

			//Return floor log2n
			public static long log2(long bits) // returns 0 for bits=0
				{
				    int log = 0;
				    if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; }
				    if( bits >= 256 ) { bits >>>= 8; log += 8; }
				    if( bits >= 16  ) { bits >>>= 4; log += 4; }
				    if( bits >= 4   ) { bits >>>= 2; log += 2; }
				    return log + ( bits >>> 1 );
				}

			public static boolean next_permutation(int a[])
			   {
				   int i=0,j=0;int index=-1;
				   int n=a.length;

				   for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i;

				   if(index==-1) return false;
				   i=index;


				   for(j=i+1;j<n && a[i]<a[j];j++);

				   int temp=a[i];
				   a[i]=a[j-1];
				   a[j-1]=temp;

				   for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   }

				   return true;
			   }

			public static void sieve(int size)
			{
				sieve=new int[size+1];

				primes=new ArrayList<Integer>();

				sieve[1]=1;

				for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				}

				for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				}
			}

			public static long pow(long a, long p){
			    long o = 1;
			    for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    }
			    return o;
			}

			public static long add(long... a){
			    long o = 0;
			    for(long x:a)o = (o+mod+x)%mod;
			    return o;
			}

			public static long mul(long... a){
			    long p = 1;
			    for(long x:a)p = (mod+(p*x)%mod)%mod;
			    return p;
			}

			public static long mod_inv(long n)
			{
				return pow(n,mod-2);
			}

			public long gcd(long r,long ans)
			{
				if(r==0) return ans;
				return gcd(ans%r,r);
			}

			public fast() {
				this(System.in);
			}
			public fast(InputStream is) {
				i = is;
			}
			public int read() {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			}
			public String nextLine() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c));
				return res.toString();
			}
			public String nextString() {
	     		int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			}
			public long nextLong() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				long res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public int nextInt() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				int res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public boolean isSpaceChar(int c) {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			}
			public boolean isEndOfLine(int c) {
				return c == '\n' || c == '\r' || c == -1;
			}

		}



} public class Main {

	static long mod = (long)(1e+9 + 7);
	static int[] sieve;
	static ArrayList<Integer> primes;

	public static void main(String[] args) {

		int digitMax = 11;
		long base = 26;
		long[] digitNum = new long[digitMax+1];
		digitNum[0] = 1;
		for(int i = 1; i < digitMax+1; i++) {
			digitNum[i] = digitNum[i-1] * base;
		}

		fast s = new fast();
		long n = s.nextLong();

		int numChar = 1;
		while(n > 0) {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		}

		int[] digits = new int[numChar];
		n--;
		for(int i = numChar; i > 0; i--) {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		}

		String ans = "";
		for(int i = numChar-1; i > -1; i--) {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		}


		PrintWriter out = new PrintWriter(System.out);
		StringBuilder sb = new StringBuilder("");
		sb.append(ans);

		out.println(sb);
		out.close();

	}



	static class Pair implements Comparable<Pair>{

		private int v1;
		private int v2;
		private int weight;

		public Pair(int v1, int v2, int weight) {
			this.v1 = v1;
			this.v2 = v2;
			this.weight = weight;
		}

		public int getv1() {
			return this.v1;
		}

		public int getv2() {
			return this.v2;
		}

		public int getWeight() {
			return this.weight;
		}

		public int compareTo(Pair e) {
			return Integer.compare(this.weight, e.weight);
		}

	}

	static class UnionFind {
		private int[] par;
		private int[] sizes;
		private int setNum;

		//Constructor
		public UnionFind(int n) {
			par = new int[n];
			sizes = new int[n];
			for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			}
			setNum = n;
		}

		public int find(int x) {
			if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			}
		}

		public boolean unite(int x, int y) {
			x = find(x);
			y = find(y);

			if(x == y) return false;

			if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			}

			par[y] = x;
			sizes[x] += sizes[y];
			setNum--;
			return true;
		}

		public boolean same(int x, int y) {
			return find(x)==find(y);
		}

		public int size(int x) {
			return sizes[find(x)];
		}

		public int getSetNum() {
			return this.setNum;
		}

	}







	static class fast {

		   private InputStream i;
			private byte[]  buf = new byte[1024];
			private int curChar;

			private int numChars;

			//Return floor log2n
			public static long log2(long bits) // returns 0 for bits=0
				{
				    int log = 0;
				    if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; }
				    if( bits >= 256 ) { bits >>>= 8; log += 8; }
				    if( bits >= 16  ) { bits >>>= 4; log += 4; }
				    if( bits >= 4   ) { bits >>>= 2; log += 2; }
				    return log + ( bits >>> 1 );
				}

			public static boolean next_permutation(int a[])
			   {
				   int i=0,j=0;int index=-1;
				   int n=a.length;

				   for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i;

				   if(index==-1) return false;
				   i=index;


				   for(j=i+1;j<n && a[i]<a[j];j++);

				   int temp=a[i];
				   a[i]=a[j-1];
				   a[j-1]=temp;

				   for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   }

				   return true;
			   }

			public static void sieve(int size)
			{
				sieve=new int[size+1];

				primes=new ArrayList<Integer>();

				sieve[1]=1;

				for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				}

				for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				}
			}

			public static long pow(long a, long p){
			    long o = 1;
			    for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    }
			    return o;
			}

			public static long add(long... a){
			    long o = 0;
			    for(long x:a)o = (o+mod+x)%mod;
			    return o;
			}

			public static long mul(long... a){
			    long p = 1;
			    for(long x:a)p = (mod+(p*x)%mod)%mod;
			    return p;
			}

			public static long mod_inv(long n)
			{
				return pow(n,mod-2);
			}

			public long gcd(long r,long ans)
			{
				if(r==0) return ans;
				return gcd(ans%r,r);
			}

			public fast() {
				this(System.in);
			}
			public fast(InputStream is) {
				i = is;
			}
			public int read() {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			}
			public String nextLine() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c));
				return res.toString();
			}
			public String nextString() {
	     		int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			}
			public long nextLong() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				long res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public int nextInt() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				int res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public boolean isSpaceChar(int c) {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			}
			public boolean isEndOfLine(int c) {
				return c == '\n' || c == '\r' || c == -1;
			}

		}



} Main
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.InputMismatchException;


public class Main {

	static long mod = (long)(1e+9 + 7);
	static int[] sieve;
	static ArrayList<Integer> primes;

	public static void main(String[] args) {

		int digitMax = 11;
		long base = 26;
		long[] digitNum = new long[digitMax+1];
		digitNum[0] = 1;
		for(int i = 1; i < digitMax+1; i++) {
			digitNum[i] = digitNum[i-1] * base;
		}

		fast s = new fast();
		long n = s.nextLong();

		int numChar = 1;
		while(n > 0) {
			long tmp = n - digitNum[numChar];
			if(tmp < 1) break;
			numChar++;
			n = tmp;
		}

		int[] digits = new int[numChar];
		n--;
		for(int i = numChar; i > 0; i--) {
			digits[i-1] = (int)(n/digitNum[i-1]);
			n %= digitNum[i-1];
		}

		String ans = "";
		for(int i = numChar-1; i > -1; i--) {
			char tmpc = (char)('a' + digits[i]);
			ans += tmpc;
		}


		PrintWriter out = new PrintWriter(System.out);
		StringBuilder sb = new StringBuilder("");
		sb.append(ans);

		out.println(sb);
		out.close();

	}



	static class Pair implements Comparable<Pair>{

		private int v1;
		private int v2;
		private int weight;

		public Pair(int v1, int v2, int weight) {
			this.v1 = v1;
			this.v2 = v2;
			this.weight = weight;
		}

		public int getv1() {
			return this.v1;
		}

		public int getv2() {
			return this.v2;
		}

		public int getWeight() {
			return this.weight;
		}

		public int compareTo(Pair e) {
			return Integer.compare(this.weight, e.weight);
		}

	}

	static class UnionFind {
		private int[] par;
		private int[] sizes;
		private int setNum;

		//Constructor
		public UnionFind(int n) {
			par = new int[n];
			sizes = new int[n];
			for(int i = 0; i < n; i++) {
				par[i] = i;
				sizes[i] = 1;
			}
			setNum = n;
		}

		public int find(int x) {
			if(par[x] == x) {
				return x;
			}else {
				return par[x]=find(par[x]);
			}
		}

		public boolean unite(int x, int y) {
			x = find(x);
			y = find(y);

			if(x == y) return false;

			if(x < y) {
				int temp = x;
				x = y;
				y = temp;
			}

			par[y] = x;
			sizes[x] += sizes[y];
			setNum--;
			return true;
		}

		public boolean same(int x, int y) {
			return find(x)==find(y);
		}

		public int size(int x) {
			return sizes[find(x)];
		}

		public int getSetNum() {
			return this.setNum;
		}

	}







	static class fast {

		   private InputStream i;
			private byte[]  buf = new byte[1024];
			private int curChar;

			private int numChars;

			//Return floor log2n
			public static long log2(long bits) // returns 0 for bits=0
				{
				    int log = 0;
				    if( ( bits & 0xffff0000 ) != 0 ) { bits >>>= 16; log = 16; }
				    if( bits >= 256 ) { bits >>>= 8; log += 8; }
				    if( bits >= 16  ) { bits >>>= 4; log += 4; }
				    if( bits >= 4   ) { bits >>>= 2; log += 2; }
				    return log + ( bits >>> 1 );
				}

			public static boolean next_permutation(int a[])
			   {
				   int i=0,j=0;int index=-1;
				   int n=a.length;

				   for(i=0;i<n-1;i++)
					   if(a[i]<a[i+1]) index=i;

				   if(index==-1) return false;
				   i=index;


				   for(j=i+1;j<n && a[i]<a[j];j++);

				   int temp=a[i];
				   a[i]=a[j-1];
				   a[j-1]=temp;

				   for(int p=i+1,q=n-1;p<q;p++,q--)
				   {
					   temp=a[p];
					   a[p]=a[q];
					   a[q]=temp;
				   }

				   return true;
			   }

			public static void sieve(int size)
			{
				sieve=new int[size+1];

				primes=new ArrayList<Integer>();

				sieve[1]=1;

				for(int i=2;i*i<=size;i++)
				{
					if(sieve[i]==0)
					 {
						for(int j=i*i;j<size;j+=i) {sieve[j]=1;}
					 }
				}

				for(int i=2;i<=size;i++)
				{
					if(sieve[i]==0) primes.add(i);
				}
			}

			public static long pow(long a, long p){
			    long o = 1;
			    for(; p>0; p>>=1){
			        if((p&1)==1)o = mul(o, a);
			        a = mul(a, a);
			    }
			    return o;
			}

			public static long add(long... a){
			    long o = 0;
			    for(long x:a)o = (o+mod+x)%mod;
			    return o;
			}

			public static long mul(long... a){
			    long p = 1;
			    for(long x:a)p = (mod+(p*x)%mod)%mod;
			    return p;
			}

			public static long mod_inv(long n)
			{
				return pow(n,mod-2);
			}

			public long gcd(long r,long ans)
			{
				if(r==0) return ans;
				return gcd(ans%r,r);
			}

			public fast() {
				this(System.in);
			}
			public fast(InputStream is) {
				i = is;
			}
			public int read() {
				if (numChars == -1)
					throw new InputMismatchException();
				if (curChar >= numChars) {
					curChar = 0;
					try {
						numChars = i.read(buf);
					} catch (IOException e) {
						throw new InputMismatchException();
					}
					if (numChars <= 0)
						return -1;
				}
				return buf[curChar++];
			}
			public String nextLine() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isEndOfLine(c));
				return res.toString();
			}
			public String nextString() {
	     		int c = read();
				while (isSpaceChar(c))
					c = read();
				StringBuilder res = new StringBuilder();
				do {
					res.appendCodePoint(c);
					c = read();
				} while (!isSpaceChar(c));
				return res.toString();
			}
			public long nextLong() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				long res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public int nextInt() {
				int c = read();
				while (isSpaceChar(c))
					c = read();
				int sgn = 1;
				if (c == '-') {
					sgn = -1;
					c = read();
				}
				int res = 0;
				do {
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					res *= 10;
					res += c - '0';
					c = read();
				} while (!isSpaceChar(c));
				return res * sgn;
			}
			public boolean isSpaceChar(int c) {
				return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
			}
			public boolean isEndOfLine(int c) {
				return c == '\n' || c == '\r' || c == -1;
			}

		}



}
