Eleven wants to choose a new name for herself. As a bunch of geeks, her friends suggested an algorithm to choose a name for her. Eleven wants her name to have exactly n characters. 

<image>

Her friend suggested that her name should only consist of uppercase and lowercase letters 'O'. More precisely, they suggested that the i-th letter of her name should be 'O' (uppercase) if i is a member of Fibonacci sequence, and 'o' (lowercase) otherwise. The letters in the name are numbered from 1 to n. Fibonacci sequence is the sequence f where

  * f1 = 1, 
  * f2 = 1, 
  * fn = fn - 2 + fn - 1 (n > 2). 



As her friends are too young to know what Fibonacci sequence is, they asked you to help Eleven determine her new name.

Input

The first and only line of input contains an integer n (1 ≤ n ≤ 1000).

Output

Print Eleven's new name on the first and only line of output.

Examples

Input

8


Output

OOOoOooO


Input

15


Output

OOOoOooOooooOoo
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;



public class Main {

	
	private static Scanner in = new Scanner(System.in);
	 

	public static void main(String[] args) {
		
		int n = in.nextInt();
		
		int [] fib = fibonacci(16);
//		System.out.println(Arrays.toString(fib));
		StringBuilder sb = new StringBuilder();
		
		for (int i = 1; i <=n; i++) {
			if(Arrays.binarySearch(fib, i)>=0) {
				sb.append("O");
			} else {
				sb.append("o");
			}
		}
		System.out.println(sb);
		
		
		
		
	} static boolean isSquare(int n) {
		return (int)Math.sqrt(n)==Math.sqrt(n);
	}
	static int [] fibonacci(int n) {
		int [] f = new int[n];
		f[0]=1;
		f[1]=1;
		
		for (int i = 2; i < f.length; i++) {
			f[i]=f[i-1]+f[i-2];
		}
		
		return f;
	}
	static long fact(long n) {
		if(n<=1) return 1;
		else return n*fact(n-1);
	}
	static void closeLeft(int [] a , int l) {
		for (int i = 0; i < l; i++) {
			a[i]=1;
		}
	}
	static void closeRight (int [] a, int r) {
		for (int i = r+1; i < a.length; i++) {
			a[i]=1;
		}
	}
	static boolean isFinish(int [] a) {
		
		int num = 0;
		
		for (int i = 0; i < a.length; i++) {
			if(a[i]==-1 || a[i]==1) num++;
		}

		return num==a.length;
	}
	
	static int findAPeak(int [] a) {
		
		int n = a.length;
		
		int lo = 0;
		int hi = n-1;
		
		while(lo<=hi) {
			
			int mid = lo+(hi-lo)/2;
			if(a[mid]<a[mid-1]) hi = mid-1;
			else if(a[mid]<a[mid+1]) lo=mid+1;
			else return mid;
			
		}	
		
		
		return -1;
	}
	 static HashMap<String, ArrayList<String>> solve(HashMap<String, String []> map) {
		
		boolean flag = false;
		 
		HashMap<String, ArrayList<String>> ans = new HashMap<>();
		
		for (Map.Entry<String, String []> m : map.entrySet()) {
			String [] ss = m.getValue();
			for (int i = 0; i < ss.length; i++) {
				for (int j = i+1; j < ss.length; j++) {
					if(ss[j].endsWith(ss[i]))  {
						flag = true;
						break;
					}					
				}
				if(!flag) {
				//	ans.put(m.getKey(), value)
				}
			}
		}
		
		return null;
	}
	
	static void fillAnArray(long [] a) {
		for (int i = 0; i < a.length - 1; i++) {
			a[i]=in.nextLong();
		}
	}
	static int []  shuffleAnArray(int [] a) {
		
		for (int i = 0; i < a.length; i++) {
			int index = (int)(Math.random()*a.length);
			int temp = a[i];
			a[i]=a[index];
			a[index]=temp;			
		}
				
		return a;
		
	}
	static int gcd(int a,int b) {
		return a==0 ? b : gcd(b%a,a);
	}
	
	static boolean eulerFunction(int n, int k) {
		return gcd(n,k)==1;
	}
	static String operate(String S, int l,int r,char o,char n) {
		
		String ss = "";
		
		for (int i = 0; i < S.length() ; i++) {
			
			if(i>=l-1 && i<=r-1) {
				
				if(S.charAt(i)== o) {
					ss+=n;
				}
				
				else {
					ss+=S.charAt(i);
				}
			}
			else {
				ss+=S.charAt(i);
			}
		}
		
		return ss;
	}
	static int sumOfArray(int [] a) {
		int sum = 0;
		for (int i = 0; i < a.length; i++) 
			if(a[i]>0)sum+=a[i];			
		return sum;
	}
	
	private static long convert(int i) {
		long res = i;
		while(i>0){
			int lastNum = i % 10;
			res = res * 10 + lastNum;
			i /=10;
		}
		
		return res;
	}

	static int numberOfElementsAboveZero(int [] a) {
		int num = 0;
		for (int i = 0; i < a.length; i++) {
			if(a[i]>0) num++;
		}		
		return num;
	}
	static int min(int [] a) {
		int min = Integer.MAX_VALUE;
		for (int i = 0; i < a.length; i++) {
			if(a[i]>0 && a[i]<min) {
				min=a[i];
			}
		}
		return min;
	}
	static void dis(int [] a ,int min) {
		for (int i = 0; i < a.length; i++) {
			a[i]-=min;
		}
	}
	static boolean isPrime(int n) {
		
		if(n < 2) return false;
		
		for (int i = 2; i <= (int)Math.sqrt(n); i++) 
			if(n%i==0) return false;
			return true;
		
	}

}
