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  f_1 = 1,  f_2 = 1,  f_{n} = f_{n} - 2 + f_{n} - 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

Source: codeforces | Difficulty: EASY
Tags: Implementation

Complete search


Solutions:
f = [1, 2]
a = int(input())
b = ''
while f[-1] < a:
	f.append(f[-1] + f[-2])
for i in range(a):
	if f.count(i + 1) == 0:
		b += 'o'
	else:
		b += 'O'
print(b)


fibonicci = [1, 1]
first = 1
second = 1
while 1:
	if first + second > 1000:
		break
	fibonicci.append(first + second)
	first = second
	second = fibonicci[-1]
n = int(input())
new = ['o'] * n
for i in fibonicci:
	if i >= n + 1:
		break
	new[i - 1] = 'O'
print(''.join(new))


def gis():
	return list(map(int, input().strip().split()))

def gi():
	return int(input())

def gss():
	return input().strip().split()

def problem():
	n = gi()
	f0 = 1
	f1 = 1
	f = set()
	while f0 <= n:
		f.add(f0)
		c = f0 + f1
		f0 = f1
		f1 = c
	name = ''
	for i in range(n):
		if i + 1 in f:
			name += 'O'
		else:
			name += 'o'
	print(name)

def __starting_point():
	problem()
__starting_point()


import math as mt
import sys, string
from collections import Counter, defaultdict
input = sys.stdin.readline
I = lambda : int(input())
M = lambda : map(int, input().split())
ARR = lambda : list(map(int, input().split()))

def printARR(arr):
	for e in arr:
		print(e, end=' ')
	print()

def getFib():
	ans = [1, 2]
	a = 1
	b = 2
	while ans[-1] < 1000:
		ans.append(a + b)
		a = b
		b = ans[-1]
	return ans

def main():
	fib = getFib()
	n = I()
	j = 0
	for i in range(n):
		if i + 1 == fib[j]:
			print('O', end='')
			j += 1
		else:
			print('o', end='')
tc = 1
for _ in range(tc):
	main()


n = int(input())
s = ['o'] * n
(a, b) = (1, 2)
while a <= n:
	s[a - 1] = 'O'
	(a, b) = (b, a + b)
print(''.join(s))


n = int(input())
a = 0
b = 1
name = []
for i in range(n):
	if i + 1 == a + b:
		a = b
		b = i + 1
		name.append('O')
	else:
		name.append('o')
ne = ''.join(name)
print(ne)


def fib(limit):
	a = [1, 2]
	while a[-1] <= limit:
		a.append(a[-1] + a[-2])
	return a
n = int(input())
lst = fib(n)
s = ''
pos = 0
for i in range(1, n + 1):
	if lst[pos] == i:
		pos += 1
		s += 'O'
	else:
		s += 'o'
print(s)


from math import *

def isPerfectSquare(n):
	sq = int(sqrt(n))
	return sq * sq == n

def isFibonacciMember(n):
	return isPerfectSquare(5 * n * n + 4) or isPerfectSquare(5 * n * n - 4)
n = int(input())
res = str()
for i in range(1, n + 1):
	if isFibonacciMember(i):
		res += 'O'
	else:
		res += 'o'
print(res)


n = int(input())
ans = ['o'] * n
a = b = 1
ans[0] = 'O'
while a + b <= n:
	ans[a + b - 1] = 'O'
	(a, b) = (b, a + b)
print(''.join(ans))


n = int(input())
f1 = 1
f2 = 1
for i in range(1, 1 + n):
	if i == f1 or i == f2:
		if f1 < f2:
			f1 += max(f1, f2)
		else:
			f2 += max(f1, f2)
		print('O', end='')
	else:
		print('o', end='')


__author__ = 'Dilshod'
n = int(input())
fibonacci = [1, 1]
f1 = 1
f2 = 1
name = ['o'] * n
while fibonacci[-1] < n:
	a = f2
	f2 = f1 + f2
	f1 = a
	fibonacci += [f2]
for i in fibonacci:
	if i <= n:
		name[i - 1] = 'O'
print(*name, sep='')


f = []

def fibo(n):
	a = 0
	b = 1
	if n == 1:
		return b
	else:
		for i in range(2, n):
			c = a + b
			a = b
			b = c
		return b
for i in range(1, 1001):
	f.append(fibo(i))
x = int(input())
for i in range(1, x + 1):
	if i in f:
		print('O', end='')
	else:
		print('o', end='')


import time

def timer(func):

	def f(*args, **kwargs):
		start_time = time.time()
		ret = func(*args, **kwargs)
		print('--- %s seconds ---' % (time.time() - start_time))
		return ret
	return f

def main():
	k = int(input())
	result = ''
	f = [1, 1]
	for i in range(1, k + 1):
		if i == f[-1]:
			f.append(f[-1] + f[-2])
			result += 'O'
		else:
			result += 'o'
	print(result)
main()


fibonacci = []
n1 = 0
n2 = 1
for i in range(17):
	fibonacci.append(n1 + n2)
	n1 = n2
	n2 = fibonacci[i]
x = int(input())
for i in range(1, x + 1):
	if i in fibonacci:
		print('O', end='')
	else:
		print('o', end='')


w = int(input())
(a, b) = (0, 1)
(t, p, y) = ([], [], [])
for i in range(0, w):
	q = 'o'
	y.append(q)
for i in range(2, w):
	c = a + b
	a = b
	b = c
	if b > w:
		break
	t.append(b)
repl_char = 'O'
temp = list(y)
for idx in t:
	temp[idx - 1] = repl_char
r = ''.join(temp)
if w == 1:
	print('O')
elif w == 2:
	print('OO')
elif w == 3:
	print('OOO')
elif w == 4:
	print('OOOo')
elif w == 5:
	print('OOOoO')
else:
	print(r)


def main():
	n = int(input())
	name = ['o'] * n
	(b, c) = (1, 1)
	while c <= n:
		name[c - 1] = 'O'
		(b, c) = (c, b + c)
	print(''.join(name))
main()


l = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]
n = int(input())
for i in range(1, n + 1):
	if i in l:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
l = [1, 1]
f = ''
for i in range(2, n + 1):
	l.append(l[i - 2] + l[i - 1])
for j in range(1, n + 1):
	if j in l:
		f += 'O'
	else:
		f += 'o'
print(f)


N = int(input())
fibo = [0] * 1001
fibo[0] = 1
fibo[1] = 2
for i in range(2, 1001):
	fibo[i] = fibo[i - 1] + fibo[i - 2]
res = []
for i in range(N):
	if i + 1 in fibo:
		res.append('O')
	else:
		res.append('o')
print(''.join(res))


n = int(input())
(a, b) = (1, 2)
s = set()
while a <= n + 1:
	s.add(a)
	(a, b) = (b, a + b)
for i in range(1, n + 1):
	if i in s:
		print('O', end='')
	else:
		print('o', end='')


arrFibos = []
a = 1
b = 1
arrFibos.append(a)
arrFibos.append(b)
while a + b <= 1000:
	arrFibos.append(a + b)
	tmp = a
	a += b
	b = tmp

def isFibo(x):
	for i in range(len(arrFibos)):
		if x == arrFibos[i]:
			return True
	return False

def getName(size):
	name = ''
	for i in range(size):
		if isFibo(i + 1):
			name += 'O'
		else:
			name += 'o'
	return name
size = int(input())
print(getName(size))


n = int(input())
lst = []
ans = ''
lst.append(1)
lst.append(1)
for i in range(2, 1001):
	lst.append(lst[i - 1] + lst[i - 2])
k = 0
for i in range(1, n + 1):
	if i in lst:
		ans += 'O'
		k += 1
	else:
		ans += 'o'
print(ans)


n = int(input())
f1 = 1
f2 = 1
d = {1: 1}
st = []
if n == 1:
	st.append('O')
elif n == 2:
	st.append('OO')
elif n == 3:
	st.append('OOO')
else:
	st.append('OO')
	for i in range(3, n + 1):
		f3 = f2 + f1
		f1 = f2
		f2 = f3
		d[f3] = i + 1
	for i in range(3, n + 1):
		if i in d:
			st.append('O')
		else:
			st.append('o')
st = ''.join(st)
print(st)


n = int(input())
A = []
a = 0
b = 1
if n == 1:
	A.append(1)
else:
	for i in range(2, n + 2):
		c = a + b
		A.append(c)
		a = b
		b = c
for i in range(1, n + 1):
	if i in A:
		print('O', end='')
	else:
		print('o', end='')


def checkFib(n):
	if int((5 * n ** 2 + 4) ** 0.5) == (5 * n ** 2 + 4) ** 0.5 or int((5 * n ** 2 - 4) ** 0.5) == (5 * n ** 2 - 4) ** 0.5:
		return True
	return False
n = int(input())
ans = ''
for i in range(1, n + 1):
	if checkFib(i):
		ans += 'O'
	else:
		ans += 'o'
print(ans)


n = int(input().strip())
(f1, f2) = (0, 1)
f = [0] * 1598
while f2 <= n:
	(f1, f2) = (f2, f1 + f2)
	f[f1] = 1
name = ''
for i in range(1, n + 1):
	name += 'O' if f[i] else 'o'
print(name)


import math

def check(n):
	sqrt = int(math.sqrt(n))
	if pow(sqrt, 2) == n:
		return True
	else:
		return False

def isFibonacciNumber(n):
	res1 = 5 * n * n + 4
	res2 = 5 * n * n - 4
	if check(res1) or check(res2):
		return True
	else:
		return False
n = int(input(''))
name = ''
for i in range(1, n + 1):
	if isFibonacciNumber(i):
		name = name + 'O'
	else:
		name = name + 'o'
print(name)


n = int(input())
fib = [None] * 1000
fib[0] = 0
fib[1] = 1
for i in range(2, 1000):
	fib[i] = fib[i - 1] + fib[i - 2]
res = ''
for i in range(1, n + 1):
	if i in fib:
		res += 'O'
	else:
		res += 'o'
print(res)


n = int(input())
l = ['o'] * n
f1 = f2 = 1
while f2 <= n:
	l[f2 - 1] = 'O'
	(f1, f2) = (f2, f1 + f2)
print(''.join(l))


n = int(input())
c = 0
a = 1
b = 0
lst = []
str2 = ''
for i in range(n):
	c = a + b
	a = b
	b = c
	lst.append(c)
if n == 2:
	print('OO')
elif n == 3:
	print('OOO')
else:
	for i in range(n + 1):
		if i in lst:
			str2 += 'O'
		else:
			str2 += 'o'
	print(str2.lstrip('o'))


n = int(input())
(x1, x2) = (1, 1)
a = ['o'] * (n + 1)
while x2 < n + 1:
	a[x1] = 'O'
	a[x2] = 'O'
	d = x1
	x1 = x2
	x2 = d + x2
for i in range(1, n + 1):
	print(a[i], end='')


f1 = 1
f2 = 1
s = set([1])
fn = f1 + f2
while fn <= 1000:
	s.add(fn)
	f1 = f2
	f2 = fn
	fn = f2 + f1
n = int(input())
a = ''
for i in range(1, n + 1):
	if i in s:
		a += 'O'
	else:
		a += 'o'
print(a)


from sys import stdin, stdout

def rint():
	return map(int, stdin.readline().split())
f = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987}
n = int(input())
ans = []
for i in range(1, n + 1):
	if i in f:
		ans.append('O')
	else:
		ans.append('o')
print(''.join(ans))


n = int(input())
q = 1
b = 0
s = ''
for i in range(1, n + 1):
	if i == q + b:
		s += 'O'
		b = q
		q = i
	else:
		s += 'o'
print(s)


n = int(input())
dp = []
(a, b) = (1, 1)
for i in range(1000):
	x = a + b
	dp.append(a)
	a = b
	b = x
for i in range(1, n + 1):
	if i in dp:
		print('O', end='')
	else:
		print('o', end='')


N = int(input())
fib = [0, 1]
while fib[-1] < 1000:
	fib.append(fib[-1] + fib[-2])
for i in range(1, N + 1):
	print('O' if i in fib else 'o', end='')
print()


a = []
n = int(input())
a.append(0)
a.append(1)
s = ''
b = False
x = 0
y = 1
for i in range(n + 1):
	a.append(x + y)
	z = y
	y += x
	x = z
for i in range(1, n + 1):
	for j in a:
		if i == j:
			s += 'O'
			b = True
			break
	if b is False:
		s += 'o'
	else:
		b = False
print(s)


a = 1
b = 0
s = 0
z = [1]
for n in range(int(input())):
	s = a + b
	n = a
	a = s
	b = n
	z.append(s)
d = ''
for n in range(1, len(z)):
	if n in z:
		d += 'O'
	else:
		d += 'o'
print(d)


d = [1, 1]
n = int(input())
while d[-1] < n:
	d.append(d[-1] + d[-2])
s = set(d)
res = ''
for i in range(1, n + 1):
	if i in s:
		res += 'O'
	else:
		res += 'o'
print(res)


n = int(input())
fib = [1, 1]
while fib[-1] < n:
	fib.append(fib[-1] + fib[-2])
fib = set(fib)
print(''.join([('o', 'O')[i in fib] for i in range(1, n + 1)]))


n = int(input())
(a, b) = (1, 2)
s = 'O'
for i in range(2, n + 1):
	if b == i:
		(a, b) = (b, a + b)
		s = s + 'O'
	else:
		s = s + 'o'
print(s)


from sys import stdin, stdout
n = int(stdin.readline())
ans = 'o' * n
fib = [1, 1]
while fib[-1] < n:
	fib.append(fib[-1] + fib[-2])
ans = list(ans)
for v in fib:
	if v <= n:
		ans[v - 1] = 'O'
stdout.write(''.join(ans))


m = int(input())
n = 16
a = 0
b = 1
f = [1]
for i in range(n - 1):
	c = a + b
	a = b
	b = c
	f.append(c)
for i in range(1, m + 1):
	if i in f:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
l = ['o' for i in range(n)]
(a, b) = (1, 1)
l[a - 1] = 'O'
while True:
	(a, b) = (b, a + b)
	if b > n:
		break
	l[b - 1] = 'O'
print(''.join(l))


n = int(input())
f = [1, 1]
for i in range(2, 20):
	f.append(f[i - 1] + f[i - 2])
for i in range(n):
	if i + 1 in f:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())

def f(n):
	if n == 1 or n == 2:
		return 1
	return f(n - 1) + f(n - 2)
i = 2
p = []
while f(i) <= n:
	p.append(f(i))
	i += 1
x = ''
for i in range(n):
	if i + 1 in p:
		x += 'O'
	else:
		x += 'o'
print(x)


def main():
	n = int(input())
	(a, b) = (1, 1)
	out = []
	for i in range(1, n + 1):
		while b < i:
			(a, b) = (b, a + b)
		if b == i:
			out.append('O')
		else:
			out.append('o')
	print(''.join(out))
main()


n = int(input())
a = [0] * 1001
a[0] = 0
a[1] = 1
d = set()
d.add(0)
d.add(1)
for i in range(2, 1001):
	a[i] = a[i - 1] + a[i - 2]
	d.add(a[i])
s = ''
for i in range(1, n + 1):
	if i in d:
		s += 'O'
	else:
		s += 'o'
print(s)


n = int(input())
ans = 'O'
c1 = 1
c2 = 1
for i in range(2, n + 1):
	if i == c1 + c2:
		ans += 'O'
		c2 = c1
		c1 = i
	else:
		ans += 'o'
print(ans)


n = int(input())
import math

def isPerfectSquare(x):
	s = int(math.sqrt(x))
	return s * s == x

def isFibonacci(n):
	return isPerfectSquare(5 * n * n + 4) or isPerfectSquare(5 * n * n - 4)
name = ''
for i in range(1, n + 1):
	if isFibonacci(i):
		name += 'O'
	else:
		name += 'o'
print(name)


x = int(input())
seq = [1, 1]
name = ''
for i in range(x - 1):
	seq.append(seq[i] + seq[i + 1])
for i in range(1, x + 1):
	if i in seq:
		name += 'O'
	else:
		name += 'o'
print(name)


n = int(input())
f = {}
f[1] = 1
f[2] = 1
i = 1
k = 2
while i <= n:
	f[k + 1] = f[k] + f[k - 1]
	i = f[k + 1]
	k = k + 1
s = list('o' * n)
for i in f.values():
	if i <= n:
		s[i - 1] = 'O'
print(''.join(s))


def main():
	d = fib()
	n = int(input())
	s = ''
	for i in range(n):
		if i + 1 in d:
			s += 'O'
		else:
			s += 'o'
	print(s)

def fib():
	res = {1, 2}
	f1 = 1
	f2 = 2
	while f1 < 1010:
		res.add(f1 + f2)
		(f1, f2) = (f2, f1 + f2)
	return res
main()


ar = [1] + [0] * 2000
(f1, f2) = (1, 1)
while f1 <= len(ar):
	ar[f1] = 1
	(f1, f2) = (f1 + f2, f1)
n = int(input())
s = ''
for x in range(n):
	s += 'O' if ar[x + 1] else 'o'
print(s)


n = int(input())
p = ['o'] * n
a = 0
b = 1
while a + b <= n:
	p[a + b - 1] = 'O'
	b = a + b
	a = b - a
print(*p, sep='')


n = int(input())
f = []
a = 1
b = 1
f.append(b)
for i in range(2, n + 1):
	c = a + b
	a = b
	b = c
	f.append(c)
s = []
for i in range(n):
	s.append('o')
for i in range(1, n + 1):
	for j in f:
		if i == j:
			s[i - 1] = 'O'
		else:
			pass
for i in s:
	print(i, end='')


n = int(input())
num = ['o'] * n
num[0] = 'O'
m1 = n1 = 1
while m1 + n1 - 1 < n:
	num[m1 + n1 - 1] = 'O'
	c = n1
	n1 = m1 + n1
	m1 = c
print(*num, sep='')


import os
import sys
from math import *
from collections import *
from bisect import *
from io import BytesIO, IOBase

def vsInput():
	sys.stdin = open('input.txt', 'r')
	sys.stdout = open('output.txt', 'w')
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')
ALPHA = 'abcdefghijklmnopqrstuvwxyz/'
M = 1000000007
EPS = 1e-06

def Ceil(a, b):
	return a // b + int(a % b > 0)

def value():
	return tuple(map(int, input().split()))

def array():
	return [int(i) for i in input().split()]

def Int():
	return int(input())

def Str():
	return input()

def arrayS():
	return [i for i in input().split()]
for _ in range(1):
	n = int(input())
	have = [0, 1]
	for x in range(n):
		have.append(have[len(have) - 1] + have[len(have) - 2])
	fib = set(have)
	ans = []
	for x in range(n):
		if x + 1 in fib:
			ans.append('O')
		else:
			ans.append('o')
	print(*ans, sep='')


def main():
	fibonacci = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]
	n = int(input())
	s = ['o'] * n
	i = 0
	while fibonacci[i] <= n:
		s[fibonacci[i] - 1] = 'O'
		i += 1
	print(''.join(s))
main()


n = int(input())
F = [0] * (n + 1)
a = 1
b = 1
while b < n + 1:
	F[b] = 1
	(a, b) = (b, a + b)
ans = ''
for i in range(1, n + 1):
	if F[i] == 1:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


n = int(input())
ls = [1, 1]
while ls[-1] <= n:
	ls.append(ls[-1] + ls[-2])
print(''.join(('O' if i in ls else 'o' for i in range(1, n + 1))))


n = int(input())
temp = 1
b = 1
hold = 0
ans = ['o'] * n
while temp <= n:
	ans[temp - 1] = 'O'
	hold = temp
	temp += b
	b = hold
print(''.join(ans))


fib1 = 1
fib2 = 2
n = int(input())
ans = 'O'
for i in range(2, 1 + n):
	if i < fib2:
		ans += 'o'
	else:
		ans += 'O'
		(fib1, fib2) = (fib2, fib1 + fib2)
print(ans)


l = [1, 2]
for i in range(2, 15):
	s = l[i - 2] + l[i - 1]
	l.append(s)
rep = ''
n = int(input())
for i in range(1, n + 1):
	if i in l:
		rep += 'O'
	else:
		rep += 'o'
print(rep)


class eleven:

	def __init__(self, n):
		self.n = n
		self.printName(self.n)

	def printName(self, n):
		list1 = [0, 1]
		f0 = 0
		f1 = 1
		for x in range(0, n):
			f2 = f0 + f1
			list1.append(f2)
			f0 = f1
			f1 = f2
		for x in range(1, n + 1):
			if x in list1:
				print('O', end='')
			else:
				print('o', end='')
n = int(input())
if 1 <= n and n <= 1000:
	pass
else:
	exit()
elevenObj = eleven(n)


import sys

def fibs(n):
	(a, b) = (1, 1)
	out = set()
	while b <= n:
		out.add(b)
		(a, b) = (b, a + b)
	return out

def main():
	n = int(sys.stdin.read().strip())
	s = n * ['o']
	for i in fibs(n):
		s[i - 1] = 'O'
	return s
print(*main(), sep='')


def fibonacci(n):
	a = [0, 1]
	c = 0
	i = 1
	while c <= n:
		c = a[i - 1] + a[i]
		i += 1
		a.append(c)
	return a
n = int(input())
l = fibonacci(n)
for i in range(1, n + 1):
	if i in l:
		print('O', end='')
	else:
		print('o', end='')


a = int(input())
b = 'o' * a
d = 0
d1 = 0
d2 = 1
for i in range(len(b)):
	if d <= len(b):
		b = b[:d - 1] + 'O' + 'o' * (a - d)
	d = d1 + d2
	d1 = d2
	d2 = d
if a <= 3:
	print('O' * a)
else:
	print(b)


T_ON = 0
DEBUG_ON = 0
MOD = 998244353

def solve():
	n = read_int()
	f = fib_to_n(n)
	debug(f)
	A = ['o' for _ in range(n)]
	for i in range(1, n + 1):
		if i in f:
			A[i - 1] = 'O'
	print(''.join(A))

def main():
	T = read_int() if T_ON else 1
	for i in range(T):
		solve()

def debug(*xargs):
	if DEBUG_ON:
		print(*xargs)
from collections import *
import math
import os
import sys
from io import BytesIO, IOBase
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')

def read_int():
	return int(input())

def read_ints():
	return list(map(int, input().split()))

def print_nums(nums):
	print(' '.join(map(str, nums)))

def YES():
	print('YES')

def Yes():
	print('Yes')

def NO():
	print('NO')

def No():
	print('No')

def fib(n):
	(a, b) = (0, 1)
	for _ in range(n):
		(a, b) = (b, a + b)
	return a

def fib_ns(n):
	assert n >= 1
	f = [0 for _ in range(n + 1)]
	f[0] = 0
	f[1] = 1
	for i in range(2, n + 1):
		f[i] = f[i - 1] + f[i - 2]
	return f

def fib_to_n(n):
	f = []
	(a, b) = (0, 1)
	while a <= n:
		f.append(a)
		(a, b) = (b, a + b)
	return f

def gcd(a, b):
	if a == 0:
		return b
	return gcd(b % a, a)

def xgcd(a, b):
	(x0, x1, y0, y1) = (0, 1, 1, 0)
	while a != 0:
		((q, a), b) = (divmod(b, a), a)
		(y0, y1) = (y1, y0 - q * y1)
		(x0, x1) = (x1, x0 - q * x1)
	return (b, x0, y0)

def modinv(a, m):
	(g, x, _) = xgcd(a, m)
	if g != 1:
		raise Exception('gcd(a, m) != 1')
	return x % m

def mod_add(x, y):
	x += y
	while x >= MOD:
		x -= MOD
	while x < 0:
		x += MOD
	return x

def mod_mul(x, y):
	return x * y % MOD

def mod_pow(x, y):
	if y == 0:
		return 1
	if y % 2:
		return mod_mul(x, mod_pow(x, y - 1))
	p = mod_pow(x, y // 2)
	return mod_mul(p, p)

def mod_inv(y):
	return mod_pow(y, MOD - 2)

def mod_div(x, y):
	return mod_mul(x, mod_inv(y))

def is_prime(n):
	if n == 1:
		return False
	for i in range(2, int(n ** 0.5) + 1):
		if n % i:
			return False
	return True

def gen_primes(n):
	P = [True for _ in range(n + 1)]
	P[0] = P[1] = False
	for i in range(int(n ** 0.5) + 1):
		if P[i]:
			for j in range(2 * i, n + 1, i):
				P[j] = False
	return P
main()


l = [1, 1]
t = 1
for i in range(1, int(input()) + 1):
	l = l + [l[t] + l[t - 1]]
	t += 1
	if i in l:
		print('O', end='')
	else:
		print('o', end='')


import sys
from math import sqrt, floor, factorial
from collections import deque, Counter
inp = sys.stdin.readline
read = lambda : list(map(int, inp().strip().split()))

def gcd(a, b):
	mini = min(a, b)
	maxi = max(a, b)
	while maxi % mini != 0:
		(maxi, mini) = (mini, maxi % mini)
	return mini

def solve():
	n = int(inp())
	ans = ''
	(a, b) = (1, 1)
	for i in range(1, n + 1):
		if b == i:
			ans += 'O'
			t = b
			b = a + b
			a = t
		else:
			ans += 'o'
	print(ans)
solve()


def solve():
	n = int(input())
	ans = list('o' * n)
	al = [1, 1]
	(a, b) = (1, 1)
	while a <= 1000:
		(a, b) = (a + b, a)
		al.append(a)
	for i in range(n):
		if i + 1 in al:
			ans[i] = 'O'
	print(''.join(ans))
solve()


import sys
import math
get_string = lambda : sys.stdin.readline().strip()
get_list = lambda : list(map(int, sys.stdin.readline().strip().split()))
get_intList_from_str = lambda : list(map(int, list(sys.stdin.readline().strip())))
get_charList_from_str = lambda : list(sys.stdin.readline().strip())
get_int = lambda : int(sys.stdin.readline().strip())
pt = lambda x: sys.stdout.write(str(x))
n = get_int()
name = list('o' * n)
x = y = 1
while y <= n:
	name[y - 1] = 'O'
	(x, y) = (y, y + x)
print(''.join(name))


n = int(input())
dp = [0] * (n + 1)
dp[0] = 1
dp[1] = 1
for i in range(2, n + 1):
	dp[i] = dp[i - 1] + dp[i - 2]
for i in range(1, n + 1):
	for j in range(n + 1):
		if i == dp[j]:
			print('O', end='')
			break
		elif dp[j] > i:
			print('o', end='')
			break


fib = [1, 1]
while fib[-1] < 1000:
	fib.append(fib[-1] + fib[-2])
n = int(input().strip())
arr = ['o'] * n
for i in fib:
	if i <= n:
		arr[i - 1] = 'O'
	else:
		break
print(''.join(arr))


fibo = [1, 1]
for i in range(2, 100):
	fibo.append(fibo[i - 1] + fibo[i - 2])
	if fibo[i] > 1000:
		break
n = int(input())
for i in range(1, n + 1):
	if i in fibo:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
arr = [1, 2]
a = ''
for i in range(2, n):
	arr.append(arr[abs(i) - 1] + arr[abs(i) - 2])
for i in range(1, n + 1):
	if i in arr:
		a += 'O'
	else:
		a += 'o'
print(a)


n = int(input())
fib = []
if n == 1:
	print('O')
else:
	fib = [1, 1]
	i = 2
	while True:
		if fib[i - 1] + fib[i - 2] <= n:
			fib.append(fib[i - 1] + fib[i - 2])
			i += 1
		else:
			break
	for i in range(1, n + 1):
		if i in fib:
			print('O', end='')
		else:
			print('o', end='')


n = int(input())
fib = [0, 1]
while fib[-1] <= n:
	fib.append(fib[-1] + fib[-2])
name = ''
for i in range(1, n + 1):
	if i in fib:
		name += 'O'
	else:
		name += 'o'
print(name)


q = lambda : map(int, input().split())
qi = lambda : int(input())
qs = lambda : input().split()
n = qi()

def fibonacci(max):
	(a, b) = (1, 1)
	while a <= max:
		yield a
		(a, b) = (b, a + b)
print(*['O' if i in [x for x in fibonacci(n)] else 'o' for i in range(1, n + 1)], sep='')


n = int(input())
str = ''
li = [0, 1]
for i in range(2, 1001):
	li.append(li[i - 1] + li[i - 2])
for i in range(1, n + 1):
	if i in li:
		str += 'O'
	else:
		str += 'o'
print(str)


import math
import heapq, bisect
import sys
from collections import deque, defaultdict
from fractions import Fraction
mod = 10 ** 9 + 7
mod1 = 998244353
import os
import sys
from io import BytesIO, IOBase
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')

class TreeNode:

	def __init__(self, k, v):
		self.key = k
		self.value = v
		self.left = None
		self.right = None
		self.parent = None
		self.height = 1
		self.num_left = 1
		self.num_total = 1

class AvlTree:

	def __init__(self):
		self._tree = None

	def add(self, k, v):
		if not self._tree:
			self._tree = TreeNode(k, v)
			return
		node = self._add(k, v)
		if node:
			self._rebalance(node)

	def _add(self, k, v):
		node = self._tree
		while node:
			if k < node.key:
				if node.left:
					node = node.left
				else:
					node.left = TreeNode(k, v)
					node.left.parent = node
					return node.left
			elif node.key < k:
				if node.right:
					node = node.right
				else:
					node.right = TreeNode(k, v)
					node.right.parent = node
					return node.right
			else:
				node.value = v
				return

	@staticmethod
	def get_height(x):
		return x.height if x else 0

	@staticmethod
	def get_num_total(x):
		return x.num_total if x else 0

	def _rebalance(self, node):
		n = node
		while n:
			lh = self.get_height(n.left)
			rh = self.get_height(n.right)
			n.height = max(lh, rh) + 1
			balance_factor = lh - rh
			n.num_total = 1 + self.get_num_total(n.left) + self.get_num_total(n.right)
			n.num_left = 1 + self.get_num_total(n.left)
			if balance_factor > 1:
				if self.get_height(n.left.left) < self.get_height(n.left.right):
					self._rotate_left(n.left)
				self._rotate_right(n)
			elif balance_factor < -1:
				if self.get_height(n.right.right) < self.get_height(n.right.left):
					self._rotate_right(n.right)
				self._rotate_left(n)
			else:
				n = n.parent

	def _remove_one(self, node):
		replacement = node.left or node.right
		if node.parent:
			if AvlTree._is_left(node):
				node.parent.left = replacement
			else:
				node.parent.right = replacement
			replacement.parent = node.parent
			node.parent = None
		else:
			self._tree = replacement
			replacement.parent = None
		node.left = None
		node.right = None
		node.parent = None
		self._rebalance(replacement)

	def _remove_leaf(self, node):
		if node.parent:
			if AvlTree._is_left(node):
				node.parent.left = None
			else:
				node.parent.right = None
			self._rebalance(node.parent)
		else:
			self._tree = None
		node.parent = None
		node.left = None
		node.right = None

	def remove(self, k):
		node = self._get_node(k)
		if not node:
			return
		if AvlTree._is_leaf(node):
			self._remove_leaf(node)
			return
		if node.left and node.right:
			nxt = AvlTree._get_next(node)
			node.key = nxt.key
			node.value = nxt.value
			if self._is_leaf(nxt):
				self._remove_leaf(nxt)
			else:
				self._remove_one(nxt)
			self._rebalance(node)
		else:
			self._remove_one(node)

	def get(self, k):
		node = self._get_node(k)
		return node.value if node else -1

	def _get_node(self, k):
		if not self._tree:
			return None
		node = self._tree
		while node:
			if k < node.key:
				node = node.left
			elif node.key < k:
				node = node.right
			else:
				return node
		return None

	def get_at(self, pos):
		x = pos + 1
		node = self._tree
		while node:
			if x < node.num_left:
				node = node.left
			elif node.num_left < x:
				x -= node.num_left
				node = node.right
			else:
				return (node.key, node.value)
		raise IndexError('Out of ranges')

	@staticmethod
	def _is_left(node):
		return node.parent.left and node.parent.left == node

	@staticmethod
	def _is_leaf(node):
		return node.left is None and node.right is None

	def _rotate_right(self, node):
		if not node.parent:
			self._tree = node.left
			node.left.parent = None
		elif AvlTree._is_left(node):
			node.parent.left = node.left
			node.left.parent = node.parent
		else:
			node.parent.right = node.left
			node.left.parent = node.parent
		bk = node.left.right
		node.left.right = node
		node.parent = node.left
		node.left = bk
		if bk:
			bk.parent = node
		node.height = max(self.get_height(node.left), self.get_height(node.right)) + 1
		node.num_total = 1 + self.get_num_total(node.left) + self.get_num_total(node.right)
		node.num_left = 1 + self.get_num_total(node.left)

	def _rotate_left(self, node):
		if not node.parent:
			self._tree = node.right
			node.right.parent = None
		elif AvlTree._is_left(node):
			node.parent.left = node.right
			node.right.parent = node.parent
		else:
			node.parent.right = node.right
			node.right.parent = node.parent
		bk = node.right.left
		node.right.left = node
		node.parent = node.right
		node.right = bk
		if bk:
			bk.parent = node
		node.height = max(self.get_height(node.left), self.get_height(node.right)) + 1
		node.num_total = 1 + self.get_num_total(node.left) + self.get_num_total(node.right)
		node.num_left = 1 + self.get_num_total(node.left)

	@staticmethod
	def _get_next(node):
		if not node.right:
			return node.parent
		n = node.right
		while n.left:
			n = n.left
		return n

class SegmentTree1:

	def __init__(self, data, default='z', func=lambda a, b: min(a, b)):
		self._default = default
		self._func = func
		self._len = len(data)
		self._size = _size = 1 << (self._len - 1).bit_length()
		self.data = [default] * (2 * _size)
		self.data[_size:_size + self._len] = data
		for i in reversed(range(_size)):
			self.data[i] = func(self.data[i + i], self.data[i + i + 1])

	def __delitem__(self, idx):
		self[idx] = self._default

	def __getitem__(self, idx):
		return self.data[idx + self._size]

	def __setitem__(self, idx, value):
		idx += self._size
		self.data[idx] = value
		idx >>= 1
		while idx:
			self.data[idx] = self._func(self.data[2 * idx], self.data[2 * idx + 1])
			idx >>= 1

	def __len__(self):
		return self._len

	def query(self, start, stop):
		if start == stop:
			return self.__getitem__(start)
		stop += 1
		start += self._size
		stop += self._size
		res = self._default
		while start < stop:
			if start & 1:
				res = self._func(res, self.data[start])
				start += 1
			if stop & 1:
				stop -= 1
				res = self._func(res, self.data[stop])
			start >>= 1
			stop >>= 1
		return res

	def __repr__(self):
		return 'SegmentTree({0})'.format(self.data)

class SegmentTree:

	def __init__(self, data, default=0, func=lambda a, b: a + b):
		self._default = default
		self._func = func
		self._len = len(data)
		self._size = _size = 1 << (self._len - 1).bit_length()
		self.data = [default] * (2 * _size)
		self.data[_size:_size + self._len] = data
		for i in reversed(range(_size)):
			self.data[i] = func(self.data[i + i], self.data[i + i + 1])

	def __delitem__(self, idx):
		self[idx] = self._default

	def __getitem__(self, idx):
		return self.data[idx + self._size]

	def __setitem__(self, idx, value):
		idx += self._size
		self.data[idx] = value
		idx >>= 1
		while idx:
			self.data[idx] = self._func(self.data[2 * idx], self.data[2 * idx + 1])
			idx >>= 1

	def __len__(self):
		return self._len

	def query(self, start, stop):
		if start == stop:
			return self.__getitem__(start)
		stop += 1
		start += self._size
		stop += self._size
		res = self._default
		while start < stop:
			if start & 1:
				res = self._func(res, self.data[start])
				start += 1
			if stop & 1:
				stop -= 1
				res = self._func(res, self.data[stop])
			start >>= 1
			stop >>= 1
		return res

	def __repr__(self):
		return 'SegmentTree({0})'.format(self.data)

class Factorial:

	def __init__(self, MOD):
		self.MOD = MOD
		self.factorials = [1, 1]
		self.invModulos = [0, 1]
		self.invFactorial_ = [1, 1]

	def calc(self, n):
		if n <= -1:
			print('Invalid argument to calculate n!')
			print('n must be non-negative value. But the argument was ' + str(n))
			exit()
		if n < len(self.factorials):
			return self.factorials[n]
		nextArr = [0] * (n + 1 - len(self.factorials))
		initialI = len(self.factorials)
		prev = self.factorials[-1]
		m = self.MOD
		for i in range(initialI, n + 1):
			prev = nextArr[i - initialI] = prev * i % m
		self.factorials += nextArr
		return self.factorials[n]

	def inv(self, n):
		if n <= -1:
			print('Invalid argument to calculate n^(-1)')
			print('n must be non-negative value. But the argument was ' + str(n))
			exit()
		p = self.MOD
		pi = n % p
		if pi < len(self.invModulos):
			return self.invModulos[pi]
		nextArr = [0] * (n + 1 - len(self.invModulos))
		initialI = len(self.invModulos)
		for i in range(initialI, min(p, n + 1)):
			next = -self.invModulos[p % i] * (p // i) % p
			self.invModulos.append(next)
		return self.invModulos[pi]

	def invFactorial(self, n):
		if n <= -1:
			print('Invalid argument to calculate (n^(-1))!')
			print('n must be non-negative value. But the argument was ' + str(n))
			exit()
		if n < len(self.invFactorial_):
			return self.invFactorial_[n]
		self.inv(n)
		nextArr = [0] * (n + 1 - len(self.invFactorial_))
		initialI = len(self.invFactorial_)
		prev = self.invFactorial_[-1]
		p = self.MOD
		for i in range(initialI, n + 1):
			prev = nextArr[i - initialI] = prev * self.invModulos[i % p] % p
		self.invFactorial_ += nextArr
		return self.invFactorial_[n]

class Combination:

	def __init__(self, MOD):
		self.MOD = MOD
		self.factorial = Factorial(MOD)

	def ncr(self, n, k):
		if k < 0 or n < k:
			return 0
		k = min(k, n - k)
		f = self.factorial
		return f.calc(n) * f.invFactorial(max(n - k, k)) * f.invFactorial(min(k, n - k)) % self.MOD

def powm(a, n, m):
	if a == 1 or n == 0:
		return 1
	if n % 2 == 0:
		s = powm(a, n // 2, m)
		return s * s % m
	else:
		return a * powm(a, n - 1, m) % m

def sort_list(list1, list2):
	zipped_pairs = zip(list2, list1)
	z = [x for (_, x) in sorted(zipped_pairs)]
	return z

def product(l):
	por = 1
	for i in range(len(l)):
		por *= l[i]
	return por

def binarySearchCount(arr, n, key):
	left = 0
	right = n - 1
	count = 0
	while left <= right:
		mid = int((right + left) / 2)
		if arr[mid] <= key:
			count = mid + 1
			left = mid + 1
		else:
			right = mid - 1
	return count

def countdig(n):
	c = 0
	while n > 0:
		n //= 10
		c += 1
	return c

def countGreater(arr, n, k):
	l = 0
	r = n - 1
	leftGreater = n
	while l <= r:
		m = int(l + (r - l) / 2)
		if arr[m] >= k:
			leftGreater = m
			r = m - 1
		else:
			l = m + 1
	return n - leftGreater
a = [1, 2]
while a[-1] < 1000:
	a.append(a[-1] + a[-2])
a = set(a)
n = int(input())
ans = ['o'] * n
for i in range(n):
	if i + 1 in a:
		ans[i] = 'O'
print(*ans, sep='')


n = int(input())
f = 1
s = 2
c = 3
l = [1, 2]
while c <= 1002:
	c = f + s
	l.append(c)
	f = s
	s = c
ans = ''
for i in range(1, n + 1):
	if i in l:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


n = int(input())

def solve(n):
	if n == 1:
		print('O')
		return
	elif n == 2:
		print('OO')
		return
	else:
		l = [None] * (n + 1)
		l[0] = 1
		l[1] = 1
		for i in range(2, n + 1):
			l[i] = l[i - 1] + l[i - 2]
		ans = []
		for i in range(n):
			if i + 1 in l:
				ans.append('O')
			else:
				ans.append('o')
		print(''.join(ans))
		return
solve(n)


n = int(input())
i = 1
n1 = 1
n2 = 1
nth = 0
H = ''
L = list()
while i <= n:
	L.append(n2)
	nth = n1 + n2
	n1 = n2
	n2 = nth
	i += 1
for j in range(n):
	if j + 1 in L:
		H += 'O'
	else:
		H += 'o'
print(H)


n = int(input())
f = 2
ff = 3
print('O', end='')
for i in range(2, n + 1):
	if i == f:
		print('O', end='')
		t = f
		f = ff
		ff = t + ff
	else:
		print('o', end='')


def fib(num):
	a = [0, 1]
	first = 0
	second = 1
	for _ in range(num):
		temp = first
		first = second
		second += temp
		a.append(second)
	return a
n = int(input())
name = ''
for i in range(1, n + 1):
	p = False
	for j in fib(n):
		if i == j:
			name += 'O'
			p = True
			break
	if not p:
		name += 'o'
print(name)


def fib(n):
	fib = [1, 1]
	for i in range(3, n + 1):
		fib.append(fib[-1] + fib[-2])
	return fib
fibs = fib(1000)
ans = ''
for i in range(1, int(input()) + 1):
	ans += ['o', 'O'][i in fibs]
print(ans)


n = int(input())
fib = [1, 1]

def is_fib(i):
	global fib
	if i in fib:
		fib = (fib[1], fib[0] + fib[1])
		return True
	return False
name = ''
for i in range(1, n + 1):
	name += 'O' if is_fib(i) else 'o'
print(name)


import sys
import math

def input():
	return sys.stdin.readline().strip()

def iinput():
	return int(input())

def minput():
	return map(int, sys.stdin.readline().strip().split())

def listinput():
	return list(map(int, sys.stdin.readline().strip().split()))
fib = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
n = iinput()
for i in range(1, n + 1):
	if i in fib:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
fib = [1, 1]
for m in range(2, n + 1):
	fib.append(fib[m - 1] + fib[m - 2])
s = ''
for i in range(n):
	if i + 1 in fib:
		s += 'O'
	else:
		s += 'o'
print(s)


l = [0, 1]
n = int(input())
for _ in range(16):
	l.append(l[-1] + l[-2])
s = ''
for i in range(1, n + 1):
	if i in l:
		s += 'O'
	else:
		s += 'o'
print(s)


n = int(input())
a = 0
l = []
b = 1
c = 0
while c <= n:
	c = a + b
	l.append(c)
	a = b
	b = c
for i in range(1, n + 1):
	if i in l:
		print('O', end='')
	else:
		print('o', end='')


def fib(a):
	if a < 2:
		return a
	else:
		return fib(a - 1) + fib(a - 2)
n = int(input())
l = []
i = 0
j = 0
while fib(i) <= n:
	l.append(fib(i))
	i = i + 1
for j in range(1, n + 1):
	if j in l:
		print('O', end='')
	else:
		print('o', end='')


L = [1, 1]
for i in range(15):
	L += [L[i] + L[i + 1]]
n = int(input())
for i in range(n):
	if i + 1 in L:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
f = 0
s = 1
lst = []
while f <= n + 1:
	lst.append(f)
	(f, s) = (s, f + s)
for i in range(1, n + 1):
	if i in lst:
		print('O', end='')
	else:
		print('o', end='')
print()


from math import sqrt

def is_fibonacci(n):
	phi = 0.5 + 0.5 * sqrt(5.0)
	a = phi * n
	return n == 0 or abs(round(a) - a) < 1.0 / n

def new_name(number):
	name = list()
	for i in range(1, number + 1):
		if is_fibonacci(i):
			name.append('O')
		else:
			name.append('o')
	return ''.join(name)
m = int(input())
print(new_name(m))


a = int(input())
l = [1, 1]
b = ''
for i in range(2, a + 1):
	l.append(l[i - 2] + l[i - 1])
for j in range(1, a + 1):
	if j in l:
		b += 'O'
	else:
		b += 'o'
print(b)


n = int(input())
z = ['o'] * n
fibs = [1, 1]
for i in range(2, n + 1):
	fibs += (fibs[i - 1] + fibs[i - 2],)
j = 1
k = 1
while j != n + 1:
	if j > fibs[k]:
		k += 1
	if j == fibs[k]:
		z[j - 1] = 'O'
		k += 1
	j += 1
print(''.join(z))


memo = {}
n = 10

def fib(n):
	if n in memo:
		return memo[n]
	if n <= 2:
		f = 1
	else:
		f = fib(n - 1) + fib(n - 2)
	memo[n] = f
	return f
p = fib(17)
aantalletters = int(input())
letters = ''
for k in range(1, aantalletters + 1):
	if int(k) in memo.values():
		letters += 'O'
	else:
		letters += 'o'
print(letters)


n = int(input())
fibs = [1, 1]
while fibs[-1] + fibs[-2] <= 1000:
	fibs.append(fibs[-1] + fibs[-2])
name = ''
for i in range(1, n + 1):
	if i in fibs:
		name += 'O'
	else:
		name += 'o'
print(name)


n = int(input())
l = []
s = ''
a = 1
b = 2
while a <= n:
	l.append(a)
	c = a + b
	a = b
	b = c
for i in range(1, n + 1):
	if (i in l) == True:
		s = s + 'O'
	else:
		s = s + 'o'
print(s)


n = int(input())
a = [0] * 1000
a[1] = 1
a[2] = 1
i = 3
while a[i - 1] < 1000:
	a[i] = a[i - 1] + a[i - 2]
	i = i + 1
for j in range(1, n + 1):
	temp = 0
	for k in range(1, i):
		if a[k] == j:
			print('O', end='')
			temp = 1
			break
	if temp == 0:
		print('o', end='')


import collections
n = int(input())
dp = [0, 1] + [0] * 50
for i in range(2, 52):
	dp[i] = dp[i - 1] + dp[i - 2]
d = collections.Counter(dp)
ans = ''
for i in range(1, n + 1):
	if i in d:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


def fibonacci(number):
	t = [1, 1]
	while t[-1] <= number:
		a = t[-2] + t[-1]
		t.append(a)
	s = ''
	for i in range(1, number + 1):
		if i in t:
			s = s + 'O'
		else:
			s = s + 'o'
	return s
print(fibonacci(int(input())))


d = list()

def Fib():
	d.append(0)
	d.append(1)
	for i in range(2, 1001):
		d.append(d[i - 2] + d[i - 1])
Fib()
s = ''
n = int(input())
for i in range(1, n + 1):
	if i in d:
		s += 'O'
	else:
		s += 'o'
print(s)


ar = [0] * 1000
ar[0] = 0
ar[1] = 1
ar[2] = 1
for i in range(3, 1000):
	ar[i] = ar[i - 1] + ar[i - 2]
n = int(input())
s = ''
for i in range(n):
	if i + 1 in ar:
		s += 'O'
	else:
		s += 'o'
print(s)


f = []
s = ''
n = int(input())
f.append(1)
f.append(1)
count = 1
for i in range(0, n + 10):
	f.append(f[i + 1] + f[i])
for i in range(n):
	if i + 1 == f[count]:
		s = s + 'O'
		count += 1
	else:
		s = s + 'o'
print(s)


n = int(input())
a = ''
b = 1
c = 1
f = [1, 1]
m = max(f)
while m <= n:
	v = b + c
	b = c
	c = v
	f.append(v)
	m = v
for i in range(1, n + 1):
	if i in f:
		a = a + 'O'
	else:
		a = a + 'o'
print(a)


n = int(input())
k = ['o'] * n
a = b = 1
while b <= n:
	k[b - 1] = 'O'
	(a, b) = (b, a + b)
print(*k, sep='')


a = int(input())
k = 1
z = 1
u = ''
for i in range(1, a + 1):
	if i == z:
		z = k + z
		k = z - k
		u = u + 'O'
	else:
		u = u + 'o'
print(u)


n = int(input())
frt = 1
snd = 1
name = ''
a = []
a.append(1)
a.append(1)
for i in range(3, n * 2):
	sum1 = frt + snd
	a.append(sum1)
	frt = snd
	snd = sum1
for i in range(1, n + 1):
	if i in a:
		name += 'O'
	else:
		name += 'o'
print(name)


import math
f = [1, 1]
n = int(input())
for i in range(2, 17):
	f.append(f[i - 1] + f[i - 2])
for i in range(1, n + 1):
	if i in f:
		print('O', end='')
	else:
		print('o', end='')
print()


n = int(input())

def fib(n):
	global s
	s = []
	a = 1
	b = 1
	for i in range(n + 1):
		s.append(a)
		(a, b) = (b, a + b)
fib(n)
for i in range(1, n + 1):
	if i in s:
		print('O', end='')
	else:
		print('o', end='')


a = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
n = int(input())
m = ''
for i in range(1, n + 1):
	if i in a:
		m = m + 'O'
	else:
		m = m + 'o'
print(m)


n = int(input())
f = [1, 1]
for i in range(n):
	f.append(f[-1] + f[-2])
f = set(f)
ans = []
for i in range(1, n + 1):
	if i in f:
		ans.append('O')
	else:
		ans.append('o')
print(''.join(ans))


n = int(input())
fibs = set()
(a, b) = (1, 1)
while a <= 1000:
	(a, b) = (b, a + b)
	fibs.add(a)
print(''.join(('O' if i in fibs else 'o' for i in range(1, n + 1))))


n = int(input())
dp = [0] * (n + 100)
dp[0] = 1
dp[1] = 1
res = 'O'
for i in range(2, n + 100):
	dp[i] = dp[i - 1] + dp[i - 2]
for i in range(2, n + 1):
	if i in dp:
		res += 'O'
	else:
		res += 'o'
print(res)


n = int(input())
l = [1]
a = 1
b = 1
for i in range(1, n + 1):
	(a, b) = (b, a + b)
	if b > n:
		break
	l.append(b)
s = ''
for i in range(1, n + 1):
	if i in l:
		s = s + 'O'
	else:
		s = s + 'o'
print(s)


n = int(input())
a = []
t = 2
while True:
	if len(a) == 0:
		a.append(1)
	elif len(a) == 1:
		a.append(1)
	else:
		a.append(a[t - 2] + a[t - 1])
		if a[t] > n:
			break
		t += 1
x = ''
for i in range(1, n + 1):
	if i in a:
		x += 'O'
	else:
		x += 'o'
print(x)


n = int(input())
s = ['o' for _ in range(n)]
a = 0
b = 1
s[a] = 'O'
while b < n:
	(a, b) = (b, a + b)
	if b <= n:
		s[b - 1] = 'O'
print(''.join(s))


n = int(input())
F = [1, 1]
while F[-1] + F[-2] <= n:
	F.append(F[-1] + F[-2])
ans = ['o'] * n
for i in F:
	ans[i - 1] = 'O'
print(''.join(ans))


n = int(input())
a = [1, 1]
str = ''
while a[-1] <= n:
	a.append(a[-1] + a[-2])
for i in range(len(a)):
	a[i] -= 1
for i in range(n):
	if a.count(i) > 0:
		str += 'O'
	else:
		str += 'o'
print(str)


n = int(input())
list_ = 1001 * [0]

def fib():
	list_[0] = 1
	list_[1] = 1
	list_[2] = 1
	for i in range(3, 1001):
		list_[i] = list_[i - 1] + list_[i - 2]
fib()
for i in range(1, n + 1):
	if i in list_:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
a = 1
f = [1, 1]
ans = ''
for i in range(n):
	f.append(f[i] + f[i + 1])
	if i + 1 in f:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


def stranger(n):
	if n == 1:
		return 'O'
	ans = ''
	fib = [i for i in range(n + 1)]
	fib[0] = 1
	fib[1] = 1
	for i in range(2, n + 1):
		fib[i] = fib[i - 1] + fib[i - 2]
	for i in range(1, n + 1):
		if i in fib:
			ans += 'O'
		else:
			ans += 'o'
	return ans
n = int(input())
print(stranger(n))


q = int(input())

def feb(q):
	m = 1
	s = 0
	while m <= q and s <= q:
		if q == m or q == s:
			return True
		else:
			s = s + m
			if q == m or q == s:
				return True
			m = m + s
	return False
for i in range(1, q + 1):
	if feb(i):
		print('O', end='')
	else:
		print('o', end='')


from math import *

def isPerfectSquare(n):
	root = int(sqrt(n))
	return root ** 2 == n

def isFibonacci(n):
	return isPerfectSquare(5 * n * n + 4) or isPerfectSquare(5 * n * n - 4)
n = int(input())
res = str()
for i in range(1, n + 1):
	if isFibonacci(i):
		res += 'O'
	else:
		res += 'o'
print(res)


n = int(input())
f = [0 for i in range(110)]
f[0] = 1
f[1] = 1
for i in range(2, 100):
	f[i] = f[i - 1] + f[i - 2]
for i in range(n):
	if i + 1 in f:
		print('O', end='')
	else:
		print('o', end='')


R = lambda type_='int': list(map(eval(type_), input().split(' ')))
n = int(input())
s = ['o'] * n
i = 1
j = 1
while j <= n:
	s[j - 1] = 'O'
	(i, j) = (j, i + j)
print(''.join(s))


n = int(input())
prev = 1
curr = 2
nxt = 2
strg = 'O'
if n > 1:
	for i in range(2, n + 1):
		if i == nxt:
			strg = strg + 'O'
			nxt = curr + prev
			prev = curr
			curr = nxt
		else:
			strg = strg + 'o'
	print(strg)
else:
	print(strg)


n = int(input())
if n == 1:
	print('O')
elif n == 2:
	print('OO')
elif n == 3:
	print('OOO')
else:
	l = []
	a = 1
	b = 1
	l.append(a)
	l.append(b)
	k = 2
	while k != n:
		c = a + b
		l.append(c)
		(a, b) = (b, c)
		k += 1
	for i in range(n):
		if i + 1 in l:
			print('O', end='')
		else:
			print('o', end='')
	print()


n = int(input())

def fib2(n):
	if n <= 1:
		return 1
	solutions = []
	solutions.append(1)
	solutions.append(1)
	i = 2
	while solutions[i - 1] + solutions[i - 2] <= n:
		solutions.append(solutions[i - 1] + solutions[i - 2])
		i = i + 1
	return solutions[1:]
fibs = fib2(n)
if fibs == 1:
	fibs = [1]
name = ''
for i in fibs:
	if len(name) < i - 1:
		diff = i - len(name) - 1
		name = name + 'o' * diff + 'O'
	else:
		name = name + 'O'
if len(name) < n:
	diff = n - len(name)
	name = name + 'o' * diff
print(name)


import sys
import math
get_string = lambda : sys.stdin.readline().strip()
get_list = lambda : list(map(int, sys.stdin.readline().strip().split()))
get_intList_from_str = lambda : list(map(int, list(sys.stdin.readline().strip())))
get_charList_from_str = lambda : list(sys.stdin.readline().strip())
get_int = lambda : int(sys.stdin.readline().strip())
pt = lambda x: sys.stdout.write(str(x))
n = get_int()
name = ''
fiboDP = [-1] * (n + 1)
fiboDP[0] = fiboDP[1] = 1

def fib(n):
	if fiboDP[n - 1] != -1:
		return fiboDP[n - 1]
	else:
		fiboDP[n - 1] = fib(n - 1) + fib(n - 2)
for i in range(n + 1):
	fib(i + 1)
for i in range(1, n + 1):
	if i in fiboDP:
		name += 'O'
	else:
		name += 'o'
print(name)


def binp(x):
	(l, r) = (-1, len(a))
	while r - l > 1:
		m = (l + r) // 2
		if a[m] <= x:
			l = m
		else:
			r = m
	return a[l] == x
n = int(input())
a = [1]
x = 2
while x <= n:
	a.append(x)
	x = a[-2] + a[-1]
s = ''
for i in range(n):
	if binp(i + 1):
		s += 'O'
	else:
		s += 'o'
print(s)


n = int(input())
ans = n * ['o']
(i, j) = (0, 1)
while i + j <= n:
	(i, j) = (j, i + j)
	ans[j - 1] = 'O'
print(''.join(ans))


n = int(input())
a = [1, 2]
for i in range(2, n):
	a.append(a[i - 1] + a[i - 2])
k = 0
for j in range(1, n + 1):
	if j == a[k]:
		print('O', end='')
		k += 1
	else:
		print('o', end='')


n = int(input())
f1 = 1
f2 = 1
fn = 0
seq = []
if n == 1:
	seq.append(f1)
else:
	seq.append(f1)
	seq.append(f2)
	while fn < n:
		fn = f1 + f2
		f1 = f2
		f2 = fn
		seq.append(fn)
str = ''
for i in range(1, n + 1):
	if i in seq:
		str += ''.join('O')
	else:
		str += ''.join('o')
print(str)


n = int(input())
fib = [1, 1]
f = set()
while fib[0] <= n:
	f.add(fib[1])
	fib = (fib[1], fib[0] + fib[1])
ans = ''
for i in range(1, n + 1):
	if i in f:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


l = []
s = ''
n = int(input())
(a, b) = (1, 1)
l.append(a)
l.append(b)
count = 0
if n == 1:
	print('O')
elif n == 2:
	print('OO')
else:
	while count < n:
		c = a + b
		a = b
		b = c
		count += 1
		if c <= n:
			l.append(c)
	for i in range(1, n + 1):
		if i in l:
			s = s + 'O'
		else:
			s = s + 'o'
	print(s)


n = int(input())
f0 = 0
f1 = 1
fn = 0
l1 = []
str = ''
while fn <= n:
	fn = f0 + f1
	f0 = f1
	f1 = fn
	l1.append(fn)
for i in range(1, n + 1):
	if i in l1:
		str = str + 'O'
	else:
		str = str + 'o'
print(str)


f = [1, 1]
for j in range(1000):
	f.append(f[-1] + f[-2])
n = int(input())
a = ''
for j in range(1, n + 1):
	if j in f:
		a = a + 'O'
	else:
		a = a + 'o'
print(a)


n = int(input())
nc = n
c = 0
s = ''
a = 1
b = 1
l = []
l.append(1)
while c <= 1000:
	c = a + b
	a = b
	b = c
	l.append(c)
for i in range(nc):
	if i + 1 in l:
		s += 'O'
	else:
		s += 'o'
print(s)


fib = [1, 1]
for i in range(2, 1009):
	fib.append(fib[-1] + fib[-2])
n = int(input())
ans = ''
for i in range(1, n + 1):
	if i in fib:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


def fib(n):
	x = []
	if n == 1 or n == 2:
		return 1
	else:
		return fib(n - 2) + fib(n - 1)
x = []
n = int(input(''))
name = ''
for i in range(1, 18):
	x.append(fib(i))
for i in range(1, n + 1):
	if i in x:
		name = name + 'O'
	else:
		name = name + 'o'
print(name)


n = int(input())
fib1 = 1
fib2 = 0
temp = 0
retString = ''
fibonacci = []
if n == 1:
	fibonacci.append(1)
else:
	while n > fib1:
		temp = fib2
		fib2 = fib1 + fib2
		fib1 = temp
		fibonacci.append(fib2)
for i in range(1, n + 1):
	if i in fibonacci:
		retString += 'O'
	else:
		retString += 'o'
print(retString)


n = int(input())
a = [1, 1]
t = 1
p = 1
t1 = 2
while p + t <= n:
	a.append(a[t1 - 1] + a[t1 - 2])
	t1 += 1
	t = p
	p = a[t1 - 1] + a[t1 - 2]
m = ''
a.append(p)
for i in range(1, n + 1):
	if i in a:
		m += 'O'
	else:
		m += 'o'
print(m)


n = int(input())
l = [0] * 1001
b = [0] * 1001
b[1] = 1
b[2] = 1
l[1] = 1
l[2] = 1
i = 2
x = 0
while x <= 1000:
	x = l[i - 1] + l[i - 2]
	l[i] = x
	if x <= 1000:
		b[x] = 1
	else:
		break
	i = i + 1
for i in range(1, n + 1):
	if b[i] == 1:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
fib = []
fib.append(1)
fib.append(1)
for i in range(2, n + 1):
	if fib[i - 1] + fib[i - 2] > n:
		break
	fib.append(fib[i - 1] + fib[i - 2])
name = ['o' for i in range(n)]
for i in range(len(fib)):
	name[fib[i] - 1] = 'O'
print(*name, sep='')


n = int(input())
a = 1
b = 1
c = []
for i in range(1, n + 1):
	d = a + b
	c.append(d)
	if i == 1 or i in c:
		print('O', end='')
	else:
		print('o', end='')
	a = b
	b = d


r = int(input())
m = 'O'
s = []
if r == 1:
	print('O')
elif r == 2:
	print('OO')
else:
	s.append(1)
	s.append(1)
	for i in range(2, r + 1):
		a = s[i - 1] + s[i - 2]
		s.append(a)
		if i in s:
			m += 'O'
		else:
			m += 'o'
	print(m)


n = int(input())
(x, y) = (1, 1)
nextFib = x + y
answer = ''
for i in range(n):
	if i + 1 == x:
		answer += 'O'
	elif i + 1 == nextFib:
		answer += 'O'
		x = y
		y = nextFib
		nextFib = x + y
	else:
		answer += 'o'
print(answer)


n = int(input())
a = 1
b = 1
x = ['o' for _ in range(n)]
while b <= n:
	x[b - 1] = 'O'
	a ^= b
	b ^= a
	a ^= b
	b = a + b
print(''.join(x))


import math

def ifPerfectSquare(x):
	s = int(math.sqrt(x))
	return s * s == x

def isFibo_or_not(n):
	return ifPerfectSquare(5 * n * n + 4) or ifPerfectSquare(5 * n * n - 4)
n = int(input())
n = n + 1
for i in range(1, n):
	if isFibo_or_not(i) == True:
		print('O', end='')
	else:
		print('o', end='')


def fib(n):
	if n == 1 or n == 2:
		return 1
	else:
		return fib(n - 1) + fib(n - 2)
n = int(input())
list = []
for i in range(1, 18):
	list.append(fib(i))
for i in range(1, n + 1):
	if i in list:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
f1 = 0
f2 = 1
s = []
for i in range(0, n + 1):
	f = f1 + f2
	s.append(f)
	f1 = f2
	f2 = f
for i in range(1, n + 1):
	if i in s:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
a = 1
b = 1
aa = []
aa.append(a)
aa.append(b)
for i in range(3, n + 2):
	c = a + b
	aa.append(c)
	a = b
	b = c
s = ''
for i in range(n):
	if i + 1 in aa:
		s += 'O'
	else:
		s += 'o'
print(s)


n = int(input())
z = ''
list1 = []
fib1 = 1
list1.append(fib1)
fib2 = 1
list1.append(fib2)
for i in range(2, n + 1):
	fib3 = fib1 + fib2
	list1.append(fib3)
	fib1 = fib2
	fib2 = fib3
for i in range(1, n + 1):
	if i in list1:
		z = z + 'O'
	else:
		z = z + 'o'
print(z)


n = int(input())
f1 = 1
f2 = 1
fib = [0] * (n + 1)
while f2 <= n:
	fib[f2] = 1
	temp = f1
	f1 = f2
	f2 += temp
res = ''
for i in range(1, n + 1):
	if fib[i] == 1:
		res += 'O'
	else:
		res += 'o'
print(res)


n = int(input())
F = [1, 2]
for i in range(100):
	F.append(F[-1] + F[-2])
F = set(F)
s = ''.join(('O' if i in F else 'o' for i in range(1, n + 1)))
print(s)


n = int(input())
i = 1
j = 1
l1 = ['o'] * (n + 1)
sum = 0
l1[1] = 'O'
while sum < n:
	sum = i + j
	if sum > n:
		break
	else:
		i = j
		j = sum
		l1[sum] = 'O'
for i in range(1, len(l1)):
	print(l1[i], end='')


n = int(input())
s = 'O'
(i, j, sum) = (1, 1, 0)
while n > sum:
	sum = sum + i
	s = s + 'O'
	s = s + 'o' * (i - 1)
	(i, j) = (i + j, i)
print(s[:n])


n = int(input())
n0 = 1
n1 = 2
ans = ''
for i in range(1, n + 1):
	if n0 == i or n1 == i:
		ans += 'O'
	elif n1 + n0 == i:
		ans += 'O'
		temp = n1
		n1 = n1 + n0
		n0 = temp
	else:
		ans += 'o'
print(ans)


n = int(input())
ls = []
(a, b) = (0, 1)
i = 0
s1 = ''
while True:
	if i == 0:
		ls.append(0)
	elif i == 1:
		ls.append(1)
	else:
		result = ls[i - 2] + ls[i - 1]
		if result <= n:
			ls.append(result)
		else:
			break
	i += 1
for j in range(1, n + 1):
	if j in ls:
		s1 += 'O'
	else:
		s1 += 'o'
print(s1)


n = int(input())
from functools import lru_cache

@lru_cache(maxsize=128, typed=False)
def fib(n):
	if n == 1:
		return 1
	elif n == 2:
		return 1
	else:
		return fib(n - 2) + fib(n - 1)
l = [fib(x) for x in range(1, n + 2)]
f2 = ['O' if x in l else 'o' for x in range(1, n + 1)]
print(''.join(f2))


n = int(input())
f1 = 1
f2 = 2
myList = [f1, f2]
for i in range(3, 1001):
	fx = f1 + f2
	myList.append(fx)
	f1 = f2
	f2 = fx
myWord = []
for j in range(1, n + 1):
	if j in myList:
		myWord += 'O'
	else:
		myWord += 'o'
myWord = ''.join(myWord)
print(myWord)


n = int(input())
if n == 1:
	print('O')
else:
	a = [0] * (1000 + 1)
	a[0] = 0
	a[1] = 1
	for i in range(2, 1001):
		a[i] = a[i - 1] + a[i - 2]
	for i in range(1, n + 1):
		if i in a:
			print('O', end='')
		else:
			print('o', end='')


from collections import defaultdict
from collections import deque
from collections import Counter
import sys
sys.setrecursionlimit(1000000)

def fib():
	ls = [1, 1]
	for i in range(100):
		ls.append(ls[-1] + ls[-2])
	return set(ls)
n = int(input())
s = []
f = fib()
for i in range(1, n + 1):
	if i in f:
		s.append('O')
	else:
		s.append('o')
print(''.join(s))


n = int(input())
s = ['o' for i in range(n)]
(a, b) = (1, 1)
while a <= n:
	s[a - 1] = 'O'
	(a, b) = (a + b, a)
for m in s:
	print(m, end='')


n = int(input())
s = 0
l = [1]
a = 1
b = 1
p = ['o'] * n
while s <= n:
	s = a + b
	if s <= n:
		l.append(s)
		a = b
		b = s
for i in range(n):
	if i + 1 in l:
		p[i] = 'O'
print(''.join(map(str, p)))


n = int(input())
s = ['o'] * 2000
(a, b) = (1, 1)
while a < 1000:
	s[a] = 'O'
	(a, b) = (b, a + b)
print(''.join(s[1:n + 1]))


l = [1, 1]
n = int(input())
s = ''

def fib(l, n):
	while len(l) <= n and l[-1] + l[-2] <= n + 1:
		l.append(l[-1] + l[-2])
		fib(l, n)
fib(l, n)
for i in range(1, n + 1):
	if i in l:
		s += 'O'
	else:
		s += 'o'
print(s)


n = int(input())
fib = [0, 1]
k = 1
m = 1
while fib[m] < n:
	l = fib[m] + fib[m - 1]
	fib.append(l)
	m += 1
for x in range(1, n + 1):
	if x in fib:
		print('O', end='')
	else:
		print('o', end='')


def fabio(i):
	if i == 1:
		return 1
	elif i == 2:
		return 1
	else:
		return fabio(i - 2) + fabio(i - 1)
n = int(input())
t = []
for i in range(n + 1):
	t.append(fabio(i + 1))
	if fabio(i + 1) > n:
		break
ch = ''
for i in range(n):
	if i + 1 in t:
		ch += 'O'
	else:
		ch += 'o'
print(ch)


def frameName(no_of_chars):
	if no_of_chars < 2:
		return 'O' * no_of_chars
	name = ['O'] + ['O'] + ['o'] * (no_of_chars - 2)
	(f1, f2) = (1, 1)
	while f1 + f2 <= no_of_chars:
		f3 = f1 + f2
		name[f3 - 1] = 'O'
		(f2, f1) = (f3, f2)
	return ''.join(name)
no_of_chars = int(input())
print(frameName(no_of_chars))


n = int(input())
list_o = []
res = ''
fib = [1, 1]
for i in range(1, n + 1):
	fib_num = 0
	fib_num = fib[len(fib) - 2] + fib[len(fib) - 1]
	fib.append(fib_num)
	if i in fib:
		list_o.append('O')
	else:
		list_o.append('o')
for o in list_o:
	res = res + o
print(res)


n = int(input())
a = 1
b = 1
fib = [0 for i in range(1005)]
fib[1] = 1
for i in range(20):
	try:
		(a, b) = (b, a + b)
		fib[b] = 1
	except:
		break
for i in range(1, n + 1):
	if fib[i] == 1:
		print('O', end='')
	else:
		print('o', end='')
print()


x = int(input())
a = 0
b = 1
ans = 'o' * x
jk = list(ans)
while b <= x:
	(a, b) = (b, a + b)
	if b <= x:
		jk.insert(b - 1, 'O')
		jk.pop(b)
print(''.join(jk))


n = int(input())
fib = [1, 1]
a = 2
b = ''
while a <= n:
	fib.append(a)
	a = fib[-1] + fib[-2]
for i in range(1, n + 1):
	if i in fib:
		b += 'O'
	else:
		b += 'o'
print(b)


x = int(input())
r = 0
s = 1
z = []
z.append(0)
while r <= x:
	t = r + s
	r = s
	s = t
	z.append(t)
for i in range(1, x + 1):
	if i in z:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
(n1, n2) = (1, 1)
li = ['o' for i in range(n + 1)]
while n1 <= n:
	li[n1] = 'O'
	nth = n1 + n2
	n1 = n2
	n2 = nth
nn = len(li)
for i in range(1, nn):
	print(li[i], end='')


def fib(num):
	if num == 1:
		return [1]
	elif num == 2:
		return [1, 2]
	else:
		res = [0 for i in range(num + 1)]
		(res[0], res[1]) = (1, 1)
		for i in range(2, num + 1):
			res[i] = res[i - 1] + res[i - 2]
		return res
n = int(input())
a = fib(n)
ans = ''
for i in range(n - 1):
	if i + 1 in a:
		ans += 'O'
	else:
		ans += 'o'
if n in a:
	ans += 'O'
else:
	ans += 'o'
print(ans)


def answer():
	a = int(input())
	fib = [1, 1]
	i = 1
	a_out = ''
	while i <= a:
		if i == fib[1]:
			temp = fib[1]
			fib[1] += fib[0]
			fib[0] = temp
			a_out += 'O'
		else:
			a_out += 'o'
		i += 1
	print(a_out)
answer()


try:
	n = int(input())
	next_num = 0
	first = 2
	second = 3
	count = 2
	new_name = 'OO'
	if n == 1:
		new_name = 'O'
	elif n == 2:
		new_name = 'OO'
	else:
		while True:
			next_num = first + second
			first = second
			second = next_num
			count += 1
			new_name = new_name + 'O'
			for each in range(first + 1, second):
				if count < n:
					new_name = new_name + 'o'
					count += 1
			if count == n:
				break
	print(new_name)
except:
	pass


n = int(input())
if n > 2:
	fib = [0] * 1000
	fib[0] = 1
	fib[1] = 1
	for i in range(2, 1000):
		fib[i] = fib[i - 1] + fib[i - 2]
	ans = []
	for i in range(1, n + 1):
		if i in fib:
			ans.append('O')
		else:
			ans.append('o')
	print(''.join(ans))
elif n == 1:
	print('O')
else:
	print('OO')


l = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
n = int(input())
l2 = ['o' for i in range(n)]
for i in l:
	if i <= n:
		l2[i - 1] = 'O'
s = ''.join(l2)
print(s)


a = int(input())
b = 1
c = 2
x = []
s = ''
while b <= a:
	d = b + c
	x.append(b)
	b = c
	c = d
for i in range(1, a + 1):
	if i in x:
		s = s + 'O'
	else:
		s = s + 'o'
print(s)


n = int(input())
d = 1
l = [1, 1]
i = 2
a = l[1]
while True:
	a = l[i - 2] + l[i - 1]
	if a <= 1000:
		l.append(a)
	else:
		break
	i = i + 1
for i in range(1, n + 1):
	if i in l:
		print('O', end='')
	else:
		print('o', end='')


a = int(input())
b = 'o' * a
(c, c1, c2) = (0, 1, 1)
while c2 <= len(b):
	b = b[:c2 - 1] + 'O' + b[c2:]
	c2 = c + c1
	c = c1
	c1 = c2
print(b)


n = int(input())
ar = [1, 1]
while ar[-1] < n:
	ar.append(ar[-1] + ar[-2])
for i in range(1, n + 1):
	if i in ar:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
mask = [0] * n
mask[0] = 1
x1 = 1
x2 = 1
f = 0
while f <= n:
	f = x1 + x2
	if f >= n + 1:
		break
	mask[f - 1] = 1
	x1 = x2
	x2 = f
s = ''
for i in range(n):
	if mask[i] == 1:
		s = s + 'O'
	else:
		s = s + 'o'
print(s)


arr = [0, 1]
n = int(input())
while arr[-1] < n:
	arr.append(arr[-1] + arr[-2])
s = ''
for i in range(1, n + 1):
	if i in arr:
		s += 'O'
	else:
		s += 'o'
print(s)


def eleven(n):
	fab = [0, 1]
	name = ''
	(a, b, s) = (fab[0], fab[1], 0)
	for i in range(n):
		s = a + b
		a = b
		b = s
		fab.append(s)
	for i in range(1, n + 1):
		if i in fab:
			name += 'O'
		else:
			name += 'o'
	return name
n = int(input())
print(eleven(n))


n = int(input())
f = [0, 1, 1]
up = [False] * 1010
up[1] = up[2] = True
m = f[-1] + f[-2]
while m <= 1000:
	f.append(m)
	up[m] = True
	m = f[-1] + f[-2]
c = []
for i in range(1, n + 1):
	if up[i]:
		c.append('O')
	else:
		c.append('o')
print(''.join(c))


n = int(input())
list = [1, 2]
s = ['o' for i in range(0, n)]
f1 = list[0]
f2 = list[1]
while f2 + f1 <= 1000:
	f = f2 + f1
	list.append(f)
	f1 = f2
	f2 = f
for item in list:
	if item <= n:
		s[item - 1] = 'O'
for item in s:
	print(item, end='')


n = int(input())
s = ''.join((str(s) for s in ['o'] * n))
arr = [1]
(a, b) = (1, 1)
while b < n:
	(a, b) = (b, a + b)
	arr.append(b)
for i in range(len(arr)):
	if arr[i] <= n:
		s = s[:arr[i] - 1] + 'O' + s[arr[i]:]
print(s)


import sys, math

def fib_formula(n):
	golden = (1 + math.sqrt(5)) / 2
	val = (golden ** n - (1 - golden) ** n) / math.sqrt(5)
	return int(round(val))
fib = [fib_formula(x) for x in range(1, 20)]
a = int(sys.stdin.readline())
s = []
for i in range(1, a + 1):
	if i in fib:
		s.append('O')
	else:
		s.append('o')
print(''.join(s))
sys.exit()


lst = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
s = ''
for i in range(int(input())):
	if i + 1 in lst:
		s += 'O'
	else:
		s += 'o'
print(s)


n = int(input())
s = ''
mylist = []
(a, b) = (0, 1)
while a <= n:
	mylist.append(a)
	(a, b) = (b, a + b)
for i in range(1, n + 1):
	if mylist.count(i):
		s += 'O'
	else:
		s += 'o'
print(s)


n = int(input())
a = 1
b = 1
flag = 0
y = 0
z = 0
x = []
x.append(1)
x.append(2)
for i in range(0, 1000):
	y = a
	a = b
	b = y + b
	x.append(b)
	if b > 1000:
		z = i
		break
for j in range(0, n):
	flag = 0
	for k in range(0, len(x)):
		if j + 1 == x[k]:
			flag = 1
			break
	if flag == 1:
		print('O', end='')
	else:
		print('o', end='')


def f(n):
	a = b = 1
	while True:
		if b > n:
			return
		yield b
		c = a + b
		a = b
		b = c
n = int(input())
s = [False for _ in range(n)]
for i in f(n):
	s[i - 1] = True
print(''.join(['O' if p else 'o' for p in s]))


n = int(input())
l = [0] * (n + 1)
l[0] = 1
l[1] = 1
for i in range(2, n + 1):
	l[i] = l[i - 1] + l[i - 2]
for i in range(1, n + 1):
	if i in l:
		print('O', end='')
	else:
		print('o', end='')
print()


fib = [1, 1]
fibs = set()
fibs.add(1)
for i in range(50):
	fib.append(fib[-1] + fib[-2])
	fibs.add(fib[-1])
for i in range(1, int(input()) + 1):
	print('O' if i in fibs else 'o', end='')


def fibo(n):
	if n == 0:
		return 0
	if n == 1:
		return 0
	l = []
	f = 0
	s = 1
	t = f + s
	l.append(f)
	l.append(s)
	for i in range(2, n):
		f = s
		s = t
		t = f + s
		l.append(t)
	return l
n = int(input())
fibs = fibo(n)
ans = ''
if n == 1:
	print('O')
elif n == 2:
	print('OO')
elif n == 3:
	print('OOO')
else:
	for i in range(1, n + 1):
		if i not in fibs:
			ans += 'o'
		else:
			ans += 'O'
	print(ans)


n = int(input())
l = []
l1 = []
for i in range(1, n + 1):
	if i <= 3:
		l1.append(i)
		l.append('O')
	elif i == l1[-1] + l1[-2]:
		l1.append(i)
		l.append('O')
	else:
		l.append('o')
print(''.join(l))


n = int(input())
import math
s = ''
i = 1
while n != 0:
	j = 5 * i * i + 4
	k = 5 * i * i - 4
	if int(math.sqrt(j)) * int(math.sqrt(j)) == j or int(math.sqrt(k)) * int(math.sqrt(k)) == k:
		s = s + 'O'
	else:
		s = s + 'o'
	n -= 1
	i += 1
print(s)


n = int(input())
(a, b) = (1, 1)
res = ''
for i in range(1, n + 1):
	if i in [a, b]:
		res += 'O'
		(a, b) = (b, a + b)
	else:
		res += 'o'
print(res)


l = [1, 1]
i = 2
a = 1
b = 1
while len(l) <= 18:
	s = a + b
	l.append(s)
	a = b
	b = s
n = int(input())
ans = []
for i in range(1, n + 1):
	if i in l:
		ans.append('O')
	else:
		ans.append('o')
print(''.join([a for a in ans]))


n = int(input())
a = 1
b = 1
d = []
r = []
for i in range(n):
	d.append(b)
	(a, b) = (b, a + b)
s = [i for i in range(1, n + 1)]
for i in range(n):
	if s[i] in d:
		r.append('O')
	else:
		r.append('o')
print(''.join(r))


def code8():
	n = int(input())
	a = 1
	b = 1
	c = 2
	x = [1, 1]
	while c <= n:
		x.append(c)
		c = a + b
		(a, b) = (b, c)
	s = ''
	for i in range(1, n + 1):
		if i in x:
			s += 'O'
		else:
			s += 'o'
	print(s)
code8()


a = int(input())
FS = [1, 1]
for x in range(1, a):
	FS.append(FS[x] + FS[x - 1])
for x in range(0, a):
	if x + 1 in FS:
		print('O', end='')
	else:
		print('o', end='')


n = [0] * 1001
b = int(input())
o = ''
res = 1
i = 2
n[0] = 1
n[1] = 1
while i <= b:
	res = n[i - 1] + n[i - 2]
	n[i] = res
	i += 1
for y in range(1, b + 1):
	if y in n:
		o += 'O'
	else:
		o += 'o'
print(str(o))


x = [1, 1]

def fib(n):
	for i in range(n):
		x.append(x[-1] + x[-2])
n = int(input())
fib(16)
for i in range(1, n + 1):
	count = 0
	for j in range(16):
		if x[j] == i:
			count = 1
			break
	if count == 1:
		print('O', end='')
	else:
		print('o', end='')


m = int(input())
z = [1, 1]
c = 0
a = 1
b = 1
for x in range(m):
	c = a + b
	(a, b) = (b, c)
	z.append(c)
	if c >= m:
		break
for x in range(1, m + 1):
	if x in z:
		print('O', end='')
	else:
		print('o', end='')


import sys
import bisect as bi
import math
from collections import defaultdict as dd
input = sys.stdin.readline

def cin():
	return map(int, sin().split())

def ain():
	return list(map(int, sin().split()))

def sin():
	return input()

def inin():
	return int(input())
prime1 = []

def SieveOfEratosthenes(n):
	global prime1
	prime1 = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime1[p] == True:
			for i in range(p * p, n + 1, p):
				prime1[i] = False
		p += 1
	f = []
	for p in range(2, n):
		if prime1[p]:
			f.append(p)
	return f
for _ in range(1):
	n = inin()
	l = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
	s = ''
	for i in range(1, n + 1):
		if i in l:
			s += 'O'
		else:
			s += 'o'
	print(s)


n = int(input())
a = 1
b = 1
t = 2
while a + b <= n:
	c = b
	b = a + b
	a = c
	t = t + 1
l = t * [1]
for i in range(2, t):
	l[i] = l[i - 1] + l[i - 2]
k = ''
for i in range(n):
	if i + 1 in l:
		k = k + 'O'
	else:
		k = k + 'o'
print(k)


n = int(input())
li = [1]
(a, b) = (1, 1)
for _ in range(14):
	k = b
	b += a
	a = k
	li.append(b)
res = 'o' * n
for i in li:
	if i <= n:
		res = res[:i - 1] + 'O' + res[i:]
	else:
		break
print(res)


n = int(input())
(l, a, b) = (['o'] * n, 1, 1)
while b <= n:
	(l[b - 1], a, b) = ('O', b, a + b)
print(''.join(l))


result = ''
f1 = 1
f2 = 1
for i in range(1, 1 + int(input())):
	if f2 == i:
		result += 'O'
		(f1, f2) = (f2, f1 + f2)
	else:
		result += 'o'
print(result)


n = int(input())
fib = []
x = 1
y = 1
while y <= n:
	fib.append(y)
	(x, y) = (y, x + y)
for i in range(1, n + 1):
	if i in fib:
		print('O', end='')
	else:
		print('o', end='')


def seqFib():
	ret = []
	ret = [1, 1]
	for i in range(100):
		ret.append(ret[-1] + ret[-2])
	return ret
l = seqFib()
num = input()
num = int(num)
ans = ''
for i in range(num):
	if i + 1 in l:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


n = int(input())
ans = ['o' for _ in range(n)]
fib = [0, 1]
while fib[-1] < n:
	fib.append(fib[-2] + fib[-1])
for i in fib:
	if 0 < i <= n:
		ans[i - 1] = 'O'
print(''.join(ans))


n = int(input())
e = ''
l = [1, 2]
while len(l) < n:
	l.append(l[-1] + l[-2])
e = ''
for i in range(1, n + 1):
	if i in l:
		e = e + 'O'
	else:
		e = e + 'o'
print(e)


n = int(input())
arr = [0 for i in range(n + 1)]

def maitain(n):
	a = 0
	b = 1
	arr[0] = 1
	arr[1] = 1
	sumf = a + b
	while sumf <= n:
		arr[sumf] = 1
		a = b
		b = sumf
		sumf = a + b

def main():
	s = ''
	maitain(n)
	for i in range(1, n + 1):
		if arr[i] == 1:
			s = s + 'O'
		else:
			s = s + 'o'
	print(s)
main()


n = int(input())
n1 = 1
n2 = 1
temp = n2
s = ['o'] * n
s[0] = 'O'
while n >= n2:
	s[n2 - 1] = 'O'
	temp = n2
	n2 = n1 + n2
	n1 = temp
for i in range(n):
	print(s[i], end='')


n = int(input())
f1 = 1
f2 = 1
fi = 0
l = [1]
for i in range(1, n + 1):
	if fi < n:
		fi = f1 + f2
		f1 = f2
		f2 = fi
		l.append(fi)
for i in range(1, n + 1):
	if i in l:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
l = ['o'] * (n + 1)
i = 1
l[1] = 'O'
if n > 1:
	l[2] = 'O'
a = 1
b = 2
while 1:
	i = a + b
	if i > n:
		break
	l[a] = 'O'
	l[b] = 'O'
	l[i] = 'O'
	a = b
	b = i
l.pop(0)
print(''.join(l))


n = int(input())
F = [0] * (n + 5)
F[0] = 1
F[1] = 1
for i in range(2, n + 5):
	F[i] = F[i - 1] + F[i - 2]
F = set(F)
res = []
for i in range(1, n + 1):
	if i in F:
		res.append('O')
	else:
		res.append('o')
print(''.join(res))


n = int(input())
if n == 1:
	print('O')
else:
	name = ['o'] * n
	seq = [1, 2, 3]
	while seq[len(seq) - 1] <= n:
		seq.append(seq[len(seq) - 1] + seq[len(seq) - 2])
	seq.pop()
	for i in seq:
		name[i - 1] = 'O'
	ans = ''.join(name)
	print(ans)


num = int(input())
list1 = [1, 1]
n = 0
while True:
	if list1[n] + list1[n + 1] <= num:
		list1.append(list1[n] + list1[n + 1])
		n += 1
	else:
		break
string = ''
for i in range(1, num + 1):
	if i in list1:
		string += 'O'
	else:
		string += 'o'
print(string)


n = int(input())
fib = [1]
a = 1
b = 1
for i in range(0, 1000):
	b = a + b
	fib.append(b)
	if b > 1000:
		break
	(a, b) = (b, a)
s = ''
for i in range(1, n + 1):
	if i in fib:
		s += 'O'
	else:
		s += 'o'
print(s)


from math import *
n = int(input())
a = 2
b = 1
print('O', end='')
for i in range(2, n + 1):
	if i == a:
		print('O', end='')
		c = a
		a = a + b
		b = c
	else:
		print('o', end='')
	i += 1


n = int(input())
f1 = 1
f2 = 1
x = [f1, f2, 2]
name = ''
for i in range(3, n + 1):
	x.append(x[i - 2] + x[i - 1])
for j in range(n):
	if j + 1 in x:
		name = name + 'O'
	else:
		name = name + 'o'
print(name)


fib = [1, 1]
i = 0
t = 1
count = 0
while count < 20:
	fib.append(fib[i] + fib[t])
	i += 1
	t += 1
	count += 1
n = int(input())
name = []
for i in range(1, n + 1):
	if i in fib:
		name.append('O')
	else:
		name.append('o')
print(''.join(name))


import sys
input = sys.stdin.readline
ins = lambda : input().rstrip()
ini = lambda : int(input().rstrip())
inm = lambda : map(int, input().rstrip().split())
inl = lambda : list(map(int, input().split()))
out = lambda x, s='\n': print(s.join(map(str, x)))
n = ini()
ans = ['o'] * n
a = b = 1
while b <= n:
	ans[b - 1] = ans[b - 1].upper()
	(a, b) = (b, a + b)
out(ans, '')


n = int(input())
f = []
ans = ''
for i in range(1001):
	if len(f) < 2:
		f.append(1)
	else:
		f.append(f[-1] + f[-2])
for j in range(1, n + 1):
	if j in f:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


n = int(input())
x1 = 1
x2 = 2
k = 0
for x in range(1, n + 1):
	if x == 1 or x == 2:
		print('O', end='')
	else:
		k = x1 + x2
		if k == x:
			print('O', end='')
			x1 = x2
			x2 = k
		else:
			print('o', end='')


n = int(input())
l = [1, 1]
c = 0
s = ''
for i in range(2, n + 100):
	c = l[i - 1] + l[i - 2]
	l.append(c)
for i in range(1, n + 1):
	if i in l:
		s = s + 'O'
	else:
		s = s + 'o'
print(s)


n = int(input())
a = 1
b = 1
for i in range(1, n + 1):
	if i == a:
		print('O', end='')
		m = b
		b = a
		a += m
	else:
		print('o', end='')


t = int(input())
a = [1, 1, 2]
for i in range(t - 2):
	a.append(a[-1] + a[-2])
for i in range(1, t + 1):
	if a.count(i):
		print('O', end='')
	else:
		print('o', end='')


kol = int(input())
li = []
fib1 = fib2 = 1
while fib2 <= kol:
	(fib1, fib2) = (fib2, fib1 + fib2)
	li.append(fib1)
name = ''
for i in range(1, kol + 1):
	if i in li:
		name += 'O'
	else:
		name += 'o'
print(name)


n = int(input())
i = 1
d = 1
out = ''
for j in range(1, n + 1):
	if j == d:
		out += 'O'
		d = d + i
		i = d - i
	else:
		out += 'o'
print(out)


n = int(input())
a = list((1, 1))
i = 1
cur = 1
n += 1
while cur < n:
	cur = a[i - 1] + a[i]
	a.append(cur)
	i += 1
for i in range(1, n):
	flag = False
	for j in a:
		if j == i:
			flag = True
			print('O', end='')
			break
	if flag == False:
		print('o', end='')


n = int(input())
for i in range(n):
	if i == 0 or i == 1 or i == 2 or (i == 4) or (i == 7) or (i == 12) or (i == 20) or (i == 33) or (i == 54) or (i == 88) or (i == 143) or (i == 232) or (i == 376) or (i == 609) or (i == 986):
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
term = [0] * 1001

def fib(n):
	if n <= 2:
		return 1
	if term[n] != 0:
		return term[n]
	else:
		term[n] = fib(n - 1) + fib(n - 2)
		return term[n]
fibx = []
temp = 0
i = 0
while temp < n:
	i = i + 1
	temp = fib(i)
	fibx.append(temp)
ans = []
for i in range(1, n + 1):
	if i in fibx:
		ans.append('O')
	else:
		ans.append('o')
print(''.join(ans))


n = int(input())
s = set([0, 1])
a = 0
b = 1
for i in range(100):
	c = a + b
	s.add(c)
	a = b
	b = c
for i in range(n):
	if i + 1 in s:
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
fib = [1, 1]
for i in range(2, 200):
	fib.append(fib[i - 1] + fib[i - 2])
for i in range(1, n + 1):
	if i in fib:
		print('O', end='')
	else:
		print('o', end='')


def fibonacci(n):
	if n == 1 or n == 2:
		return 1
	else:
		return fibonacci(n - 1) + fibonacci(n - 2)
n = int(input())
i = 1
c = 1
Fibo = []
while c <= n:
	i += 1
	Fibo.append(c)
	c = fibonacci(i)
Fibo = set(Fibo)
ans = ''
for i in range(1, n + 1):
	if i in Fibo:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


(a, b) = (1, 2)
fibs = {a, b}
for _ in range(1000):
	(a, b) = (b, a + b)
	fibs.add(b)
n = int(input())
s = ['o'] * n
for i in range(n):
	if i + 1 in fibs:
		s[i] = 'O'
print(''.join(s))


nameLenght = int(input())
fNumbs = [0]
fNum = 0
last = 0
now = 1
i = 1
while fNum <= 1000:
	fNumbs.append(last + now)
	last = now
	now = fNumbs[i]
	fNum = now
	i += 1
name = ''
for i in range(1, nameLenght + 1):
	if i in fNumbs:
		name += 'O'
	else:
		name += 'o'
print(name)


def fibonacci(n):
	if n < 2:
		return [1]
	ans = [1, 1]
	i = 0
	while i < n:
		i = ans[-2] + ans[-1]
		ans.append(i)
	return ans
n = int(input())
test = fibonacci(n)
ans = ''
for i in range(1, n + 1):
	if i in test:
		ans += 'O'
	else:
		ans += 'o'
print(ans)


import math

def checkperfectsquare(n):
	sqrt = int(math.sqrt(n))
	if pow(sqrt, 2) == n:
		return True
	else:
		return False

def isfibonaccinumber(n):
	res1 = 5 * n * n + 4
	res2 = 5 * n * n - 4
	if checkperfectsquare(res1) or checkperfectsquare(res2):
		return True
	else:
		return False
number = int(input())
answer = []
for i in range(1, number + 1):
	if isfibonaccinumber(i):
		answer.append('O')
	else:
		answer.append('o')
print(''.join(answer))


n = int(input())

def isFibonacci(n):
	if n == 1:
		return True
	x = 1
	first = 1
	second = 1
	while n > x:
		x = first + second
		first = second
		second = x
		if n == x:
			return True
	return False
for i in range(1, n + 1):
	if isFibonacci(i):
		print('O', end='')
	else:
		print('o', end='')


n = int(input())
if n == 1:
	print('O')
else:
	ch = 'OO'
	l = [1, 1]
	i = 2
	while 2 > 1:
		b = l[i - 2] + l[i - 1]
		l.append(b)
		if b >= n:
			break
		i = i + 1
	for i in range(3, n + 1):
		for j in range(len(l)):
			c = 0
			if l[j] == i:
				ch = ch + 'O'
				c = 1
				break
			if l[j] > i and c == 0 or (l[len(l) - 1] < i and c == 0):
				ch = ch + 'o'
				break
	print(ch)


febo = [0] * 1010

def ini():
	global febo
	(a, b) = (1, 1)
	febo[1] = 1
	while b <= 1000:
		febo[b] = 1
		(a, b) = (b, a + b)

def gene(n):
	res = []
	global febo
	for i in range(1, n + 1):
		if febo[i]:
			res.append('O')
		else:
			res.append('o')
	return res
n = int(input())
ini()
print(''.join(gene(n)))


n = int(input())
(a, b) = (1, 1)
name = []
fib = []
for i in range(1, n + 1):
	(a, b) = (b, a + b)
	fib.append(a)
	name += 'O' if i in fib else 'o'
print(*name, sep='')


n = int(input())
s = ['o'] * n
s[0] = 'O'
a = 1
b = 1
while True:
	c = a + b
	a = b
	b = c
	if b > n:
		break
	s[b - 1] = 'O'
print(''.join(s))