In the beginning of the new year Keivan decided to reverse his name. He doesn't like palindromes, so he changed Naviek to Navick.

He is too selfish, so for a given n he wants to obtain a string of n characters, each of which is either 'a', 'b' or 'c', with no palindromes of length 3 appearing in the string as a substring. For example, the strings "abc" and "abca" suit him, while the string "aba" doesn't. He also want the number of letters 'c' in his string to be as little as possible.

Input

The first line contains single integer n (1 ≤ n ≤ 2·105) — the length of the string.

Output

Print the string that satisfies all the constraints.

If there are multiple answers, print any of them.

Examples

Input

2


Output

aa


Input

3


Output

bba

Note

A palindrome is a sequence of characters which reads the same backward and forward.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.StringTokenizer;

public class Solution1{
	public static void main(String[] args) throws IOException{
		FastReader sc = new FastReader();
		int a = sc.nextInt();
		StringBuilder st = stringMaker(a);
		System.out.println(st.toString());
	}
	public static StringBuilder stringMaker(int n){
		StringBuilder st = new StringBuilder("");
		String s = "aabb";
		int t = n;
		while(t > 3){
			st.append(s);
			t = t - 4;
		}
		s = s.substring(0,t);
		st.append(s);
		return st;
	}
	public static boolean[] sieveAlgo(int n){
		boolean isPrime[] = new boolean[n + 1];
		for (int i = 2; i <= n; i++) {
            isPrime[i] = true;
        }

        // mark non-primes <= n using Sieve of Eratosthenes
        for (int factor = 2; factor*factor <= n; factor++) {

            // if factor is prime, then mark multiples of factor as nonprime
            // suffices to consider mutiples factor, factor+1, ...,  n/factor
            if (isPrime[factor]) {
                for (int j = factor; factor*j <= n; j++) {
                    isPrime[factor*j] = false;
                }
            }
        }
        return isPrime;
	}
	public static String fmt(double d)
	{
	    if(d == (long) d)
	        return String.format("%d",(long)d);
	    else
	        return String.format("%s",d);
	}
	public static long[][] comparator(long[][] arr){
		Arrays.sort(arr, new Comparator<long[]>() {
            @Override
            public int compare(long[] a,long[] b) {
                Long a1 = a[1];
                Long b1 = b[1];
            	return a1.compareTo(b1);
            }
        });
		return arr;
	}
	static class FastReader
    {
        BufferedReader br;
        StringTokenizer st;
 
        public FastReader()
        {
            br = new BufferedReader(new
                     InputStreamReader(System.in));
        }
 
        String next()
        {
            while (st == null || !st.hasMoreElements())
            {
                try
                {
                    st = new StringTokenizer(br.readLine());
                }
                catch (IOException  e)
                {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }
 
        int nextInt()
        {
            return Integer.parseInt(next());
        }
 
        long nextLong()
        {
            return Long.parseLong(next());
        }
 
        double nextDouble()
        {
            return Double.parseDouble(next());
        }
 
        String nextLine()
        {
            String str = "";
            try
            {
                str = br.readLine();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return str;
        }
    }
	public static String min(int m,int n){
		int[] arr = new int[m];
		arr[0] = 1;
		int sum = 1;
		int j = m - 1;
		for(int i = 1;i <= 18* m + 10;i++){
			if(sum != n){
				if(arr[j] == 9){
					j--;
				}else{
					arr[j]++;
					sum++;
				}
			}
			else{
				break;
			}
		}
		StringBuilder min = new StringBuilder("");
		for(int i = 0;i < arr.length;i++){
			min.append(arr[i]);
		}
		return min.toString();
	}
	public static String max(int m,int n){
		int[] arr = new int[m];
		arr[0] = 1;
		int sum = 1;
		int j = 0;
		for(int i = 1;i <= 9 * m + 10;i++){
			if(sum != n){
				if(arr[j] == 9){
					j++;
				}else{
					arr[j]++;
					sum++;
				}
			}
			else{
				break;
			}
		}
		StringBuilder min = new StringBuilder("");
		for(int i = 0;i < arr.length;i++){
			min.append(arr[i]);
		}
		return min.toString();
	}
    public static int KMPSearch(String txt,String pat){
		int m = pat.length();
		int n = txt.length();
		int lps[] = new int[m];
		int j = 0;
		int count = 0;
		PrefixTable(pat,m,lps);
		int i = 0;
		while (i < n)
	        {
	            if (pat.charAt(j) == txt.charAt(i))
	            {
	                j++;
	                i++;
	            }
	            if (j == m)
	            {
	            	count++;
	                j = lps[j-1];
	            }
	            else if (i < n && pat.charAt(j) != txt.charAt(i))
	            {
	                if (j != 0)
	                    j = lps[j-1];
	                else
	                    i = i+1;
	            }
	        }
		return count;
	}
	public static void PrefixTable(String pat,int m,int[] lps){
		int len = 0;
		int i = 1;
		lps[0] = 0;
		while(i < m){
			if(pat.charAt(i) == pat.charAt(len)){
				lps[i] = len + 1;
				i++;
				len++;
			}else if(len > 0){
				len = lps[len - 1];
			}else{
				lps[i] = 0;
				i++;
			}
		}
	}
    public int digit(int x){
    	int temp = x;
    	int count = 0;
    	while(temp != 0){
    		count++;
    		temp = temp/10;
    	}
    	return count;
    }
    public int sum(int x){
    	int temp = x;
    	int count = 0;
    	while(temp != 0){
    		count += temp % 10;
    		temp = temp/10;
    	}
    	return count;
    }
    public int product(int x){
    	int temp = x;
    	int count = 1;
    	while(temp != 0){
    		count*=temp % 10;
    		temp = temp/10;
    	}
    	return count;
    }
    public boolean isValid2(int x){
    	int temp = x;
    	while(temp != 0){
    		if(temp % 10 == 0){
    			return false;
    		}
    		temp = temp/10;
    	}
    	return true;
    }
    public boolean isValid(int x){
    	if(!isValid2(x)){
    		return false;
    	}else{
    		if(product(x) <= sum(x)){
    			return true;
    		}
    		return false;
    	}
    }
}