Sherlock has a new girlfriend (so unlike him!). Valentine's day is coming and he wants to gift her some jewelry.

He bought n pieces of jewelry. The i-th piece has price equal to i + 1, that is, the prices of the jewelry are 2, 3, 4, ... n + 1.

Watson gave Sherlock a challenge to color these jewelry pieces such that two pieces don't have the same color if the price of one piece is a prime divisor of the price of the other piece. Also, Watson asked him to minimize the number of different colors used.

Help Sherlock complete this trivial task.


-----Input-----

The only line contains single integer n (1 ≤ n ≤ 100000) — the number of jewelry pieces.


-----Output-----

The first line of output should contain a single integer k, the minimum number of colors that can be used to color the pieces of jewelry with the given constraints.

The next line should consist of n space-separated integers (between 1 and k) that specify the color of each piece in the order of increasing price.

If there are multiple ways to color the pieces using k colors, you can output any of them.


-----Examples-----
Input
3

Output
2
1 1 2 
Input
4

Output
2
2 1 1 2



-----Note-----

In the first input, the colors for first, second and third pieces of jewelry having respective prices 2, 3 and 4 are 1, 1 and 2 respectively.

In this case, as 2 is a prime divisor of 4, colors of jewelry having prices 2 and 4 must be distinct.

Difficulty: EASY

Solutions:
n = int(input())
primes = [2]
primes_bool = [2 for _ in range(10 ** 5 + 4)]
primes_bool[2] = 1
for i in range(3, 10 ** 5 + 4, 2):
	isPrime = True
	for j in range(len(primes)):
		if primes[j] ** 2 > i:
			break
		if i % primes[j] == 0:
			isPrime = False
			break
	if isPrime:
		primes.append(i)
		primes_bool[i] = 1
if n <= 2:
	print(1)
else:
	print(2)
print(*primes_bool[2:n + 2])


import math
import bisect

def sieve(n):
	primes = [-1] * n
	primes[0] = -1
	primes[1] = -1
	i = 2
	has_comp = False
	sqrt_n = int(n ** 0.5 + 1)
	while i <= sqrt_n:
		if primes[i] == -1:
			primes[i] = 1
			for j in range(i * i, n, i):
				has_comp = True
				primes[j] = 2
		i += 1
	for i in range(sqrt_n, n):
		if primes[i] == -1:
			primes[i] = 1
	return (has_comp, primes)
n = int(input())
(has_comp, res) = sieve(n + 2)
if has_comp:
	print(2)
else:
	print(1)
res_r = ''
for i in res[2:]:
	res_r = res_r + str(i) + ' '
print(res_r)


def SieveOfEratosthenes(n):
	all_prime = []
	prime = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime[p]:
			for i in range(p * p, n + 1, p):
				prime[i] = False
		p += 1
	for p in range(2, n):
		if prime[p]:
			all_prime.append(p)
	return all_prime
c = 1
n = int(input())
r = SieveOfEratosthenes(n + 2)
l = [0] * (n + 2)
if n > 2:
	c = 2
for i in r:
	l[i] = 1
for j in range(n + 2):
	if l[j] == 0:
		l[j] = 2
print(c)
print(*l[2:])


n = int(input())
prime = [True for i in range(n + 3)]

def SieveOfEratosthenes(n):
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p * 2, n + 1, p):
				prime[i] = False
		p += 1
SieveOfEratosthenes(n + 2)
p = []
for i in range(2, n + 2):
	if prime[i]:
		p.append(1)
	else:
		p.append(2)
s = set(p)
print(len(s))
for i in range(0, len(p)):
	print(p[i], end=' ')


mod = 10 ** 9 + 7
ii = lambda : int(input())
si = lambda : input()
dgl = lambda : list(map(int, input()))
f = lambda : map(int, input().split())
il = lambda : list(map(int, input().split()))
ls = lambda : list(input())

def ispr(n):
	for i in range(2, int(n ** 0.5) + 1):
		if n % i == 0:
			return False
	return True
n = ii()
l = []
for i in range(2, n + 2):
	if ispr(i):
		l.append(1)
	else:
		l.append(2)
print(max(l))
print(*l)


from sys import stdin, stdout
import bisect
import math

def st():
	return list(stdin.readline().strip())

def inp():
	return int(stdin.readline())

def li():
	return list(map(int, stdin.readline().split()))

def mp():
	return map(int, stdin.readline().split())

def pr(n):
	stdout.write(str(n) + '\n')

def soe(limit):
	l = [1] * (limit + 1)
	l[0] = 0
	l[1] = 0
	prime = [2]
	for i in range(2, limit + 1):
		if l[i]:
			for j in range(i * i, limit + 1, i):
				l[j] = 0
	for i in range(3, limit + 1, 2):
		if l[i]:
			prime.append(i)
	return l

def segsoe(low, high):
	limit = int(high ** 0.5) + 1
	prime = soe(limit)
	n = high - low + 1
	l = [0] * (n + 1)
	for i in range(len(prime)):
		lowlimit = low // prime[i] * prime[i]
		if lowlimit < low:
			lowlimit += prime[i]
		if lowlimit == prime[i]:
			lowlimit += prime[i]
		for j in range(lowlimit, high + 1, prime[i]):
			l[j - low] = 1
	for i in range(low, high + 1):
		if not l[i - low]:
			if i != 1:
				print(i)

def gcd(a, b):
	while b:
		a = a % b
		(b, a) = (a, b)
	return a

def power(a, n):
	r = 1
	while n:
		if n & 1:
			r = r * a
		a *= a
		n = n >> 1
	return r

def solve():
	n = inp()
	if n > 2:
		print(2)
	else:
		print(1)
	x = soe(n + 100)
	for i in range(2, n + 2):
		if x[i]:
			print(1, end=' ')
		else:
			print(2, end=' ')
for _ in range(1):
	solve()


n = int(input()) + 1
ans = [1] * (n + 1)
prime = [True] * (n + 1)
for i in range(2, n + 1):
	if prime[i]:
		for j in range(i * i, n + 1, i):
			prime[j] = False
if n == 2:
	print(1)
	print(1)
elif n == 3:
	print(1)
	print(1, 1)
else:
	print(2)
	for i in range(2, n + 1):
		if prime[i]:
			print(1, end=' ')
		else:
			print(2, end=' ')


def isPrime(n):
	if n == 1:
		return False
	i = 2
	while i * i <= n:
		if n % i == 0:
			return False
		i += 1
	return True
n = int(input())
c = []
for i in range(2, n + 2):
	c.append(i)
l = []
for i in range(len(c)):
	if isPrime(c[i]) == True:
		l.append(1)
	else:
		l.append(2)
if l.count(2) == 0:
	print(1)
	print(*l)
else:
	print(2)
	print(*l)


def primesFunction(n):
	primes = []
	for i in range(n + 2):
		primes.append(1)
	n = n + 1
	if n > 1:
		primes[0] = 2
		primes[1] = 2
	for i in range(2, int(n ** 0.5) + 1):
		if primes[i] == 1:
			x = i ** 2
			j = i
			while i * j <= n:
				primes[i * j] = 2
				j += 1
	return primes
n = int(input())
primesList = primesFunction(n)
if n == 1:
	print(n)
	print(n)
elif n == 2:
	print(1)
	print(1, end=' ')
	print(1)
else:
	print(2)
	for i in range(2, len(primesList)):
		print(primesList[i], end=' ')


n = int(input())
if n <= 2:
	print(1)
	if n == 1:
		print(1)
	else:
		print(1, 1)
else:
	arr = [1] * (n + 2)
	i = 2
	while i * i <= n + 1:
		if arr[i] == 1:
			j = i
			while j <= (n + 1) // i:
				arr[i * j] = 2
				j += 1
		i += 1
	print(2)
	for i in arr[2:]:
		print(i, end=' ')


def isprime(n):
	n = abs(int(n))
	if n < 2:
		return False
	if n == 2:
		return True
	if not n & 1:
		return False
	for x in range(3, int(n ** 0.5) + 1, 2):
		if n % x == 0:
			return False
	return True

def main():
	n = int(input())
	if n == 1:
		print('1\n1')
	elif n == 2:
		print('1\n1 1')
	else:
		cnt = 1
		ans = []
		for i in range(1, n + 1):
			if isprime(i + 1):
				ans.append(1)
			else:
				ans.append(2)
				cnt = 2
		print(cnt)
		for i in ans:
			print(i, end=' ')
		print('\n')
main()


n = int(input())
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print('1', '1')
else:
	checkPrime = []
	for i in range(0, 100000 + 2):
		checkPrime.append(1)
	checkPrime[0] = 0
	checkPrime[1] = 0
	for i in range(2, int(100000 ** 0.5) + 2):
		if checkPrime[i] == 1:
			for j in range(i + i, 100000 + 2, i):
				checkPrime[j] = 0
	print(2)
	for i in range(2, n + 2):
		if checkPrime[i] == 1:
			print('1', end=' ')
		else:
			print('2', end=' ')


def primes_upto(limit):
	num_list = [1 for i in range(0, limit + 1)]
	ctr = 2
	is_prime = [True] * (limit + 1)
	for n in range(2, int(limit ** 0.5) + 1):
		if is_prime[n]:
			for i in range(n * n, limit + 1, n):
				is_prime[i] = False
				num_list[i] = ctr
	del num_list[0]
	del num_list[1]
	return num_list

def main():
	jewels = int(input())
	result = primes_upto(jewels + 1)
	print(len(set(result)))
	for i in result:
		print(i, end=' ')
main()


import math

def cx(y):
	t = []
	for i in range(8):
		if y % 2 == 0:
			t.append(1)
		else:
			t.append(2)
		y = y // 2
	return t

def cz(t):
	c = 0
	for i in reversed(range(8)):
		c = c * 2 + t[i] - 1
	return c
mmm = [80, 215, 117, 95, 223, 117, 223, 215, 119, 125, 247, 253, 93, 215, 253, 127, 247, 245, 95, 223, 119, 223, 215, 127, 93, 255, 247, 127, 215, 125, 253, 247, 125, 95, 223, 245, 223, 255, 119, 221, 255, 247, 253, 215, 125, 127, 223, 119, 223, 223, 253, 253, 215, 127, 125, 247, 253, 93, 247, 127, 127, 247, 119, 223, 255, 245, 255, 223, 247, 223, 247, 245, 253, 247, 125, 125, 223, 245, 127, 255, 117, 223, 215, 255, 221, 247, 247, 223, 223, 127, 127, 223, 119, 127, 223, 253, 221, 255, 247, 223, 255, 245, 95, 215, 127, 255, 223, 117, 255, 223, 117, 255, 255, 119, 127, 255, 253, 221, 247, 253, 127, 247, 125, 127, 223, 255, 221, 215, 127, 125, 255, 245, 95, 223, 255, 127, 215, 125, 223, 223, 247, 253, 255, 127, 253, 247, 247, 223, 247, 253, 253, 223, 125, 95, 223, 255, 253, 247, 255, 95, 247, 245, 93, 247, 127, 125, 255, 255, 255, 255, 125, 223, 223, 255, 127, 255, 253, 127, 215, 125, 127, 215, 247, 127, 255, 117, 221, 247, 127, 255, 247, 247, 127, 223, 125, 127, 247, 119, 255, 223, 125, 221, 215, 247, 223, 255, 255, 125, 215, 255, 255, 223, 245, 223, 255, 245, 223, 223, 247, 125, 255, 255, 125, 215, 255, 253, 247, 127, 127, 255, 127, 255, 223, 119, 93, 255, 253, 223, 247, 253, 255, 215, 255, 95, 255, 255, 223, 247, 247, 93, 247, 247, 253, 215, 127, 255, 223, 127, 223, 255, 117, 253, 247, 127, 253, 255, 245, 93, 255, 253, 253, 255, 247, 255, 255, 119, 223, 223, 255, 95, 247, 247, 255, 215, 253, 125, 223, 253, 95, 255, 255, 223, 215, 119, 223, 255, 247, 93, 223, 125, 255, 247, 125, 255, 223, 125, 255, 247, 247, 221, 255, 255, 127, 255, 255, 253, 247, 119, 95, 223, 255, 255, 247, 127, 253, 255, 253, 221, 255, 253, 127, 255, 117, 127, 223, 119, 221, 247, 119, 125, 255, 245, 223, 223, 253, 127, 255, 253, 95, 223, 245, 255, 247, 255, 221, 247, 247, 221, 255, 127, 127, 255, 125, 223, 223, 127, 255, 247, 255, 221, 247, 245, 255, 255, 127, 253, 247, 119, 255, 223, 253, 253, 223, 247, 127, 247, 253, 255, 223, 127, 253, 255, 253, 255, 255, 119, 253, 223, 119, 255, 247, 253, 221, 223, 255, 255, 215, 245, 127, 255, 255, 255, 215, 247, 125, 247, 245, 127, 247, 127, 253, 215, 255, 95, 255, 127, 223, 255, 255, 253, 255, 253, 93, 215, 255, 255, 247, 247, 127, 223, 127, 221, 215, 247, 95, 255, 247, 95, 255, 253, 127, 223, 125, 127, 223, 247, 255, 247, 127, 221, 255, 247, 221, 223, 127, 127, 223, 247, 255, 255, 125, 253, 247, 255, 221, 247, 255, 95, 255, 253, 127, 215, 127, 255, 223, 253, 253, 255, 119, 95, 247, 245, 127, 247, 255, 127, 255, 255, 223, 255, 117, 223, 215, 247, 255, 255, 245, 253, 255, 125, 255, 215, 247, 127, 255, 127, 221, 247, 255, 93, 255, 255, 253, 255, 255, 253, 247, 245, 95, 255, 245, 223, 215, 127, 253, 247, 253, 253, 255, 255, 127, 255, 245, 223, 223, 247, 223, 255, 127, 223, 255, 253, 95, 255, 255, 125, 247, 125, 255, 255, 245, 223, 255, 247, 93, 247, 255, 255, 215, 255, 125, 255, 127, 127, 223, 247, 255, 223, 255, 95, 247, 245, 125, 255, 125, 255, 247, 127, 255, 255, 245, 221, 255, 127, 127, 255, 255, 127, 215, 125, 253, 223, 253, 127, 255, 255, 255, 223, 127, 223, 255, 253, 127, 223, 127, 255, 215, 125, 127, 223, 127, 221, 255, 247, 125, 247, 245, 95, 255, 127, 255, 247, 247, 255, 223, 125, 255, 215, 247, 125, 255, 255, 255, 247, 253, 127, 247, 247, 223, 223, 255, 253, 255, 119, 221, 255, 255, 223, 255, 125, 253, 255, 125, 223, 255, 247, 223, 255, 119, 255, 255, 255, 223, 247, 125, 127, 223, 245, 127, 223, 245, 253, 255, 127, 95, 247, 255, 95, 247, 127, 125, 247, 255, 255, 223, 247, 221, 223, 127, 255, 255, 255, 127, 255, 127, 125, 215, 245, 223, 255, 247, 221, 223, 127, 223, 255, 255, 93, 223, 255, 255, 255, 119, 127, 255, 125, 223, 223, 247, 127, 247, 245, 221, 215, 127, 253, 255, 125, 255, 255, 119, 255, 247, 255, 253, 255, 255, 223, 247, 255, 127, 247, 255, 223, 223, 119, 223, 255, 247, 125, 255, 245, 223, 255, 253, 253, 215, 127, 127, 255, 247, 223, 255, 255, 95, 247, 247, 221, 223, 255, 127, 255, 125, 95, 223, 127, 255, 215, 127, 223, 247, 253, 125, 255, 125, 125, 223, 247, 223, 223, 255, 255, 223, 247, 255, 255, 245, 255, 223, 253, 253, 247, 255, 255, 255, 253, 253, 255, 119, 253, 247, 245, 221, 255, 127, 127, 255, 247, 255, 223, 255, 223, 215, 255, 125, 255, 245, 95, 223, 127, 255, 223, 253, 255, 255, 245, 255, 215, 127, 253, 247, 255, 127, 215, 253, 253, 255, 125, 95, 255, 247, 255, 247, 119, 223, 255, 255, 255, 215, 127, 125, 247, 125, 127, 223, 253, 223, 247, 247, 127, 247, 255, 253, 223, 127, 255, 255, 127, 223, 255, 125, 253, 255, 127, 127, 255, 255, 253, 247, 253, 127, 215, 247, 223, 223, 119, 223, 255, 255, 255, 247, 255, 253, 215, 255, 253, 215, 255, 95, 255, 255, 253, 255, 255, 253, 255, 247, 253, 255, 253, 255, 247, 245, 255, 223, 125, 253, 247, 247, 223, 247, 253, 221, 215, 127, 253, 223, 125, 95, 255, 119, 255, 223, 255, 127, 247, 253, 255, 223, 253, 125, 247, 119, 255, 223, 119, 255, 223, 255, 93, 255, 255, 255, 223, 253, 255, 255, 125, 223, 255, 253, 223, 255, 247, 93, 247, 255, 223, 247, 127, 127, 223, 253, 95, 255, 247, 255, 255, 255, 253, 255, 245, 253, 255, 127, 255, 223, 247, 223, 255, 125, 221, 223, 127, 223, 247, 255, 255, 247, 255, 125, 247, 247, 127, 255, 255, 253, 215, 127, 221, 247, 255, 127, 223, 253, 127, 215, 253, 127, 223, 255, 253, 255, 255, 253, 247, 253, 253, 215, 255, 255, 255, 119, 95, 255, 119, 255, 223, 247, 255, 255, 255, 223, 255, 253, 125, 255, 117, 255, 255, 247, 223, 223, 255, 95, 255, 253, 127, 215, 255, 125, 255, 127, 223, 223, 253, 221, 247, 247, 125, 255, 247, 221, 247, 253, 253, 255, 119, 255, 255, 119, 255, 215, 127, 95, 255, 253, 95, 247, 255, 127, 223, 255, 255, 255, 247, 221, 223, 127, 255, 247, 245, 255, 255, 127, 125, 215, 255, 223, 255, 245, 253, 247, 247, 255, 255, 247, 127, 223, 255, 127, 223, 253, 127, 223, 253, 223, 223, 247, 127, 247, 253, 223, 247, 127, 253, 255, 253, 255, 223, 245, 223, 255, 127, 127, 247, 255, 93, 223, 255, 255, 247, 253, 127, 223, 247, 223, 215, 127, 93, 255, 255, 95, 247, 125, 255, 247, 253, 127, 255, 253, 223, 247, 119, 255, 255, 255, 255, 247, 255, 253, 223, 119, 95, 255, 247, 253, 223, 255, 95, 255, 253, 253, 255, 127, 253, 223, 119, 223, 255, 127, 253, 223, 119, 255, 247, 247, 253, 223, 125, 255, 247, 245, 127, 255, 119, 255, 223, 247, 255, 247, 245, 223, 223, 255, 127, 223, 255, 255, 255, 127, 253, 255, 255, 95, 255, 255, 223, 215, 127, 255, 215, 119, 127, 255, 255, 223, 215, 127, 127, 247, 253, 221, 255, 253, 255, 247, 127, 255, 255, 119, 223, 247, 119, 253, 255, 253, 95, 255, 253, 253, 215, 125, 255, 223, 255, 253, 255, 127, 127, 255, 255, 255, 215, 253, 255, 223, 117, 255, 223, 127, 255, 215, 255, 253, 255, 245, 255, 255, 127, 127, 255, 255, 223, 223, 125, 223, 255, 119, 127, 255, 247, 125, 247, 255, 127, 247, 255, 95, 255, 247, 221, 247, 255, 253, 255, 247, 223, 223, 127, 255, 255, 255, 127, 223, 127, 223, 215, 247, 255, 247, 245, 127, 223, 255, 255, 255, 245, 223, 223, 255, 223, 247, 247, 253, 247, 255, 255, 247, 255, 127, 255, 245, 95, 255, 119, 223, 255, 255, 93, 255, 247, 255, 223, 127, 253, 215, 253, 255, 223, 255, 223, 255, 255, 127, 247, 247, 221, 255, 125, 127, 255, 247, 127, 223, 253, 253, 255, 127, 253, 255, 253, 127, 255, 125, 255, 247, 127, 255, 223, 119, 255, 255, 119, 255, 247, 245, 125, 255, 127, 127, 255, 255, 95, 255, 255, 255, 247, 247, 221, 255, 255, 221, 255, 253, 255, 255, 253, 255, 223, 253, 253, 215, 255, 95, 255, 247, 127, 255, 255, 255, 255, 117, 223, 255, 125, 223, 223, 119, 125, 255, 255, 127, 247, 255, 127, 255, 125, 223, 255, 119, 223, 215, 255, 125, 255, 245, 223, 247, 255, 127, 247, 255, 255, 223, 245, 253, 255, 127, 253, 255, 255, 221, 215, 125, 255, 255, 127, 223, 223, 245, 255, 255, 255, 223, 247, 247, 255, 247, 127, 253, 215, 127, 223, 223, 253, 253, 223, 255, 255, 247, 253, 127, 247, 255, 255, 223, 245, 127, 255, 253, 221, 223, 255, 221, 255, 247, 253, 255, 125, 127, 247, 125, 127, 223, 127, 255, 215, 247, 253, 255, 253, 125, 223, 255, 253, 215, 247, 255, 223, 125, 223, 247, 127, 255, 255, 253, 125, 255, 253, 253, 255, 119, 255, 223, 247, 255, 223, 127, 127, 255, 253, 95, 223, 255, 253, 223, 255, 255, 255, 255, 221, 247, 119, 95, 247, 255, 223, 255, 125, 127, 223, 119, 255, 255, 117, 253, 255, 255, 221, 247, 253, 127, 255, 255, 255, 223, 119, 223, 255, 125, 255, 255, 119, 127, 247, 247, 125, 247, 255, 255, 255, 245, 223, 255, 253, 253, 247, 247, 255, 255, 247, 253, 223, 253, 127, 247, 245, 255, 255, 127, 255, 223, 255, 95, 255, 247, 221, 255, 255, 253, 247, 125, 223, 223, 127, 255, 247, 255, 253, 247, 255, 253, 255, 253, 127, 255, 253, 127, 223, 255, 223, 247, 247, 253, 255, 253, 255, 223, 127, 125, 215, 253, 95, 255, 245, 253, 255, 127, 95, 247, 255, 223, 223, 127, 127, 255, 255, 95, 255, 253, 255, 247, 255, 93, 247, 255, 95, 247, 253, 253, 215, 255, 255, 255, 119, 255, 255, 255, 95, 255, 245, 255, 223, 253, 255, 247, 253, 127, 255, 117, 255, 255, 247, 255, 255, 255, 127, 223, 125, 255, 223, 253, 255, 223, 127, 255, 223, 255, 255, 247, 245, 255, 255, 255, 253, 223, 127, 255, 255, 117, 255, 223, 247, 255, 255, 253, 255, 215, 255, 125, 247, 119, 127, 223, 127, 253, 223, 255, 127, 255, 253, 127, 255, 127, 255, 223, 125, 95, 223, 245, 255, 255, 127, 253, 255, 255, 223, 215, 125, 255, 223, 253, 223, 255, 247, 255, 247, 255, 221, 247, 247, 221, 247, 125, 127, 247, 119, 255, 223, 255, 223, 223, 119, 255, 247, 247, 255, 215, 127, 127, 247, 253, 255, 255, 247, 253, 247, 119, 223, 255, 253, 127, 255, 255, 255, 223, 253, 127, 255, 255, 223, 223, 255, 221, 247, 247, 223, 247, 255, 253, 247, 245, 223, 255, 253, 223, 255, 247, 125, 255, 255, 253, 247, 253, 253, 255, 119, 95, 223, 127, 253, 247, 247, 125, 255, 245, 255, 223, 127, 253, 223, 125, 127, 255, 253, 223, 255, 247, 127, 247, 247, 223, 247, 253, 255, 223, 253, 127, 255, 127, 255, 223, 127, 127, 255, 253, 95, 255, 255, 125, 255, 247, 223, 255, 117, 253, 223, 119, 127, 247, 255, 255, 255, 255, 127, 215, 245, 223, 255, 125, 223, 255, 119, 223, 247, 253, 125, 255, 255, 255, 255, 247, 255, 223, 125, 253, 223, 247, 125, 247, 255, 253, 255, 127, 255, 215, 255, 127, 255, 125, 255, 255, 255, 253, 255, 255, 93, 215, 253, 127, 247, 125, 127, 255, 127, 255, 215, 255, 255, 255, 255, 127, 215, 253, 255, 255, 125, 95, 255, 255, 221, 255, 247, 253, 255, 255, 223, 255, 127, 255, 223, 247, 223, 255, 245, 253, 223, 255, 255, 255, 247, 221, 247, 253, 127, 215, 255, 255, 223, 125, 223, 255, 255, 127, 255, 253, 255, 247, 253, 125, 223, 255, 255, 255, 119, 255, 247, 127, 253, 255, 245, 221, 255, 253, 255, 215, 119, 255, 255, 255, 253, 223, 247, 127, 247, 255, 255, 247, 255, 255, 247, 127, 95, 255, 247, 255, 255, 127, 127, 247, 253, 95, 255, 255, 125, 247, 125, 255, 255, 247, 255, 215, 247, 253, 255, 247, 223, 215, 253, 125, 223, 255, 255, 223, 255, 223, 247, 247, 223, 247, 255, 253, 255, 127, 127, 255, 127, 95, 255, 119, 253, 255, 127, 127, 255, 255, 253, 255, 255, 255, 215, 247, 255, 223, 125, 223, 223, 127, 127, 255, 255, 125, 215, 253, 253, 255, 245, 127, 255, 247, 253, 255, 119, 223, 247, 245, 253, 223, 127, 255, 255, 247, 127, 255, 255, 221, 215, 255, 95, 255, 253, 127, 247, 255, 255, 255, 245, 223, 255, 245, 255, 255, 247, 253, 255, 253, 253, 215, 255, 253, 255, 127, 95, 255, 127, 255, 255, 247, 95, 255, 247, 127, 255, 255, 253, 247, 127, 95, 255, 245, 253, 247, 255, 95, 255, 247, 221, 215, 255, 255, 223, 255, 255, 255, 117, 253, 215, 255, 223, 255, 253, 253, 255, 127, 125, 215, 127, 223, 255, 255, 253, 223, 127, 127, 255, 247, 125, 223, 253, 255, 215, 253, 223, 255, 127, 253, 223, 119, 253, 255, 253, 223, 255, 253, 127, 247, 247, 255, 223, 253, 223, 255, 247, 125, 247, 247, 221, 255, 255, 253, 223, 127, 255, 223, 245, 255, 215, 255, 253, 255, 255, 127, 247, 253, 255, 255, 253, 255, 223, 255, 255, 223, 127, 127, 255, 247, 223, 255, 125, 255, 247, 127, 223, 223, 255, 223, 255, 247, 221, 247, 255, 255, 255, 127, 255, 255, 247, 223, 255, 255, 255, 247, 127, 93, 255, 255, 255, 247, 127, 255, 223, 247, 255, 255, 253, 221, 255, 127, 223, 255, 247, 255, 223, 125, 125, 255, 255, 255, 255, 253, 255, 215, 255, 223, 247, 255, 95, 255, 255, 127, 215, 247, 127, 223, 255, 253, 247, 247, 253, 255, 253, 223, 223, 127, 255, 223, 255, 255, 255, 255, 223, 215, 119, 255, 247, 255, 93, 215, 253, 125, 255, 125, 95, 223, 247, 253, 223, 247, 255, 255, 247, 95, 255, 125, 255, 247, 125, 255, 223, 247, 253, 255, 255, 255, 255, 255, 223, 255, 255, 125, 255, 245, 223, 223, 127, 255, 247, 127, 125, 247, 255, 253, 255, 253, 253, 223, 247, 255, 255, 245, 223, 223, 247, 255, 255, 245, 255, 255, 125, 127, 255, 253, 223, 255, 245, 223, 247, 127, 221, 255, 247, 95, 223, 255, 127, 247, 127, 127, 255, 255, 253, 223, 247, 221, 247, 253, 127, 215, 255, 253, 223, 125, 255, 255, 253, 255, 247, 127, 253, 255, 253, 223, 223, 255, 127, 255, 253, 255, 255, 119, 223, 223, 247, 93, 255, 253, 255, 223, 125, 127, 247, 255, 127, 255, 245, 255, 255, 255, 95, 247, 255, 255, 215, 255, 253, 223, 127, 95, 255, 247, 255, 255, 255, 125, 255, 247, 255, 247, 127, 253, 255, 127, 255, 255, 253, 223, 255, 247, 95, 255, 247, 127, 215, 125, 255, 215, 255, 223, 255, 127, 253, 255, 255, 255, 255, 253, 253, 255, 125, 127, 255, 117, 255, 255, 253, 253, 247, 247, 127, 247, 255, 95, 255, 255, 253, 215, 117, 127, 255, 255, 255, 215, 247, 255, 255, 253, 223, 247, 255, 253, 255, 119, 223, 223, 247, 253, 247, 119, 253, 255, 247, 223, 247, 255, 127, 255, 255, 223, 223, 247, 255, 255, 255, 93, 247, 255, 223, 247, 255, 255, 255, 117, 127, 223, 125, 255, 247, 255, 253, 255, 255, 255, 247, 255, 125, 215, 119, 255, 223, 245, 253, 255, 255, 95, 247, 253, 253, 215, 127, 253, 215, 253, 255, 255, 127, 253, 223, 255, 253, 247, 255, 223, 255, 253, 127, 255, 245, 127, 223, 127, 223, 255, 247, 127, 247, 255, 221, 255, 127, 253, 247, 119, 127, 255, 253, 223, 255, 127, 255, 255, 253, 125, 255, 255, 253, 255, 253, 127, 223, 247, 223, 255, 119, 95, 255, 247, 127, 247, 125, 255, 215, 255, 95, 255, 247, 221, 255, 247, 93, 255, 247, 255, 223, 253, 255, 255, 255, 223, 255, 127, 255, 247, 127, 93, 247, 247, 127, 247, 255, 255, 255, 127, 223, 255, 127, 253, 223, 127, 223, 255, 253, 255, 255, 253, 125, 223, 255, 223, 255, 245, 255, 223, 127, 255, 255, 247, 95, 223, 255, 127, 215, 255, 255, 255, 255, 223, 215, 255, 95, 247, 247, 255, 223, 127, 255, 247, 245, 223, 223, 125, 255, 215, 127, 255, 255, 253, 125, 247, 255, 127, 247, 253, 255, 255, 255, 223, 215, 127, 223, 255, 255, 223, 247, 255, 253, 255, 125, 255, 255, 245, 223, 255, 255, 253, 247, 247, 221, 215, 127, 253, 223, 117, 127, 255, 125, 255, 247, 255, 223, 255, 247, 127, 255, 127, 127, 223, 255, 223, 223, 245, 253, 255, 247, 255, 255, 247, 255, 223, 127, 255, 215, 253, 127, 255, 125, 223, 247, 255, 223, 255, 245, 255, 255, 127, 255, 255, 253, 127, 255, 127, 255, 247, 255, 253, 255, 255, 253, 223, 255, 255, 247, 245, 223, 223, 117, 255, 223, 255, 125, 247, 253, 127, 215, 253, 255, 255, 127, 95, 223, 127, 253, 255, 255, 127, 255, 255, 95, 247, 253, 125, 223, 255, 223, 255, 253, 223, 247, 119, 253, 255, 255, 253, 223, 125, 127, 223, 247, 95, 223, 255, 253, 255, 255, 223, 255, 247, 221, 255, 253, 125, 255, 119, 223, 255, 247, 253, 223, 127, 223, 247, 247, 125, 215, 253, 253, 223, 253, 127, 255, 255, 253, 215, 255, 223, 247, 255, 127, 223, 127, 127, 247, 255, 255, 255, 253, 255, 255, 255, 223, 255, 253, 253, 255, 127, 255, 215, 247, 127, 255, 127, 223, 215, 255, 127, 247, 255, 255, 223, 253, 253, 255, 247, 223, 223, 127, 223, 255, 119, 255, 255, 247, 255, 255, 253, 255, 247, 127, 127, 255, 255, 255, 247, 127, 223, 247, 247, 253, 223, 255, 255, 223, 255, 223, 255, 119, 255, 223, 255, 125, 255, 253, 223, 255, 255, 125, 247, 247, 255, 223, 255, 253, 255, 247, 95, 247, 255, 127, 255, 253, 127, 247, 245, 223, 255, 255, 223, 255, 127, 221, 255, 255, 253, 255, 253, 127, 255, 253, 127, 223, 125, 255, 255, 247, 253, 247, 245, 127, 223, 255, 255, 255, 247, 223, 223, 119, 223, 223, 255, 255, 255, 255, 95, 215, 255, 253, 255, 119, 223, 223, 127, 223, 255, 127, 255, 255, 245, 127, 255, 127, 127, 223, 125, 95, 255, 255, 255, 255, 255, 255, 247, 255, 221, 255, 255, 253, 255, 117, 223, 255, 245, 253, 223, 255, 125, 247, 255, 253, 247, 125, 255, 223, 127, 255, 223, 255, 223, 223, 247, 127, 247, 247, 255, 255, 125, 253, 255, 247, 255, 255, 125, 253, 255, 247, 253, 255, 253, 127, 255, 125, 255, 215, 119, 127, 255, 255, 253, 223, 255, 95, 247, 255, 221, 223, 255, 253, 223, 255, 255, 255, 247, 255, 247, 119, 125, 255, 255, 223, 255, 253, 253, 247, 125, 223, 255, 247, 253, 255, 247, 223, 255, 245, 95, 247, 255, 255, 223, 253, 223, 223, 253, 255, 247, 247, 223, 255, 247, 255, 247, 125, 127, 255, 125, 127, 223, 255, 253, 247, 255, 127, 255, 253, 221, 255, 253, 255, 255, 247, 255, 223, 253, 223, 255, 127, 223, 255, 255, 255, 247, 253, 125, 255, 255, 223, 255, 117, 223, 215, 127, 221, 247, 245, 253, 255, 127, 255, 255, 125, 255, 255, 253, 223, 223, 255, 125, 255, 253, 95, 255, 127, 253, 215, 127, 255, 255, 125, 255, 255, 119, 125, 255, 255, 223, 247, 253, 255, 247, 253, 127, 255, 247, 255, 215, 247, 221, 255, 247, 127, 215, 255, 127, 255, 127, 255, 255, 255, 255, 247, 127, 223, 255, 247, 255, 255, 127, 253, 223, 247, 127, 223, 245, 255, 247, 255, 255, 255, 253, 253, 255, 255, 125, 255, 255, 255, 223, 127, 253, 255, 119, 223, 255, 253, 253, 255, 127, 125, 255, 255, 223, 255, 127, 253, 215, 127, 255, 255, 255, 95, 255, 255, 255, 247, 253, 127, 255, 127, 223, 255, 255, 253, 255, 245, 221, 255, 255, 255, 223, 117, 95, 255, 119, 223, 247, 127, 125, 247, 253, 125, 247, 255, 127, 247, 255, 255, 255, 247, 223, 223, 255, 95, 255, 255, 95, 247, 253, 125, 255, 127, 255, 223, 253, 255, 247, 119, 255, 255, 247, 253, 223, 255, 125, 255, 245, 95, 255, 247, 255, 255, 127, 255, 247, 255, 95, 255, 255, 253, 247, 247, 223, 255, 255, 255, 255, 255, 95, 247, 253, 253, 215, 127, 255, 255, 255, 95, 255, 255, 255, 255, 247, 253, 247, 245, 255, 223, 125, 127, 255, 127, 255, 223, 255, 223, 247, 255, 221, 255, 255, 221, 215, 127, 255, 215, 247, 127, 223, 119, 255, 215, 119, 255, 247, 253, 93, 223, 255, 127, 255, 125, 127, 255, 247, 253, 255, 127, 125, 255, 247, 255, 223, 253, 127, 223, 253, 255, 223, 247, 255, 247, 119, 127, 255, 255, 223, 223, 255, 125, 223, 255, 223, 255, 253, 255, 247, 255, 255, 255, 253, 93, 247, 253, 255, 255, 119, 255, 223, 255, 255, 223, 255, 255, 247, 245, 253, 247, 253, 127, 223, 247, 127, 255, 125, 253, 223, 127, 255, 247, 247, 255, 223, 255, 127, 255, 125, 127, 255, 127, 223, 247, 247, 255, 247, 255, 127, 215, 127, 253, 247, 127, 223, 223, 247, 223, 255, 255, 253, 247, 255, 223, 255, 255, 127, 247, 253, 255, 255, 127, 221, 223, 247, 127, 255, 247, 255, 223, 253, 253, 255, 127, 95, 255, 247, 255, 255, 255, 223, 247, 255, 223, 255, 125, 253, 255, 255, 223, 255, 247, 255, 247, 255, 221, 255, 247, 127, 247, 125, 253, 255, 255, 255, 223, 125, 255, 255, 247, 127, 255, 255, 127, 223, 255, 255, 215, 255, 223, 255, 127, 255, 247, 127, 255, 255, 245, 125, 223, 125, 255, 223, 245, 255, 255, 253, 253, 223, 247, 223, 247, 247, 127, 255, 255, 253, 223, 247, 95, 255, 255, 223, 255, 247, 125, 247, 255, 223, 247, 255, 127, 255, 255, 95, 255, 247, 255, 255, 119, 255, 255, 253, 255, 215, 255, 255, 215, 253, 223, 223, 255, 253, 247, 255, 93, 255, 255, 253, 255, 253, 255, 255, 255, 127, 223, 247, 253, 223, 127, 223, 255, 253, 125, 247, 253, 127, 255, 255, 255, 223, 247, 223, 223, 255, 255, 247, 253, 253, 223, 127, 253, 215, 247, 95, 255, 253, 223, 255, 127, 255, 255, 247, 221, 223, 255, 255, 247, 125, 255, 255, 255, 223, 247, 255, 125, 255, 247, 127, 223, 127, 253, 247, 255, 255, 255, 245, 255, 247, 119, 125, 255, 255, 93, 223, 253, 255, 255, 119, 127, 223, 127, 221, 247, 119, 223, 255, 255, 255, 247, 127, 125, 223, 253, 255, 223, 255, 255, 247, 119, 221, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 253, 253, 255, 127, 221, 255, 247, 95, 247, 255, 127, 223, 127, 255, 255, 125, 255, 255, 247, 255, 247, 253, 125, 247, 255, 127, 255, 247, 255, 255, 117, 253, 223, 127, 255, 255, 245, 255, 255, 125, 255, 255, 253, 255, 255, 127, 253, 247, 255, 253, 247, 247, 255, 247, 255, 255, 255, 255, 255, 223, 247, 223, 223, 127, 255, 247, 253, 255, 215, 255, 255, 247, 117, 223, 223, 247, 253, 247, 255, 95, 255, 255, 95, 255, 127, 255, 223, 127, 95, 255, 247, 223, 255, 255, 221, 255, 247, 221, 255, 255, 255, 255, 117, 223, 255, 117, 255, 223, 255, 125, 247, 245, 221, 255, 255, 253, 215, 127, 223, 255, 245, 255, 255, 247, 127, 255, 247, 125, 247, 255, 255, 215, 253, 255, 255, 245, 221, 247, 247, 255, 247, 245, 223, 255, 253, 127, 223, 255, 255, 255, 127, 223, 255, 247, 93, 255, 255, 255, 223, 255, 255, 247, 119, 223, 223, 245, 255, 255, 127, 125, 247, 255, 255, 223, 255, 127, 255, 255, 95, 223, 255, 223, 215, 255, 223, 255, 245, 127, 247, 125, 255, 223, 127, 223, 223, 255, 221, 255, 127, 253, 247, 247, 255, 247, 125, 255, 255, 255, 95, 255, 253, 255, 215, 127, 127, 247, 247, 127, 255, 255, 127, 255, 255, 255, 255, 127, 253, 223, 127, 223, 255, 245, 127, 215, 125, 255, 255, 253, 127, 255, 247, 221, 255, 247, 255, 255, 255, 221, 223, 127, 127, 223, 127, 255, 255, 253, 221, 255, 247, 255, 247, 253, 221, 215, 127, 253, 223, 117, 223, 223, 125, 255, 255, 255, 127, 255, 255, 127, 255, 253, 253, 255, 247, 95, 223, 127, 221, 255, 127, 223, 255, 245, 255, 215, 255, 255, 247, 125, 127, 255, 255, 221, 255, 127, 255, 247, 247, 221, 255, 255, 125, 255, 255, 255, 223, 255, 255, 247, 127, 125, 255, 255, 221, 255, 255, 255, 255, 255, 255, 255, 119, 253, 223, 247, 95, 255, 247, 127, 255, 255, 255, 215, 253, 127, 255, 255, 223, 215, 247, 253, 247, 255, 93, 255, 125, 127, 255, 253, 127, 255, 125, 253, 223, 255, 255, 247, 255, 223, 223, 127, 255, 255, 253, 95, 255, 119, 255, 215, 127, 125, 255, 255, 125, 223, 255, 255, 255, 127, 95, 255, 119, 223, 255, 127, 255, 255, 245, 255, 247, 125, 127, 223, 127, 255, 255, 253, 253, 247, 247, 95, 247, 255, 223, 255, 255, 127, 255, 247, 255, 255, 117, 253, 255, 127, 223, 247, 255, 253, 255, 125, 255, 255, 247, 223, 255, 245, 255, 223, 255, 255, 255, 255, 127, 247, 255, 255, 215, 247, 223, 255, 245, 253, 247, 119, 223, 255, 253, 223, 223, 125, 255, 247, 255, 255, 255, 253, 255, 223, 247, 255, 255, 247, 253, 247, 127, 253, 247, 255, 127, 223, 119, 255, 247, 255, 253, 247, 255, 223, 255, 253, 125, 255, 119, 255, 223, 127, 253, 223, 255, 255, 255, 247, 255, 215, 255, 125, 215, 125, 255, 255, 255, 221, 255, 127, 221, 247, 255, 253, 255, 255, 255, 255, 255, 127, 223, 255, 255, 255, 255, 255, 255, 245, 255, 247, 125, 255, 247, 255, 255, 223, 245, 253, 255, 127, 95, 255, 247, 127, 223, 127, 255, 255, 245, 127, 255, 247, 223, 255, 127, 255, 247, 253, 125, 255, 125, 127, 215, 253, 255, 223, 255, 255, 223, 247, 253, 247, 255, 253, 215, 255, 255, 247, 253, 127, 255, 253, 255, 255, 119, 255, 255, 253, 253, 223, 255, 253, 247, 127, 223, 223, 255, 223, 247, 247, 125, 255, 255, 95, 255, 253, 255, 223, 127, 223, 255, 255, 255, 255, 255, 253, 255, 247, 253, 215, 125, 255, 223, 253, 255, 255, 119, 253, 223, 127, 127, 247, 247, 127, 247, 127, 127, 255, 255, 223, 223, 247, 223, 255, 127, 223, 247, 247, 253, 223, 253, 253, 255, 247, 223, 255, 125, 255, 215, 119, 253, 255, 253, 223, 255, 253, 127, 255, 253, 127, 223, 127, 255, 215, 255, 125, 247, 245, 127, 247, 255, 255, 223, 247, 255, 223, 247, 223, 215, 255, 127, 255, 253, 221, 255, 255, 127, 255, 253, 255, 223, 247, 255, 247, 255, 127, 255, 247, 223, 223, 127, 253, 255, 125, 255, 255, 247, 223, 255, 255, 221, 255, 255, 255, 215, 253, 253, 255, 245, 255, 223, 245, 253, 247, 255, 223, 255, 253, 127, 255, 255, 125, 255, 127, 255, 255, 247, 221, 223, 119, 223, 255, 253, 253, 215, 255, 125, 215, 247, 95, 255, 127, 255, 247, 255, 253, 247, 253, 125, 255, 255, 255, 215, 247, 255, 223, 255, 255, 255, 247, 255, 255, 255, 95, 255, 127, 255, 215, 255, 127, 255, 127, 223, 223, 127, 127, 255, 253, 253, 247, 255, 255, 255, 255, 127, 223, 119, 255, 255, 119, 221, 255, 247, 255, 255, 127, 127, 223, 255, 223, 255, 247, 255, 255, 255, 125, 255, 255, 255, 223, 253, 127, 255, 125, 223, 223, 253, 255, 247, 127, 95, 255, 255, 223, 255, 253, 125, 255, 119, 255, 223, 125, 221, 255, 127, 255, 255, 247, 253, 255, 253, 255, 255, 255, 127, 255, 127, 221, 215, 255, 255, 255, 255, 223, 255, 255, 255, 255, 127, 255, 223, 125, 253, 255, 255, 253, 247, 245, 255, 223, 127, 255, 215, 255, 95, 223, 255, 223, 247, 119, 253, 247, 253, 253, 215, 255, 127, 255, 127, 127, 255, 247, 255, 223, 255, 125, 255, 247, 223, 247, 253, 255, 247, 127, 255, 223, 245, 223, 255, 255, 125, 255, 247, 253, 255, 253, 255, 255, 119, 255, 255, 117, 255, 255, 255, 127, 255, 253, 125, 247, 125, 255, 223, 247, 255, 223, 245, 255, 223, 127, 127, 255, 253, 253, 215, 125, 253, 247, 255, 255, 255, 255, 223, 223, 255, 221, 247, 255, 95, 255, 127, 127, 215, 127, 255, 223, 255, 253, 247, 255, 127, 247, 247, 223, 255, 255, 255, 255, 119, 95, 255, 253, 255, 223, 127, 255, 247, 253, 223, 255, 255, 127, 255, 119, 127, 255, 255, 255, 247, 119, 127, 255, 255, 127, 223, 127, 127, 223, 255, 223, 255, 253, 253, 247, 127, 127, 255, 255, 223, 215, 127, 125, 255, 125, 223, 223, 119, 255, 223, 255, 255, 255, 253, 253, 255, 253, 255, 247, 119, 223, 255, 255, 221, 255, 127, 95, 255, 255, 127, 255, 255, 127, 223, 247, 127, 255, 119, 253, 255, 127, 253, 247, 253, 253, 223, 253, 255, 223, 255, 127, 223, 253, 223, 255, 255, 223, 247, 253, 255, 255, 255, 255, 255, 127, 127, 223, 253, 255, 255, 247, 255, 255, 255, 127, 215, 253, 255, 255, 247, 127, 255, 119, 223, 247, 247, 127, 255, 245, 127, 255, 127, 255, 255, 125, 127, 223, 255, 253, 255, 247, 95, 255, 255, 255, 255, 255, 255, 223, 245, 223, 255, 255, 255, 247, 127, 127, 247, 247, 255, 247, 255, 253, 223, 119, 223, 255, 125, 221, 255, 247, 127, 247, 255, 125, 255, 255, 127, 223, 247, 223, 255, 253, 223, 255, 255, 253, 255, 247, 125, 255, 127, 127, 247, 253, 255, 223, 253, 255, 255, 255, 221, 255, 247, 95, 223, 255, 253, 255, 117, 223, 255, 245, 223, 223, 119, 253, 247, 255, 125, 223, 255, 253, 255, 247, 255, 255, 255, 223, 223, 127, 223, 255, 255, 223, 215, 127, 255, 215, 255, 255, 255, 247, 223, 255, 247, 127, 255, 247, 255, 247, 125, 253, 255, 119, 223, 255, 255, 255, 247, 255, 221, 247, 245, 221, 247, 255, 125, 247, 247, 223, 255, 125, 255, 255, 255, 127, 255, 253, 253, 255, 127, 253, 247, 253, 255, 255, 253, 221, 255, 255, 255, 247, 245, 127, 255, 127, 127, 223, 125, 127, 255, 127, 255, 223, 247, 93, 255, 253, 95, 255, 127, 255, 223, 117, 255, 255, 247, 255, 223, 127, 253, 247, 253, 223, 255, 255, 255, 247, 247, 255, 223, 255, 253, 215, 247, 221, 255, 253, 95, 247, 127, 255, 255, 253, 255, 255, 245, 223, 247, 247, 255, 247, 247, 253, 223, 127, 255, 223, 247, 127, 223, 119, 253, 255, 255, 221, 247, 247, 93, 247, 253, 127, 247, 247, 223, 255, 255, 223, 255, 255, 223, 255, 245, 253, 223, 255, 255, 247, 255, 255, 255, 245, 253, 255, 247, 223, 247, 253, 93, 223, 127, 127, 255, 125, 127, 255, 127, 223, 255, 247, 221, 255, 255, 223, 223, 127, 253, 223, 119, 255, 255, 255, 255, 215, 255, 255, 247, 253, 125, 255, 253, 125, 255, 247, 223, 255, 247, 223, 247, 255, 223, 255, 245, 127, 247, 255, 255, 223, 127, 255, 223, 255, 223, 255, 127, 127, 255, 255, 253, 223, 255, 125, 255, 127, 255, 223, 255, 255, 223, 127, 255, 247, 247, 255, 255, 125, 253, 247, 255, 255, 255, 255, 255, 255, 127, 95, 247, 247, 255, 247, 255, 253, 247, 253, 255, 255, 125, 255, 247, 255, 223, 255, 255, 95, 255, 255, 255, 223, 245, 127, 223, 127, 221, 255, 247, 253, 255, 245, 223, 223, 255, 255, 247, 255, 127, 223, 253, 255, 255, 255, 125, 255, 255, 93, 215, 253, 253, 255, 255, 255, 255, 255, 223, 255, 247, 255, 255, 245, 255, 255, 253, 255, 223, 127, 127, 255, 245, 221, 255, 119, 223, 255, 255, 221, 215, 255, 253, 223, 247, 127, 255, 127, 253, 223, 127, 127, 247, 245, 255, 255, 127, 255, 247, 247, 223, 255, 117, 255, 223, 255, 255, 255, 253, 125, 215, 125, 253, 223, 255, 255, 255, 255, 255, 255, 127, 223, 255, 247, 95, 223, 255, 255, 255, 253, 255, 255, 255, 221, 255, 255, 255, 247, 247, 221, 247, 127, 255, 215, 125, 223, 255, 247, 255, 247, 247, 255, 255, 255, 93, 255, 253, 125, 247, 253, 255, 255, 119, 255, 215, 127, 255, 255, 253, 223, 255, 253, 255, 215, 253, 223, 223, 255, 253, 247, 255, 127, 247, 247, 255, 247, 127, 127, 223, 255, 223, 223, 127, 255, 247, 255, 125, 247, 247, 127, 247, 255, 127, 223, 255, 255, 255, 255, 223, 223, 255, 223, 247, 255, 255, 255, 127, 125, 247, 245, 255, 255, 253, 255, 215, 127, 223, 255, 255, 255, 255, 253, 127, 255, 119, 255, 255, 253, 221, 255, 247, 95, 255, 253, 93, 255, 255, 253, 255, 253, 223, 255, 247, 223, 255, 247, 125, 255, 255, 255, 255, 255, 253, 247, 125, 255, 255, 247, 223, 223, 255, 221, 255, 253, 255, 215, 127, 255, 223, 255, 127, 255, 253, 255, 247, 247, 221, 255, 247, 253, 247, 255, 255, 255, 253, 127, 223, 119, 255, 247, 255, 255, 255, 255, 93, 247, 253, 253, 223, 127, 223, 255, 127, 223, 255, 255, 255, 255, 255, 127, 223, 125, 255, 247, 247, 223, 255, 255, 255, 223, 247, 255, 255, 245, 223, 255, 253, 255, 215, 119, 255, 255, 255, 223, 223, 247, 253, 255, 247, 95, 247, 127, 255, 255, 247, 223, 223, 255, 255, 223, 127, 125, 255, 255, 223, 215, 255, 127, 255, 253, 95, 255, 255, 255, 223, 255, 127, 255, 247, 255, 255, 127, 125, 247, 253, 127, 223, 255, 253, 247, 119, 255, 247, 255, 255, 223, 127, 127, 223, 255, 95, 255, 253, 255, 247, 255, 125, 247, 253, 127, 255, 127, 125, 247, 127, 255, 255, 119, 255, 255, 119, 223, 255, 245, 255, 255, 255, 127, 247, 245, 95, 255, 255, 223, 223, 247, 223, 255, 253, 223, 255, 127, 255, 223, 255, 255, 223, 255, 255, 255, 255, 221, 255, 255, 253, 255, 255, 253, 247, 245, 255, 255, 127, 223, 255, 127, 127, 247, 253, 125, 215, 255, 253, 255, 255, 223, 255, 127, 255, 223, 255, 223, 255, 247, 255, 223, 127, 127, 223, 125, 223, 223, 255, 255, 247, 127, 253, 247, 255, 223, 215, 255, 127, 255, 245, 127, 255, 253, 255, 247, 255, 255, 255, 247, 221, 247, 253, 125, 223, 127, 255, 255, 247, 253, 223, 127, 127, 255, 253, 127, 223, 127, 255, 223, 245, 255, 255, 253, 255, 215, 127, 221, 255, 255, 93, 255, 255, 255, 255, 245, 127, 223, 127, 253, 247, 255, 223, 247, 255, 253, 223, 255, 253, 255, 127, 127, 223, 255, 223, 247, 119, 255, 247, 253, 221, 255, 255, 255, 255, 125, 223, 255, 255, 253, 255, 255, 125, 255, 247, 255, 223, 127, 253, 247, 255, 255, 223, 247, 255, 247, 247, 221, 255, 255, 223, 255, 127, 127, 255, 247, 127, 255, 253, 255, 247, 127, 253, 255, 255, 221, 255, 253, 255, 247, 127, 255, 223, 127, 221, 255, 255, 223, 255, 253, 127, 255, 125, 125, 247, 253, 255, 255, 119, 223, 215, 255, 255, 247, 247, 255, 223, 253, 255, 247, 119, 255, 255, 127, 253, 223, 255, 93, 255, 255, 255, 255, 255, 255, 215, 255, 127, 223, 125, 255, 215, 247, 127, 255, 253, 93, 255, 255, 127, 255, 245, 95, 255, 247, 253, 255, 247, 255, 255, 255, 255, 247, 253, 255, 223, 255, 95, 255, 247, 253, 247, 127, 221, 247, 255, 253, 223, 255, 253, 255, 127, 223, 223, 245, 255, 247, 255, 223, 255, 245, 253, 255, 125, 125, 247, 127, 255, 255, 255, 223, 223, 255, 95, 255, 255, 253, 247, 255, 255, 215, 247, 255, 255, 119, 253, 255, 127, 253, 255, 245, 253, 223, 253, 255, 247, 119, 255, 223, 253, 255, 247, 255, 255, 247, 245, 253, 215, 127, 255, 255, 255, 255, 223, 247, 223, 255, 247, 125, 255, 255, 127, 215, 255, 253, 255, 253, 127, 255, 127, 255, 215, 247, 223, 255, 255, 127, 215, 255, 125, 247, 127, 127, 255, 247, 223, 255, 127, 223, 255, 247, 255, 255, 127, 125, 255, 117, 255, 223, 255, 255, 255, 127, 125, 255, 255, 95, 255, 253, 127, 215, 255, 223, 223, 127, 223, 223, 127, 127, 247, 245, 255, 247, 125, 255, 255, 253, 255, 255, 127, 255, 223, 119, 255, 255, 255, 95, 255, 253, 127, 247, 255, 127, 255, 253, 221, 223, 255, 127, 247, 255, 125, 247, 255, 255, 247, 125, 255, 255, 253, 255, 215, 255, 255, 255, 255, 125, 255, 253, 127, 255, 119, 95, 255, 255, 255, 223, 119, 125, 255, 255, 255, 247, 255, 127, 247, 255, 127, 255, 247, 255, 255, 247, 255, 247, 255, 223, 255, 253, 127, 223, 253, 223, 255, 255, 255, 223, 255, 125, 255, 253, 253, 247, 253, 255, 215, 255, 223, 255, 247, 253, 255, 127, 223, 255, 245, 255, 223, 253, 253, 255, 255, 127, 255, 119, 255, 215, 127, 255, 255, 255, 255, 223, 255, 255, 215, 253, 127, 223, 255, 253, 255, 255, 93, 247, 255, 253, 223, 127, 253, 255, 125, 255, 255, 119, 255, 255, 247, 255, 255, 253, 95, 215, 255, 253, 255, 127, 255, 255, 127, 223, 215, 119, 95, 255, 253, 223, 255, 125, 125, 255, 127, 127, 223, 253, 255, 247, 127, 255, 247, 255, 221, 255, 125, 127, 223, 255, 127, 223, 127, 255, 247, 255, 125, 247, 247, 255, 255, 125, 253, 255, 255, 223, 255, 127, 253, 255, 247, 223, 247, 255, 253, 215, 127, 255, 223, 247, 95, 255, 255, 223, 247, 247, 253, 255, 253, 223, 223, 255, 255, 215, 253, 127, 255, 255, 253, 223, 247, 255, 255, 247, 253, 215, 255, 253, 255, 127, 255, 255, 125, 255, 255, 247, 253, 247, 255, 93, 223, 255, 253, 255, 127, 255, 223, 255, 221, 247, 247, 255, 255, 245, 223, 255, 253, 253, 255, 255, 255, 255, 245, 253, 247, 119, 255, 255, 255, 255, 255, 253, 255, 223, 253, 255, 255, 255, 253, 223, 127, 223, 255, 253, 95, 255, 253, 125, 247, 119, 255, 255, 255, 253, 255, 119, 127, 255, 255, 255, 247, 253, 255, 247, 253, 95, 255, 125, 223, 255, 247, 223, 255, 253, 127, 255, 255, 127, 223, 253, 255, 223, 255, 255, 215, 255, 127, 247, 253, 95, 255, 127, 255, 255, 253, 127, 223, 119, 223, 223, 255, 127, 247, 255, 253, 255, 255, 127, 247, 255, 223, 223, 127, 221, 223, 255, 221, 255, 253, 255, 215, 255, 253, 215, 255, 223, 223, 253, 255, 255, 127, 125, 255, 255, 255, 215, 127, 253, 255, 247, 223, 255, 119, 255, 255, 255, 125, 255, 255, 221, 255, 255, 125, 247, 247, 255, 223, 253, 223, 255, 255, 127, 255, 255, 127, 247, 255, 127, 255, 255, 95, 255, 255, 253, 255, 127, 221, 255, 245, 125, 223, 125, 255, 223, 253, 255, 255, 253, 223, 247, 255, 95, 255, 247, 255, 255, 127, 255, 223, 125, 127, 255, 255, 223, 247, 127, 255, 255, 253, 221, 255, 255, 125, 247, 245, 255, 223, 119, 255, 247, 127, 127, 255, 255, 255, 247, 253, 253, 215, 255, 255, 223, 255, 253, 247, 255, 255, 247, 247, 223, 255, 255, 253, 223, 247, 127, 255, 119, 255, 223, 255, 253, 255, 255, 253, 255, 255, 255, 247, 255, 223, 223, 127, 223, 255, 127, 127, 247, 247, 255, 247, 255, 125, 247, 253, 255, 255, 245, 221, 215, 255, 223, 247, 253, 255, 223, 255, 255, 223, 117, 255, 223, 253, 255, 215, 247, 127, 247, 255, 93, 255, 255, 253, 255, 125, 95, 255, 127, 255, 255, 247, 125, 255, 255, 255, 223, 253, 125, 255, 255, 127, 255, 127, 223, 247, 247, 127, 255, 255, 255, 223, 253, 255, 247, 255, 223, 223, 253, 255, 255, 247, 95, 255, 255, 223, 223, 127, 255, 223, 119, 255, 255, 253, 253, 223, 255, 255, 255, 245, 221, 255, 125, 255, 255, 127, 223, 223, 127, 255, 255, 247, 255, 247, 247, 255, 255, 255, 125, 223, 245, 223, 255, 247, 253, 247, 255, 255, 255, 247, 255, 255, 253, 255, 215, 117, 127, 255, 255, 223, 223, 255, 127, 255, 247, 255, 255, 127, 253, 255, 253, 223, 255, 127, 255, 223, 127, 255, 255, 253, 223, 247, 255, 255, 255, 247, 223, 255, 247, 253, 215, 127, 125, 255, 255, 95, 247, 253, 253, 247, 253, 127, 223, 253, 223, 255, 255, 255, 247, 255, 255, 247, 125, 127, 223, 117, 223, 223, 247, 253, 255, 127, 255, 255, 253, 93, 255, 255, 125, 215, 255, 223, 255, 127, 255, 255, 247, 223, 247, 253, 255, 255, 127, 253, 223, 255, 255, 255, 125, 223, 215, 255, 253, 247, 247, 255, 223, 255, 127, 247, 247, 255, 223, 127, 253, 255, 255, 95, 255, 253, 127, 215, 255, 255, 255, 247, 127, 255, 255, 223, 255, 255, 127, 255, 253, 125, 255, 253, 253, 255, 253, 127, 223, 247, 223, 255, 247, 93, 255, 253, 95, 223, 127, 127, 215, 127, 255, 255, 255, 253, 255, 127, 95, 255, 247, 255, 223, 253, 255, 255, 119, 127, 255, 125, 255, 223, 127, 253, 255, 247, 253, 247, 255, 127, 223, 119, 255, 255, 127, 221, 223, 247, 255, 247, 255, 253, 255, 253, 255, 215, 253, 95, 255, 245, 253, 223, 127, 223, 247, 255, 127, 223, 125, 255, 255, 255, 255, 223, 125, 255, 247, 255, 221, 255, 253, 253, 247, 127, 255, 247, 119, 223, 255, 247, 223, 247, 127, 253, 247, 255, 95, 255, 255, 253, 247, 247, 95, 255, 119, 255, 223, 255, 255, 255, 245, 255, 215, 255, 127, 223, 127, 223, 223, 255, 223, 255, 247, 255, 255, 255, 253, 247, 255, 127, 223, 127, 255, 255, 127, 253, 255, 255, 95, 255, 247, 255, 247, 253, 253, 255, 255, 255, 223, 253, 221, 255, 247, 127, 255, 253, 253, 223, 125, 127, 247, 253, 127, 255, 255, 223, 223, 119, 253, 247, 253, 255, 223, 127, 127, 223, 247, 255, 255, 253, 255, 215, 255, 223, 247, 255, 127, 247, 255, 255, 223, 253, 127, 255, 255, 223, 255, 119, 255, 247, 253, 221, 247, 253, 255, 255, 247, 95, 255, 255, 253, 255, 119, 253, 255, 245, 255, 223, 125, 127, 247, 253, 95, 223, 247, 255, 255, 127, 255, 255, 255, 255, 223, 253, 253, 255, 253, 255, 255, 119, 253, 247, 127, 253, 247, 247, 253, 247, 127, 253, 215, 255, 255, 223, 253, 255, 255, 127, 255, 255, 255, 125, 223, 255, 127, 223, 247, 255, 255, 245, 223, 255, 127, 255, 255, 255, 221, 255, 127, 127, 223, 247, 127, 255, 127, 223, 223, 255, 223, 247, 247, 255, 215, 255, 255, 255, 255, 127, 255, 255, 255, 255, 255, 255, 255, 253, 221, 215, 253, 253, 255, 125, 255, 255, 119, 255, 247, 127, 223, 255, 245, 95, 223, 255, 255, 215, 127, 223, 223, 247, 223, 255, 247, 125, 247, 255, 223, 223, 127, 127, 255, 127, 255, 223, 127, 253, 215, 255, 125, 247, 255, 127, 255, 253, 253, 255, 255, 255, 255, 255, 223, 223, 127, 95, 255, 253, 253, 247, 125, 127, 255, 245, 255, 255, 117, 223, 255, 119, 253, 255, 255, 253, 223, 253, 255, 255, 247, 255, 223, 125, 255, 223, 255, 255, 255, 247, 221, 215, 255, 255, 247, 119, 95, 255, 255, 223, 247, 247, 255, 247, 253, 127, 247, 253, 255, 247, 247, 127, 223, 255, 253, 255, 255, 253, 255, 255, 127, 255, 127, 127, 255, 255, 255, 255, 253, 253, 255, 127, 223, 255, 247, 223, 255, 127, 255, 223, 253, 223, 223, 253, 255, 255, 255, 223, 247, 245, 95, 247, 255, 127, 223, 247, 223, 255, 125, 253, 255, 255, 255, 255, 253, 125, 255, 255, 255, 247, 245, 127, 255, 255, 221, 255, 255, 223, 255, 247, 125, 255, 253, 255, 223, 127, 255, 223, 255, 223, 255, 247, 255, 247, 253, 253, 255, 255, 255, 223, 253, 223, 255, 125, 255, 247, 255, 255, 255, 255, 255, 223, 255, 125, 247, 125, 127, 223, 127, 253, 215, 255, 127, 255, 253, 127, 255, 127, 127, 223, 253, 255, 223, 245, 223, 247, 255, 253, 255, 247, 223, 255, 255, 255, 255, 247, 223, 255, 127, 253, 215, 255, 93, 247, 255, 125, 255, 253, 253, 255, 255, 255, 255, 125, 255, 255, 119, 255, 247, 247, 253, 255, 255, 255, 247, 247, 255, 255, 253, 253, 223, 127, 253, 255, 253, 255, 255, 255, 255, 247, 127, 127, 255, 255, 223, 223, 255, 255, 247, 247, 253, 255, 255, 255, 215, 119, 255, 223, 247, 255, 215, 255, 255, 247, 253, 253, 255, 255, 253, 255, 127, 95, 255, 119, 223, 255, 119, 127, 255, 255, 127, 247, 125, 253, 255, 127, 255, 255, 247, 221, 255, 119, 223, 247, 247, 253, 247, 253, 125, 255, 127, 255, 223, 247, 253, 255, 127, 223, 255, 255, 223, 255, 255, 255, 223, 247, 255, 223, 247, 255, 223, 127, 127, 255, 255, 255, 223, 255, 127, 223, 255, 223, 255, 125, 255, 215, 119, 255, 247, 247, 253, 255, 127, 127, 223, 253, 127, 255, 253, 255, 247, 255, 127, 255, 245, 93, 255, 255, 255, 247, 255, 95, 255, 125, 223, 247, 255, 253, 255, 255, 255, 255, 253, 255, 255, 117, 127, 255, 119, 255, 255, 119, 255, 255, 255, 127, 255, 255, 253, 255, 125, 255, 255, 255, 255, 247, 247, 221, 247, 255, 221, 247, 255, 255, 223, 247, 223, 255, 247, 255, 223, 127, 223, 247, 255, 253, 247, 125, 255, 223, 247, 255, 255, 119, 255, 223, 255, 255, 247, 247, 127, 255, 253, 253, 223, 255, 127, 255, 253, 255, 247, 247, 255, 255, 247, 223, 223, 253, 255, 255, 125, 255, 255, 125, 253, 247, 255, 255, 255, 245, 95, 215, 255, 255, 255, 255, 95, 255, 255, 255, 247, 247, 125, 255, 255, 125, 255, 253, 127, 247, 255, 223, 255, 255, 255, 247, 255, 95, 255, 247, 255, 255, 255, 125, 255, 255, 255, 223, 253, 255, 247, 127, 221, 255, 247, 253, 247, 253, 125, 255, 253, 95, 223, 255, 253, 215, 255, 127, 247, 255, 127, 247, 253, 127, 223, 247, 255, 255, 125, 223, 223, 255, 127, 255, 255, 253, 215, 127, 125, 247, 253, 223, 255, 127, 253, 247, 119, 255, 255, 245, 125, 223, 127, 127, 255, 125, 255, 255, 253, 223, 223, 255, 125, 247, 253, 127, 255, 127, 253, 223, 125, 255, 255, 255, 255, 223, 247, 253, 255, 253, 255, 223, 255, 255, 255, 253, 255, 223, 127, 223, 247, 255, 221, 255, 255, 127, 247, 255, 253, 247, 255, 223, 255, 247, 255, 255, 127, 221, 255, 247, 255, 215, 255, 255, 255, 125, 127, 223, 255, 255, 255, 127, 127, 247, 255, 95, 255, 127, 127, 223, 255, 255, 255, 255, 223, 223, 255, 127, 247, 255, 255, 255, 125, 255, 215, 255, 255, 255, 247, 253, 247, 255, 253, 255, 255, 255, 255, 253, 127, 255, 245, 127, 255, 253, 221, 223, 247, 253, 255, 255, 95, 247, 127, 255, 223, 255, 223, 223, 255, 255, 255, 247, 255, 247, 255, 95, 255, 253, 255, 247, 253, 255, 255, 255, 221, 255, 127, 95, 255, 247, 223, 255, 127, 125, 255, 253, 127, 255, 255, 253, 255, 255, 223, 247, 247, 255, 215, 253, 255, 223, 127, 127, 255, 255, 253, 215, 127, 127, 247, 253, 223, 247, 255, 127, 215, 119, 255, 255, 247, 223, 255, 255, 127, 255, 255, 253, 215, 255, 127, 223, 255, 223, 255, 119, 255, 255, 255, 221, 255, 247, 223, 255, 253, 127, 223, 119, 255, 223, 127, 253, 255, 255, 127, 255, 255, 253, 255, 127, 253, 255, 117, 127, 223, 247, 255, 215, 247, 127, 255, 253, 253, 223, 253, 127, 247, 253, 255, 223, 127, 255, 215, 247, 93, 255, 245, 255, 255, 255, 253, 255, 253, 223, 255, 255, 253, 255, 119, 95, 247, 247, 255, 247, 255, 253, 255, 247, 255, 255, 125, 253, 255, 127, 223, 247, 255, 95, 255, 253, 255, 255, 255, 223, 223, 125, 255, 255, 119, 255, 247, 253, 127, 215, 255, 255, 255, 253, 255, 255, 253, 221, 247, 127, 255, 255, 255, 223, 255, 127, 255, 255, 255, 127, 255, 255, 223, 223, 255, 255, 255, 255, 125, 247, 127, 253, 223, 125, 255, 255, 247, 223, 255, 127, 255, 255, 253, 125, 247, 255, 255, 247, 247, 223, 255, 247, 221, 223, 255, 253, 255, 245, 255, 247, 253, 253, 255, 253, 223, 255, 247, 223, 255, 255, 255, 247, 255, 221, 255, 253, 253, 223, 247, 95, 255, 247, 255, 255, 127, 223, 255, 253, 223, 255, 255, 253, 215, 127, 255, 223, 247, 253, 255, 255, 127, 247, 247, 127, 215, 127, 255, 223, 253, 255, 255, 247, 255, 223, 255, 253, 247, 253, 221, 255, 125, 255, 255, 127, 255, 255, 253, 253, 215, 255, 221, 255, 253, 223, 215, 255, 255, 215, 245, 127, 255, 127, 255, 223, 127, 253, 255, 253, 255, 247, 255, 255, 255, 119, 223, 255, 255, 253, 255, 127, 127, 255, 245, 223, 215, 253, 127, 223, 255, 255, 223, 253, 221, 247, 127, 255, 247, 247, 253, 247, 127, 127, 255, 245, 223, 255, 125, 255, 247, 127, 255, 255, 247, 255, 255, 127, 255, 255, 247, 223, 255, 247, 223, 223, 127, 95, 247, 255, 125, 223, 255, 125, 255, 247, 223, 255, 247, 223, 255, 247, 255, 247, 247, 223, 255, 255, 127, 215, 119, 255, 223, 125, 255, 247, 247, 253, 255, 255, 127, 255, 255, 253, 223, 247, 127, 255, 127, 255, 247, 127, 253, 255, 255, 223, 247, 255, 253, 247, 255, 255, 255, 127, 221, 247, 247, 127, 255, 255, 223, 255, 127, 253, 255, 255, 127, 255, 255, 253, 255, 127, 255, 255, 247, 255, 223, 127, 255, 255, 255, 255, 223, 119, 253, 255, 255, 221, 247, 245, 223, 247, 255, 253, 247, 119, 255, 255, 127, 255, 223, 255, 223, 255, 247, 255, 255, 125, 255, 255, 247, 223, 255, 119, 255, 247, 127, 253, 255, 253, 125, 223, 255, 127, 247, 253, 127, 255, 255, 223, 215, 255, 255, 255, 255, 127, 255, 127, 253, 247, 117, 223, 223, 127, 255, 255, 247, 255, 247, 255, 255, 255, 253, 253, 247, 247, 95, 255, 255, 255, 223, 247, 253, 255, 255, 255, 223, 127, 127, 255, 127, 95, 255, 247, 255, 255, 127, 221, 247, 255, 223, 255, 125, 127, 255, 117, 255, 255, 255, 255, 255, 255, 221, 255, 255, 221, 255, 255, 255, 247, 119, 223, 255, 245, 255, 255, 119, 127, 255, 255, 125, 247, 253, 253, 215, 245, 255, 255, 255, 255, 247, 255, 223, 255, 255, 255, 255, 253, 255, 255, 127, 255, 255, 255, 223, 223, 255, 223, 255, 247, 253, 223, 255, 255, 255, 245, 255, 255, 117, 255, 247, 255, 255, 255, 253, 223, 215, 253, 127, 255, 245, 255, 223, 255, 255, 247, 127, 255, 255, 245, 223, 255, 127, 255, 255, 255, 127, 223, 245, 253, 247, 255, 127, 255, 247, 223, 247, 127, 255, 255, 247, 127, 223, 245, 255, 215, 255, 223, 247, 255, 93, 255, 127, 125, 255, 127, 223, 223, 253, 253, 255, 127, 255, 255, 253, 253, 223, 253, 125, 255, 255, 127, 255, 255, 223, 215, 255, 253, 255, 255, 127, 223, 127, 255, 247, 245, 255, 255, 125, 253, 223, 247, 255, 255, 253, 253, 223, 255, 255, 215, 127, 223, 255, 127, 255, 215, 247, 127, 255, 255, 125, 247, 255, 127, 255, 255, 223, 223, 255, 253, 255, 255, 253, 255, 253, 127, 255, 253, 255, 255, 127, 255, 255, 245, 221, 255, 247, 95, 255, 247, 223, 255, 125, 253, 255, 253, 95, 223, 255, 253, 215, 127, 95, 255, 247, 127, 255, 127, 255, 255, 247, 223, 255, 253, 253, 255, 255, 127, 255, 253, 127, 247, 253, 125, 247, 255, 127, 255, 255, 253, 255, 255, 221, 255, 253, 93, 255, 255, 127, 223, 255, 255, 223, 127, 221, 215, 247, 125, 247, 255, 255, 215, 127, 255, 215, 247, 223, 223, 247, 223, 255, 127, 125, 247, 255, 127, 255, 255, 127, 255, 253, 95, 255, 247, 253, 255, 255, 221, 255, 255, 255, 255, 253, 127, 255, 127, 127, 255, 255, 223, 247, 119, 125, 255, 255, 223, 255, 255, 253, 255, 253, 223, 255, 127, 253, 223, 255, 223, 247, 253, 223, 247, 127, 125, 255, 247, 223, 223, 255, 223, 223, 247, 255, 247, 247, 127, 247, 125, 255, 255, 247, 127, 255, 119, 223, 255, 255, 221, 255, 245, 95, 223, 255, 255, 255, 247, 255, 255, 125, 221, 255, 255, 255, 255, 247, 95, 215, 255, 255, 215, 255, 95, 223, 127, 255, 255, 247, 253, 255, 255, 221, 255, 253, 127, 255, 119, 255, 255, 255, 255, 223, 127, 255, 255, 255, 223, 215, 255, 253, 223, 125, 255, 255, 255, 223, 255, 119, 127, 255, 255, 253, 255, 255, 255, 223, 125, 255, 255, 119, 253, 223, 127, 125, 255, 253, 223, 247, 127, 127, 223, 247, 255, 255, 119, 255, 255, 255, 223, 255, 255, 125, 255, 255, 255, 255, 247, 95, 255, 247, 221, 223, 119, 255, 247, 247, 253, 223, 125, 255, 223, 253, 255, 223, 255, 221, 247, 255, 95, 247, 255, 95, 255, 127, 255, 247, 255, 255, 255, 125, 223, 223, 255, 255, 255, 255, 223, 223, 255, 255, 255, 255, 255, 223, 247, 255, 247, 255, 223, 255, 247, 127, 223, 255, 127, 247, 255, 127, 255, 245, 253, 247, 247, 255, 255, 255, 221, 255, 253, 255, 223, 247, 127, 223, 247, 255, 255, 255, 223, 247, 253, 255, 247, 253, 253, 247, 127, 223, 223, 127, 221, 255, 255, 223, 247, 247, 255, 255, 125, 253, 223, 247, 223, 255, 125, 255, 255, 127, 223, 255, 247, 127, 255, 255, 255, 255, 119, 255, 255, 127, 253, 247, 247, 223, 247, 255, 253, 247, 255, 255, 255, 119, 127, 255, 253, 223, 255, 255, 127, 255, 255, 221, 247, 255, 127, 247, 255, 127, 223, 255, 223, 215, 255, 255, 255, 247, 127, 223, 127, 125, 255, 253, 223, 223, 245, 253, 247, 127, 255, 255, 255, 253, 255, 127, 127, 223, 253, 127, 223, 247, 255, 255, 255, 221, 247, 255, 93, 255, 255, 255, 215, 247, 255, 255, 253, 221, 255, 127, 255, 255, 253, 255, 215, 255, 125, 247, 255, 127, 255, 125, 223, 255, 247, 223, 255, 245, 127, 255, 255, 255, 223, 255, 255, 255, 127, 255, 247, 247, 93, 255, 245, 255, 247, 127, 253, 247, 247, 255, 223, 255, 255, 223, 119, 255, 247, 255, 221, 223, 253, 127, 247, 125, 255, 255, 247, 221, 223, 255, 127, 255, 255, 255, 255, 255, 255, 215, 253, 223, 223, 253, 255, 255, 255, 127, 247, 255, 255, 223, 255, 255, 223, 255, 223, 255, 125, 253, 223, 255, 253, 255, 245, 125, 247, 127, 255, 223, 255, 223, 223, 255, 253, 255, 247, 255, 247, 253, 253, 247, 253, 127, 255, 253, 95, 255, 117, 255, 255, 127, 223, 255, 255, 255, 255, 127, 255, 255, 127, 127, 255, 125, 223, 215, 255, 221, 255, 247, 125, 255, 255, 255, 247, 245, 223, 255, 253, 223, 247, 255, 127, 247, 253, 127, 215, 255, 253, 247, 127, 255, 255, 127, 223, 223, 247, 221, 255, 255, 223, 255, 253, 255, 223, 255, 223, 255, 247, 255, 255, 255, 253, 255, 247, 221, 255, 255, 127, 255, 119, 95, 223, 245, 255, 255, 127, 127, 255, 255, 255, 255, 127, 253, 247, 119, 255, 255, 247, 253, 255, 247, 95, 247, 255, 255, 255, 255, 127, 223, 255, 127, 255, 247, 221, 215, 255, 255, 247, 253, 127, 255, 255, 255, 223, 127, 255, 255, 127, 253, 247, 247, 255, 247, 255, 95, 255, 255, 253, 255, 127, 127, 255, 125, 223, 255, 119, 127, 255, 255, 93, 255, 255, 253, 255, 247, 255, 223, 119, 255, 255, 127, 255, 255, 245, 255, 247, 125, 255, 255, 253, 255, 223, 255, 223, 255, 255, 221, 255, 247, 221, 255, 255, 253, 255, 247, 95, 223, 127, 255, 255, 127, 253, 247, 255, 255, 247, 125, 255, 255, 127, 223, 255, 245, 255, 255, 127, 255, 247, 255, 125, 223, 255, 125, 255, 255, 223, 255, 253, 223, 223, 255, 255, 255, 255, 221, 255, 253, 127, 247, 255, 127, 255, 253, 223, 255, 255, 95, 247, 253, 95, 215, 127, 255, 247, 255, 255, 223, 247, 255, 247, 119, 127, 255, 253, 125, 255, 255, 255, 255, 245, 127, 255, 127, 255, 255, 127, 95, 255, 245, 255, 223, 253, 125, 255, 127, 95, 223, 247, 221, 255, 119, 255, 255, 247, 221, 255, 255, 125, 255, 247, 255, 255, 125, 253, 247, 127, 125, 247, 247, 127, 247, 255, 253, 223, 127, 255, 223, 253, 223, 255, 255, 127, 255, 253, 127, 247, 255, 255, 223, 247, 255, 255, 255, 221, 255, 127, 255, 255, 253, 125, 255, 127, 127, 255, 253, 127, 255, 253, 253, 247, 255, 127, 255, 255, 223, 255, 255, 253, 255, 245, 255, 223, 119, 223, 247, 127, 253, 247, 255, 255, 223, 253, 253, 255, 247, 255, 223, 247, 255, 223, 119, 223, 255, 255, 223, 247, 255, 127, 255, 255, 255, 255, 253, 255, 255, 247, 95, 255, 255, 255, 247, 127, 127, 255, 253, 95, 223, 255, 255, 215, 255, 253, 255, 245, 125, 255, 253, 127, 255, 127, 255, 255, 247, 221, 255, 255, 255, 255, 247, 253, 247, 253, 253, 255, 253, 255, 255, 255, 255, 215, 119, 223, 247, 253, 127, 255, 127, 255, 223, 253, 255, 223, 127, 221, 223, 255, 127, 255, 253, 223, 255, 255, 255, 255, 245, 223, 255, 255, 255, 255, 127, 127, 247, 255, 127, 255, 255, 127, 255, 127, 127, 255, 255, 223, 247, 119, 125, 255, 255, 223, 247, 253, 253, 255, 255, 95, 255, 253, 255, 247, 255, 125, 247, 255, 223, 223, 127, 255, 223, 253, 223, 223, 127, 255, 247, 255, 93, 255, 247, 127, 247, 253, 255, 247, 255, 255, 255, 253, 223, 255, 255, 255, 255, 247, 253, 223, 127, 253, 255, 247, 223, 255, 253, 221, 223, 119, 253, 255, 255, 253, 223, 255, 127, 215, 245, 255, 255, 255, 255, 255, 255, 223, 255, 253, 253, 255, 255, 253, 215, 125, 223, 255, 117, 255, 223, 247, 253, 255, 253, 95, 247, 255, 255, 255, 119, 255, 255, 127, 223, 247, 247, 95, 255, 255, 223, 255, 127, 255, 247, 255, 127, 223, 255, 255, 255, 119, 255, 255, 255, 223, 215, 253, 127, 223, 253, 127, 255, 127, 253, 223, 127, 125, 255, 247, 127, 255, 125, 127, 255, 255, 223, 223, 255, 253, 223, 247, 255, 247, 253, 255, 247, 255, 127, 255, 255, 223, 255, 127, 253, 255, 127, 253, 255, 245, 255, 255, 253, 127, 255, 253, 255, 223, 127, 255, 255, 255, 127, 247, 247, 223, 215, 255, 255, 247, 253, 95, 223, 117, 255, 223, 255, 253, 255, 255, 253, 215, 255, 253, 255, 117, 223, 255, 247, 253, 247, 127, 253, 255, 253, 127, 255, 255, 255, 255, 253, 95, 223, 247, 221, 255, 255, 253, 247, 255, 255, 223, 255, 253, 223, 117, 127, 255, 117, 253, 255, 127, 223, 247, 255, 221, 255, 127, 255, 247, 255, 255, 223, 247, 223, 223, 255, 95, 247, 255, 127, 255, 125, 255, 255, 255, 255, 255, 245, 223, 247, 247, 255, 255, 247, 127, 223, 125, 255, 215, 255, 255, 255, 253, 253, 223, 255, 127, 255, 255, 125, 255, 255, 255, 255, 255, 223, 223, 127, 223, 255, 119, 125, 247, 253, 255, 255, 255, 255, 247, 247, 223, 223, 127, 253, 255, 119, 223, 255, 253, 95, 247, 255, 127, 255, 253, 223, 255, 253, 221, 255, 255, 127, 255, 255, 253, 255, 127, 127, 223, 255, 223, 255, 247, 255, 215, 255, 127, 255, 245, 125, 255, 253, 127, 215, 255, 255, 255, 119, 221, 223, 127, 95, 255, 247, 255, 247, 253, 255, 255, 255, 255, 255, 255, 253, 215, 255, 253, 247, 247, 127, 223, 253, 127, 255, 117, 127, 223, 253, 255, 223, 247, 127, 255, 255, 223, 247, 255, 255, 255, 247, 95, 255, 253, 223, 255, 247, 253, 255, 255, 223, 255, 255, 255, 255, 125, 95, 255, 119, 223, 247, 247, 255, 255, 245, 255, 223, 127, 125, 247, 255, 127, 255, 253, 221, 247, 255, 253, 255, 247, 253, 255, 255, 255, 255, 247, 255, 255, 117, 253, 255, 255, 95, 247, 255, 223, 247, 125, 255, 215, 255, 255, 223, 127, 255, 255, 255, 255, 247, 245, 127, 255, 253, 255, 255, 247, 255, 255, 247, 255, 223, 255, 223, 247, 253, 127, 255, 255, 127, 255, 119, 127, 223, 255, 221, 223, 255, 223, 255, 255, 253, 255, 255, 255, 255, 253, 255, 255, 119, 255, 215, 119, 253, 247, 255, 253, 215, 253, 255, 255, 247, 127, 255, 255, 255, 215, 255, 223, 255, 255, 127, 223, 127, 125, 255, 125, 127, 223, 247, 253, 247, 127, 223, 255, 255, 253, 255, 255, 255, 255, 253, 255, 223, 245, 255, 247, 127, 223, 255, 253, 221, 255, 127, 253, 223, 127, 255, 255, 255, 253, 223, 255, 95, 255, 255, 253, 255, 255, 253, 223, 253, 127, 255, 255, 223, 255, 255, 253, 247, 255, 253, 223, 253, 255, 247, 127, 127, 255, 253, 223, 247, 255, 255, 255, 253, 127, 247, 255, 255, 247, 253, 255, 255, 127, 223, 215, 247, 255, 255, 253, 255, 255, 255, 125, 247, 125, 255, 255, 247, 255, 215, 127, 127, 255, 247, 95, 223, 127, 127, 255, 127, 255, 255, 255, 255, 247, 247, 93, 255, 255, 255, 215, 255, 255, 255, 253, 95, 255, 125, 255, 223, 127, 223, 247, 253, 125, 247, 255, 253, 255, 119, 223, 255, 245, 223, 255, 127, 127, 255, 255, 255, 223, 255, 255, 255, 255, 95, 255, 255, 221, 247, 255, 253, 255, 247, 221, 255, 125, 255, 247, 253, 127, 255, 253, 255, 255, 247, 253, 255, 245, 255, 247, 255, 255, 255, 245, 95, 255, 255, 255, 255, 255, 125, 255, 255, 255, 247, 255, 125, 255, 245, 127, 255, 255, 253, 223, 247, 223, 255, 253, 223, 255, 255, 125, 215, 127, 223, 255, 253, 223, 255, 247, 127, 255, 255, 255, 255, 125, 253, 223, 127, 223, 223, 119, 255, 247, 255, 255, 255, 255, 125, 255, 253, 255, 215, 255, 255, 255, 245, 253, 223, 255, 255, 255, 247, 255, 215, 127, 127, 215, 255, 223, 255, 127, 255, 255, 255, 221, 247, 247, 255, 223, 255, 255, 247, 253, 255, 223, 125, 255, 215, 247, 127, 247, 255, 223, 215, 255, 255, 247, 127, 127, 223, 255, 223, 255, 127, 255, 255, 255, 223, 255, 253, 255, 255, 245, 95, 223, 119, 223, 255, 255, 255, 255, 253, 127, 223, 255, 255, 215, 255, 255, 255, 255, 255, 255, 127, 127, 255, 247, 253, 215, 255, 255, 255, 255, 223, 223, 247, 255, 255, 127, 221, 255, 247, 125, 255, 255, 253, 247, 119, 255, 223, 253, 253, 255, 255, 127, 247, 253, 125, 223, 255, 127, 215, 253, 127, 255, 247, 255, 223, 127, 221, 255, 245, 223, 223, 127, 255, 223, 127, 255, 255, 253, 223, 223, 247, 223, 255, 247, 223, 223, 255, 255, 215, 247, 255, 255, 253, 223, 247, 247, 127, 255, 255, 255, 215, 255, 255, 255, 255, 255, 223, 255, 221, 255, 127, 127, 255, 253, 127, 255, 253, 127, 247, 127, 255, 255, 255, 223, 255, 255, 223, 247, 247, 221, 223, 255, 255, 255, 255, 255, 255, 119, 253, 247, 127, 127, 255, 253, 223, 255, 253, 255, 215, 255, 255, 223, 253, 253, 255, 127, 255, 247, 255, 127, 247, 127, 253, 223, 255, 95, 255, 255, 255, 215, 247, 255, 255, 247, 95, 255, 255, 255, 215, 253, 255, 223, 253, 223, 247, 255, 221, 247, 255, 253, 255, 127, 255, 255, 127, 255, 255, 119, 255, 223, 247, 253, 247, 255, 255, 255, 253, 253, 247, 255, 95, 223, 247, 255, 215, 247, 93, 255, 255, 127, 215, 255, 255, 223, 127, 95, 255, 245, 253, 255, 127, 127, 247, 247, 221, 255, 127, 253, 255, 119, 127, 255, 127, 255, 255, 255, 221, 247, 247, 255, 255, 253, 255, 223, 255, 223, 223, 125, 255, 255, 127, 223, 255, 247, 127, 255, 127, 253, 223, 253, 127, 255, 117, 255, 247, 255, 223, 255, 255, 255, 223, 127, 255, 223, 255, 255, 223, 255, 253, 255, 255, 255, 255, 253, 253, 255, 255, 255, 247, 127, 255, 223, 253, 255, 215, 255, 255, 255, 253, 223, 255, 255, 125, 255, 245, 255, 255, 255, 255, 247, 255, 223, 255, 247, 127, 247, 255, 255, 255, 127, 95, 255, 255, 223, 247, 255, 253, 247, 255, 255, 247, 255, 255, 255, 255, 95, 255, 127, 253, 255, 255, 255, 247, 247, 93, 247, 255, 253, 255, 255, 255, 255, 253, 253, 223, 247, 255, 255, 247, 255, 223, 125, 125, 215, 245, 255, 255, 247, 223, 223, 247, 253, 247, 255, 125, 255, 127, 255, 255, 253, 127, 255, 255, 253, 255, 255, 221, 247, 253, 221, 255, 255, 253, 247, 253, 95, 255, 119, 255, 223, 247, 125, 247, 255, 253, 255, 253, 255, 255, 255, 223, 255, 247, 221, 255, 119, 223, 255, 255, 223, 223, 253, 255, 223, 127, 255, 223, 255, 253, 255, 255, 255, 247, 247, 223, 247, 125, 255, 223, 253, 127, 255, 247, 253, 247, 255, 223, 255, 247, 223, 255, 125, 125, 223, 255, 255, 255, 117, 255, 255, 127, 95, 247, 247, 255, 247, 253, 255, 223, 245, 95, 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 125, 127, 255, 119, 255, 223, 255, 253, 215, 255, 125, 255, 253, 255, 247, 255, 255, 247, 245, 223, 223, 247, 255, 247, 255, 127, 247, 255, 125, 223, 255, 125, 247, 117, 127, 255, 255, 223, 247, 119, 253, 255, 253, 255, 247, 255, 125, 255, 255, 223, 255, 247, 223, 255, 119, 95, 247, 255, 253, 247, 127, 127, 255, 127, 127, 255, 253, 253, 255, 255, 253, 255, 255, 255, 255, 125, 255, 215, 247, 255, 223, 117, 255, 255, 255, 95, 255, 255, 255, 223, 253, 253, 255, 247, 127, 255, 119, 221, 255, 247, 255, 255, 255, 127, 255, 127, 255, 255, 245, 127, 255, 125, 255, 247, 255, 95, 255, 255, 125, 223, 255, 255, 247, 255, 223, 255, 255, 255, 255, 247, 253, 247, 255, 95, 255, 253, 125, 255, 127, 255, 255, 127, 255, 223, 119, 223, 255, 247, 255, 247, 255, 255, 247, 253, 223, 223, 255, 253, 247, 255, 253, 255, 255, 255, 255, 127, 253, 255, 245, 255, 255, 125, 253, 215, 127, 125, 247, 255, 127, 255, 125, 255, 255, 255, 223, 223, 247, 221, 255, 255, 255, 247, 247, 125, 223, 255, 255, 247, 255, 255, 255, 127, 221, 223, 247, 221, 255, 247, 127, 255, 253, 255, 223, 117, 255, 255, 255, 223, 247, 255, 253, 255, 253, 223, 255, 255, 255, 215, 125, 127, 255, 255, 255, 223, 127, 127, 255, 255, 255, 255, 253, 255, 247, 127, 127, 255, 255, 223, 255, 255, 221, 255, 247, 223, 255, 255, 125, 215, 127, 255, 223, 253, 255, 255, 247, 253, 255, 255, 255, 223, 255, 253, 255, 119, 127, 223, 125, 253, 255, 255, 223, 247, 253, 255, 255, 253, 253, 247, 255, 255, 223, 247, 255, 255, 119, 127, 255, 255, 127, 255, 253, 255, 223, 245, 223, 255, 247, 255, 215, 247, 221, 247, 247, 255, 223, 255, 255, 255, 253, 127, 223, 255, 223, 255, 247, 221, 247, 253, 93, 247, 127, 253, 223, 247, 127, 255, 255, 255, 215, 247, 127, 255, 253, 127, 247, 255, 255, 255, 255, 127, 223, 127, 253, 223, 255, 253, 255, 255, 127, 247, 127, 125, 255, 253, 95, 255, 245, 223, 247, 247, 223, 247, 255, 253, 255, 253, 125, 255, 247, 95, 255, 253, 253, 223, 127, 255, 255, 253, 93, 247, 255, 255, 223, 247, 255, 255, 125, 255, 223, 127, 95, 255, 255, 255, 247, 253, 253, 255, 255, 255, 255, 127, 223, 247, 255, 223, 247, 253, 125, 255, 253, 255, 215, 247, 127, 255, 255, 253, 247, 247, 127, 255, 255, 255, 223, 127, 253, 215, 125, 255, 255, 117, 255, 255, 247, 127, 247, 253, 253, 255, 255, 255, 247, 125, 255, 255, 127, 255, 247, 247, 255, 255, 255, 127, 255, 127, 125, 215, 125, 255, 255, 247, 253, 255, 255, 93, 247, 255, 223, 255, 255, 125, 255, 255, 223, 223, 255, 255, 255, 255, 255, 247, 255, 95, 255, 127, 255, 255, 247, 255, 255, 245, 255, 255, 247, 255, 255, 245, 255, 247, 255, 255, 247, 255, 127, 255, 127, 221, 223, 127, 253, 247, 255, 221, 223, 255, 127, 247, 119, 255, 223, 127, 253, 255, 255, 253, 255, 253, 125, 255, 127, 255, 255, 247, 95, 223, 253, 255, 255, 127, 253, 255, 253, 255, 255, 255, 125, 255, 247, 223, 255, 255, 223, 223, 255, 253, 255, 247, 255, 215, 255, 125, 247, 127, 95, 255, 255, 255, 247, 255, 95, 255, 255, 223, 247, 125, 125, 255, 127, 255, 223, 247, 255, 255, 255, 253, 255, 245, 95, 247, 127, 253, 223, 127, 255, 223, 247, 223, 223, 255, 255, 255, 245, 255, 255, 255, 127, 223, 255, 223, 255, 119, 255, 255, 247, 255, 255, 247, 221, 223, 253, 255, 247, 119, 255, 223, 125, 253, 255, 255, 253, 255, 253, 127, 247, 255, 255, 223, 255, 95, 255, 253, 255, 255, 255, 125, 247, 253, 223, 247, 255, 255, 255, 127, 127, 255, 119, 221, 223, 119, 255, 255, 247, 127, 255, 253, 255, 255, 253, 95, 255, 247, 223, 247, 127, 125, 255, 255, 221, 247, 125, 127, 255, 255, 127, 223, 127, 255, 247, 255, 255, 255, 253, 127, 255, 253, 253, 223, 247, 223, 255, 245, 255, 223, 119, 127, 247, 255, 255, 247, 255, 127, 247, 247, 223, 255, 253, 253, 223, 255, 223, 247, 255, 221, 223, 253, 255, 247, 255, 255, 255, 255, 255, 223, 247, 221, 247, 247, 253, 247, 255, 255, 223, 127, 95, 255, 245, 223, 247, 255, 255, 255, 255, 253, 223, 253, 253, 247, 255, 127, 223, 247, 253, 255, 247, 95, 255, 247, 255, 215, 255, 253, 223, 253, 255, 255, 247, 223, 247, 255, 127, 255, 255, 253, 255, 255, 255, 255, 253, 223, 223, 127, 255, 215, 255, 127, 255, 247, 95, 255, 253, 255, 255, 119, 223, 255, 253, 221, 255, 255, 255, 247, 245, 253, 255, 253, 255, 255, 253, 255, 255, 253, 255, 247, 127, 255, 247, 247, 221, 223, 127, 127, 223, 253, 255, 223, 127, 255, 255, 255, 221, 255, 255, 223, 215, 255, 253, 255, 255, 255, 255, 247, 255, 223, 119, 255, 255, 255, 125, 255, 255, 255, 247, 245, 223, 223, 247, 253, 247, 247, 95, 255, 255, 95, 247, 255, 127, 247, 253, 255, 255, 255, 223, 255, 119, 255, 255, 247, 255, 255, 125, 255, 223, 247, 223, 223, 117, 255, 223, 255, 127, 255, 255, 255, 255, 253, 253, 255, 127, 255, 223, 127, 255, 255, 127, 95, 255, 245, 253, 247, 255, 255, 223, 255, 127, 255, 253, 255, 247, 255, 255, 247, 255, 95, 255, 255, 127, 255, 255, 255, 255, 127, 221, 215, 247, 223, 255, 255, 127, 223, 255, 253, 223, 119, 255, 255, 255, 255, 215, 127, 255, 247, 255, 255, 215, 253, 253, 247, 117, 255, 255, 127, 221, 255, 255, 255, 255, 245, 255, 255, 253, 127, 255, 255, 127, 255, 255, 253, 255, 255, 255, 255, 247, 253, 215, 255, 255, 223, 255, 223, 255, 117, 253, 215, 127, 127, 247, 255, 255, 255, 127, 127, 247, 127, 255, 255, 125, 223, 255, 247, 255, 255, 245, 253, 255, 255, 125, 255, 253, 255, 255, 253, 255, 223, 255, 255, 247, 253, 127, 255, 255, 255, 255, 247, 255, 255, 127, 223, 223, 247, 255, 255, 247, 253, 223, 255, 255, 255, 245, 255, 223, 117, 255, 255, 247, 255, 255, 253, 253, 215, 255, 127, 247, 247, 223, 255, 247, 223, 247, 247, 125, 255, 247, 255, 247, 127, 255, 223, 127, 255, 255, 245, 223, 255, 255, 223, 255, 255, 223, 247, 127, 253, 255, 127, 223, 255, 255, 253, 255, 127, 221, 255, 245, 253, 255, 255, 255, 223, 247, 255, 255, 125, 253, 255, 255, 223, 255, 253, 255, 215, 253, 127, 223, 245, 95, 255, 127, 253, 247, 247, 253, 247, 255, 223, 255, 125, 255, 223, 125, 255, 255, 253, 223, 255, 255, 127, 247, 253, 127, 223, 127, 255, 215, 245, 223, 255, 255, 223, 223, 127, 255, 255, 255, 127, 255, 253, 253, 247, 245, 255, 223, 255, 253, 255, 255, 223, 255, 255, 255, 215, 255, 127, 247, 253, 127, 223, 253, 253, 255, 127, 127, 255, 255, 255, 223, 255, 127, 255, 253, 255, 255, 119, 253, 255, 127, 127, 247, 247, 221, 255, 255, 127, 247, 127, 255, 255, 247, 255, 223, 247, 127, 255, 253, 255, 215, 125, 253, 223, 255, 255, 255, 125, 255, 255, 247, 253, 255, 253, 125, 223, 125, 255, 255, 247, 127, 223, 253, 255, 223, 247, 255, 247, 253, 255, 255, 255, 253, 247, 255, 95, 255]
n = int(input())
mm = []
m = 100002
for i in range(12500):
	u = cx(mmm[i])
	for j in range(8):
		mm.append(u[j])
mm.append(2)
mm.append(2)
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print(1, 1)
else:
	print(2)
	s = [1 if i >= m else mm[i] for i in range(n + 2)]
	for i in range(m, math.ceil(math.sqrt(n + 1)) + 1):
		if s[i] == 1:
			for j in range(i + 1, n + 2):
				if j % i == 0:
					s[j] = 2
	print(' '.join([str(s[i]) for i in range(2, n + 2)]))


n = int(input())
prizes = [1 for i in range(n)]
for j in range(int(n ** (1 / 2))):
	if prizes[j] == 1:
		for i in range(2 * j + 2, n, j + 2):
			prizes[i] = 2
if n > 2:
	print(2)
else:
	print(1)
for num in prizes:
	print(num, end=' ')


import math
n = int(input())
answer = ''
if n <= 2:
	print(1)
else:
	print(2)
m = n + 2
numbers = [True] * m
numbers[0] = False
numbers[1] = False
for i in range(2, int(math.sqrt(m)) + 1):
	j = 0
	while i ** 2 + j * i < m:
		numbers[i ** 2 + j * i] = False
		j += 1
for i in range(2, m):
	if numbers[i]:
		answer += '1 '
	else:
		answer += '2 '
answer = answer[:-1]
print(answer)


def main():
	(n, one) = (int(input()) + 2, '1')
	l = [one] * n
	for p in range(2, n):
		if l[p] is one:
			pp = p * p
			if pp > n:
				break
			for q in range(pp, n, p):
				l[q] = '2'
	print(2 if n > 4 else 1)
	print(' '.join(l[2:]))
main()


import sys
import re
input = lambda : sys.stdin.readline()
import functools

@functools.lru_cache(maxsize=10000)
def prime_factors(n):
	i = 2
	factors = []
	while i * i <= n:
		if n % i:
			i += 1
		else:
			n //= i
			factors.append(i)
	if n > 1:
		factors.append(n)
	return factors

def is_prim(n):
	return not re.match('^1?$|^(11+?)\\1+$', n * '1')

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

def Main():
	n = int(input())
	if n == 1:
		print(1, '\n', 1)
		return 0
	if n == 2:
		print(1)
		print(1, 1)
		return 0
	A = []
	for i in range(2, n + 2):
		if is_prime(i):
			A.append(1)
		else:
			A.append(2)
	print(2)
	print(*A)
Main()


n = int(input()) + 1
a = [1] * (n + 1)
a[0] = 2
a[1] = 2
for i in range(2, n + 1):
	if a[i] == 1:
		for j in range(2, n // i + 1):
			a[i * j] = 2
print(1 if n == 2 or n == 3 else 2)
print(*a[2:])


n = int(input())
if n == 2:
	print('1\n1 1')
elif n == 1:
	print('1\n1')
else:
	a = [True for i in range(n + 2)]
	for i in range(2, n + 2):
		if a[i]:
			for j in range(i * 2, n + 2, i):
				a[j] = False
	print(2, 1, sep='\n', end='')
	for i in range(1, n):
		print('', 2 - a[i + 2], end='')


n = int(input())
a = [True] * (n + 2)
for i in range(2, n + 2):
	if not a[i]:
		continue
	j = i * i
	while j < n + 2:
		a[j] = False
		j += i
if n <= 2:
	print(1)
else:
	print(2)
print(' '.join(('1' if x else '2' for x in a[2:])))


import math

def sieve(n):
	s = [1] * (n + 2)
	for i in range(2, n + 2):
		if s[i] == 1:
			count = 2
			for j in range(i ** 2, n + 2, i):
				s[j] = count
	return s[2:]
n = int(input())
prime = sieve(n)
print(len(set(prime)))
print(*prime)


import math
n = int(input())
k = int(math.sqrt(n))
k += 1
p = [1] * (n + 2)
a = [1] * (n + 2)
for i in range(2, k + 1):
	if p[i] == 1:
		a[i] = 1
		for j in range(i * i, n + 2, i):
			if p[j] == 1:
				p[j] = 0
				a[j] = 2
if n < 3:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	print(a[i], end=' ')
print()


def isPrime(n):
	if n <= 1:
		return False
	if n <= 3:
		return True
	if n % 2 == 0 or n % 3 == 0:
		return False
	i = 5
	while i * i <= n:
		if n % i == 0 or n % (i + 2) == 0:
			return False
		i = i + 6
	return True
n = int(input())
if n == 1:
	print(1)
	print(1)
	exit()
if n == 2:
	print(1)
	print('1 1')
	exit(0)
arr = []
for i in range(2, n + 2):
	arr.append(i)
d = [1 for i in range(n)]
for i in range(n):
	if isPrime(arr[i]) == False:
		d[i] = 2
print(2)
print(*d)


n = int(input())
a = [1] * (n + 2)
for i in range(2, n + 2):
	if a[i] != 2:
		j = 2 * i
		while j <= n + 1:
			a[j] = 2
			j = j + i
if n > 2:
	print('2')
else:
	print('1')
c = a[2:]
print(*c, sep=' ')


import math

def sieve_of_eratosthenes(limit):
	is_prime_array = [False] * 2 + [True] * (limit - 1)
	for num in range(2, int(math.sqrt(limit)) + 1):
		if is_prime_array[num]:
			is_prime_array[num * 2::num] = [False] * len(is_prime_array[num * 2::num])
	return set((num for num in range(len(is_prime_array)) if is_prime_array[num]))
n = int(input())
s_p = sieve_of_eratosthenes(n + 2)
print(1 if n <= 2 else 2)
for i in range(2, n + 2):
	if i in s_p:
		print('1', end=' ')
	else:
		print('2', end=' ')


n = int(input())
N = n + 2
mark = [1] * N
for i in range(2, N):
	if mark[i] == 1:
		for j in range(i * i, N, i):
			mark[j] = 2
print(len(set(mark[2:])))
print(*mark[2:])


import sys
(mod, MOD) = (1000000007, 998244353)

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

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

def input():
	return sys.stdin.readline().strip()
n = int(input())
result = [0] * (n + 2)
for i in range(2, int((n + 1) ** 0.5) + 1):
	if result[i] == 0:
		result[i] = 1
		for j in range(i + i, n + 2, i):
			result[j] = 2
result = result[2:]
for i in range(len(result)):
	if result[i] == 0:
		result[i] = 1
print(max(result))
print(*result)


n = int(input())
seive = [1] * (n + 2)
seive[0] = -1
seive[1] = -1
for i in range(n + 2):
	if seive[i] == 1:
		for j in range(i * 2, n + 2, i):
			seive[j] = 2
if n == 1 or n == 2:
	print(1)
	for i in range(2, n + 2):
		print(seive[i], end=' ')
elif n == 0:
	print(0)
else:
	print(2)
	for i in range(2, n + 2):
		print(seive[i], end=' ')


def soa(n):
	lst = [0 for _ in range(n + 1)]
	p = 2
	while p * p <= n:
		if lst[p] == 0:
			c = 2
			lst[p] = 1
			for i in range(p * p, n + 1, p):
				lst[i] = 2
		p += 1
	return lst
num = int(input())
lst = soa(num + 1)
lst = lst[2:]
lst = [x if not x == 0 else 1 for x in lst]
new = set(lst)
count = len(new)
print(count)
for j in lst:
	print(j, end=' ')


def prime_factors():
	n = 100001
	seive = [i for i in range(n + 1)]
	i = 2
	while i * i <= n:
		for j in range(i * i, n + 1, i):
			if seive[j] % i == 0:
				seive[j] = 2
		i += 1
	for k in range(2, n + 1):
		if seive[k] == k:
			seive[k] = 1
	seive[0] = 1
	seive[1] = 1
	return seive
seive = prime_factors()
n = int(input())
if n < 3:
	print(1)
else:
	print(2)
i = 1
c = 0
for j in range(i + 1, n + 2):
	if seive[j] == 1:
		print(1, end=' ')
	else:
		print(2, end=' ')


n = int(input()) + 2
C = [1] * n
for i in range(2, n):
	for j in range(i * i, n, i):
		C[j] = 2
print(len(set(C[2:])))
print(*C[2:])


n = int(input())
res = 1
piece = [1 for i in range(n + 2)]
for i in range(2, n + 2):
	if piece[i] != 1:
		continue
	for j in range(i + i, n + 2, i):
		piece[j] = 2
for p in piece:
	res = max(p, res)
print(res)
print(' '.join(map(str, piece[2:])))


def main(n):
	prime = [True for i in range(n + 2)]
	p = 2
	k = 1
	ans = [1 for i in range(n)]
	while p * p <= n + 1:
		if prime[p] == True:
			for i in range(p * 2, n + 2, p):
				if prime[i] == True:
					prime[i] = False
					ans[i - 2] += 1
					k = 2
		p += 1
	print(k)
	for i in range(n):
		print(ans[i], end=' ')
n = int(input())
main(n)


def sieve(n):
	np = [0] * (n + 1)
	for i in range(2, n + 1):
		if np[i] == 0:
			np[i] = '1'
			for j in range(i * i, n + 1, i):
				np[j] = '2'
	return np
n = int(input())
t = sieve(n + 1)
if n == 1 or n == 2:
	print(1)
else:
	print(2)
print(' '.join(t[2:]))


import math, string, itertools, fractions, heapq, collections, re, array, bisect, sys, copy, functools
import random
sys.setrecursionlimit(10 ** 7)
inf = 10 ** 20
eps = 1.0 / 10 ** 10
mod = 10 ** 9 + 7
dd = [(-1, 0), (0, 1), (1, 0), (0, -1)]
ddn = [(-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1), (0, -1), (-1, -1)]

def LI():
	return list(map(int, sys.stdin.readline().split()))

def LLI():
	return [list(map(int, l.split())) for l in sys.stdin.readlines()]

def LI_():
	return [int(x) - 1 for x in sys.stdin.readline().split()]

def LF():
	return [float(x) for x in sys.stdin.readline().split()]

def LS():
	return sys.stdin.readline().split()

def I():
	return int(sys.stdin.readline())

def F():
	return float(sys.stdin.readline())

def S():
	return input()

def pf(s):
	return print(s, flush=True)

def pe(s):
	return print(str(s), file=sys.stderr)

def main():
	n = I()
	a = [0] * n
	for i in range(2, n + 2, 2):
		a[i - 2] = min(2, i // 2)
	for i in range(3, n + 2, 2):
		if a[i - 2] > 0:
			continue
		for j in range(i, n + 2, i):
			a[j - 2] = min(2, j // i)
	return '{}\n{}'.format(max(a), ' '.join(map(str, a)))
print(main())


n = int(input())
prime = [0 for i in range(n + 2)]
p = 2
while p * p <= n + 1:
	if prime[p] == 0:
		for i in range(p * p, n + 2, p):
			prime[i] = 1
	p = p + 1
if n < 3:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	prime[i] = prime[i] + 1
s = ' '.join((str(e) for e in prime[2:n + 2]))
print(s)


def main():
	n = int(input())
	if n == 1:
		print('1')
		print('1')
		return
	elif n == 2:
		print('1')
		print('1 1')
		return
	elif n == 3:
		print('2')
		print('1 1 2')
		return
	else:
		numbers = [True] * (n + 3)
		for prime in range(2, n + 3):
			for i in range(2 * prime, n + 3, prime):
				numbers[i] = False
		print(2)
		print(' '.join([str(1) if numbers[i + 2] else str(2) for i in range(n)]))
main()


def isPrime(n):
	if n == 2 or n == 3:
		return True
	if n % 2 == 0 or n % 3 == 0:
		return False
	i = 5
	w = 2
	sqN = int(pow(n, 0.5))
	while i <= sqN:
		if n % i == 0:
			return False
		i += w
		w = 6 - w
	return True
n = int(input().strip())
arr = [1 if isPrime(i) else 2 for i in range(2, n + 2)]
print(max(arr))
print(*arr)


def prime(n: int):
	for i in range(2, int(n ** 0.5) + 1):
		if n % i == 0:
			return False
	return True
n = int(input())
if n < 3:
	print(1)
	for i in range(n):
		print(1, end=' ')
else:
	print(2)
	for i in range(2, n + 2):
		if prime(i):
			print('1', end=' ')
		else:
			print('2', end=' ')


class Solution:

	def __init__(self):
		self.sieve = []
		self.spf = []

	def buildsieve(self, n):
		self.spf = [-1] * (n - 2)
		a = [-1] * (n - 2)
		for i in range(0, n - 2):
			fac = i + 2
			if a[i] == -1:
				while i + fac < n - 2:
					if a[i + fac] == -1:
						self.spf[i + fac] = 0
					a[i + fac] = 0
					i = i + fac
		self.sieve = a

	def primeFactors(self, N):
		if len(self.sieve) < 1:
			self.buildsieve(N + 5)
		if N > 2:
			print(2)
		else:
			print(1)
		for i in range(0, N):
			if self.sieve[i] == 0:
				print(2, end=' ')
			else:
				print(1, end=' ')
ob = Solution()
ob.primeFactors(int(input()))


n = int(input()) + 2
prime = [i % 2 for i in range(n)]
prime[1] = 0
prime[2] = 1
for p in range(3, int(n ** 0.5) + 2, 2):
	if not prime[p]:
		continue
	for q in range(p * p, n, p + p):
		prime[q] = 0
l = [2 - x for x in prime[2:]]
print(max(l))
print(' '.join(map(str, l)))


from math import sqrt
n = int(input())
l = [1] * (n + 2)
for i in range(2, int(sqrt(n + 2) + 1)):
	if l[i] == 1:
		for j in range(i * i, n + 2, i):
			l[j] = 2
if n >= 3:
	print(2)
	print(*l[2:n + 2])
else:
	print(1)
	print(*[1] * n)


n = int(input())
if n <= 2:
	print(1)
	for i in range(n):
		print(1, end=' ')
else:
	prime = [1] * (n + 2)
	for i in range(2, n + 2):
		if prime[i]:
			k = i
			while k + i < n + 2:
				k += i
				prime[k] = 0
	print(2)
	for i in range(2, n + 2):
		if prime[i]:
			print(1, end=' ')
		else:
			print(2, end=' ')


def is_prime(n):
	if n == 2 or n == 3:
		return True
	if n < 2 or n % 2 == 0:
		return False
	if n < 9:
		return True
	if n % 3 == 0:
		return False
	r = int(n ** 0.5)
	f = 5
	while f <= r:
		if n % f == 0:
			return False
		if n % (f + 2) == 0:
			return False
		f += 6
	return True
n = int(input())
colors = []
for i in range(2, n + 2):
	if not is_prime(i):
		colors.append(str(2))
	else:
		colors.append(str(1))
if n >= 3:
	print(2)
else:
	print(1)
print(' '.join(colors))


n = int(input())
if n == 1:
	print(1)
	print(1)
	exit()
if n == 2:
	print(1)
	print(1, 1)
	exit()
a = [1] * (n + 2)
for i in range(2, n + 2):
	if a[i] == 1:
		for j in range(2 * i, n + 2, i):
			a[j] = 2
a = a[2:]
print(2)
print(*a)


n = int(input())
s = [False] * (n + 2)
for i in range(2, n + 2):
	if not s[i]:
		for j in range(2 * i, n + 2, i):
			s[j] = True
print(1 if n <= 2 else 2)
print(' '.join(('12'[si] for si in s[2:])))


import math
n = int(input())
z = []
for i in range(2, n + 2):
	c = 0
	for j in range(2, int(math.pow(i, 0.5)) + 1):
		if i % j == 0:
			c += 1
			break
	if c == 0:
		z.append('1')
	else:
		z.append('2')
if z.count('1') > 0 and z.count('2') > 0:
	print(2)
else:
	print(1)
print(' '.join(z))


n = int(input())
a = [1] * (n + 2)
if n < 3:
	print(1)
	b = [1] * n
	print(*b)
else:
	for i in range(2, n + 2):
		if a[i] == 2:
			continue
		else:
			for j in range(i + i, n + 2, i):
				a[j] = 2
	print(2)
	print(*a[2:])


import math
n = int(input())
n += 1
prime = [True for i in range(n + 1)]
color = [1 for i in range(n + 1)]
prime[1] = False
lim = math.floor(math.sqrt(n))
for i in range(2, lim + 1):
	if prime[i] == True:
		p = i * i
		while p <= n:
			prime[p] = False
			color[p] = color[i] + 1
			p += i
k = max(color)
print(k)
for i in range(2, n + 1):
	print(color[i], end=' ')


n = int(input())

def genPrimeList(n):
	isPrime = ['1' for i in range(n + 2)]
	for i in range(2, n + 1):
		for j in range(2 * i, n + 2, i):
			isPrime[j] = '2'
	return isPrime
if n < 3:
	print('1')
	for x in genPrimeList(n)[2:]:
		print(x, end=' ')
else:
	print('2')
	for x in genPrimeList(n)[2:]:
		print(x, end=' ')


import math

def prime(n):
	j = 0
	if n == 2 or n == 3:
		return 1
	for i in range(2, int(math.sqrt(n)) + 1):
		if n % i == 0:
			j = 1
			break
	if j == 1:
		return 0
	else:
		return 1
n = int(input())
if n == 1 or n == 2:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	if prime(i):
		print(1, end=' ')
	else:
		print(2, end=' ')


def rwh_primes(n):
	sieve = [True] * n
	for i in range(3, int(n ** 0.5) + 1, 2):
		if sieve[i]:
			sieve[i * i::2 * i] = [False] * ((n - i * i - 1) // (2 * i) + 1)
	return [2] + [i for i in range(3, n, 2) if sieve[i]]
n = int(input())
primes = set(rwh_primes(n + 2))
res = [1 if i + 2 in primes else 2 for i in range(n)]
print(2 if 2 in res else 1)
print(*res)


n = int(input())
arr = [1] * n
for i in range(2, n + 2):
	if arr[i - 2]:
		for j in range(i * i, n + 2, i):
			arr[j - 2] = 0
print(len(set(arr)))
print(' '.join(('1' if arr[i - 2] == 1 else '2' for i in range(2, n + 2))))


n = int(input())
r = [1 for i in range(n + 2)]
for i in range(2, n + 2):
	if r[i] == 1:
		for j in range(i * i, n + 2, i):
			r[j] = 2
if n < 3:
	print(1)
else:
	print(2)
print(*r[2:])


def is_prime(n):
	if n == 2 or n == 3:
		return True
	if n < 2 or n % 2 == 0:
		return False
	if n < 9:
		return True
	if n % 3 == 0:
		return False
	r = int(n ** 0.5)
	f = 5
	while f <= r:
		if n % f == 0:
			return False
		if n % (f + 2) == 0:
			return False
		f += 6
	return True
n = int(input())
value_color = []
primes = set()
for i in range(0, n):
	value = i + 2
	if is_prime(value):
		value_color.append('1')
	else:
		value_color.append('2')
if n == 1:
	print('1')
	print('1')
elif n == 2:
	print('1')
	print('1 1')
else:
	print('2')
	print(' '.join(value_color))


n = int(input())
a = [0] * (n + 2)
for i in range(2, n + 2):
	for j in range(i, n + 2, i):
		a[j] += 1
if n > 2:
	print(2)
else:
	print(1)
for i in range(2, n + 2):
	if a[i] == 1:
		print(1, end=' ')
	else:
		print(2, end=' ')


IL = lambda : list(map(int, input().split()))
IS = lambda : input().split()
I = lambda : int(input())
S = lambda : input()
n = I()
primes = [True for i in range(n + 2)]
for i in range(2, n + 2):
	if primes[i]:
		for j in range(i * 2, n + 2, i):
			primes[j] = False
print(1 if n < 3 else 2)
print(' '.join(['1' if i else '2' for i in primes[2:]]))


def dfs(v, col):
	used[v] = col
	for u in g[v]:
		if used[u] == -1:
			dfs(u, col ^ 1)
n = int(input())
used = [1 for i in range(n)]
for i in range(2, n + 2):
	if used[i - 2] == 1:
		for j in range(i * i, n + 2, i):
			used[j - 2] = 2
print(max(used))
print(*used)


n = int(input())
n += 2
u = [1] * n
for i in range(2, n):
	if u[i] == 1:
		for j in range(i * i, n, i):
			u[j] = 2
print(max(u[2:]))
print(' '.join(map(str, u[2:])))


n = int(input())
if n > 2:
	l = [0 for i in range(n)]
	i = 0
	while i < n:
		if l[i] == 0:
			c = 1
			l[i] = c
			for j in range((i + 2) * (i + 2) - 2, n, i + 2):
				if l[j] == 0:
					l[j] = 2
		i += 1
	print(2)
	print(*l)
else:
	print(1)
	l = [1] * n
	print(*l)


from collections import Counter
n = int(input())
primes = [-1 for i in range(n + 2)]
spf = [1 for i in range(n + 2)]
primes[0] = 0
primes[1] = 0
for i in range(1, n + 2):
	if primes[i] == -1:
		for j in range(i, (n + 1) // i + 1):
			if primes[i * j] == -1:
				spf[i * j] = 2
				primes[i * j] = 0
arr = Counter(spf)
print(len(arr))
for i in range(2, n + 2):
	print(spf[i], end=' ')


from math import sqrt
n = int(input())
f = 0
ans = []
for k in range(n + 2):
	ans.append('y')
for i in range(2, n + 2):
	if ans[i] == 'y':
		for j in range(2 * i, n + 2, i):
			ans[j] = 'n'
			f += 1
if f == 0:
	print(1)
else:
	print(2)
s = ''
for l in range(2, n + 2):
	if ans[l] == 'y':
		s += '1 '
	else:
		s += '2 '
print(s)


from collections import deque as de

class My_stack:

	def __init__(self):
		self.data = []

	def my_push(self, x):
		return self.data.append(x)

	def my_pop(self):
		return self.data.pop()

	def my_peak(self):
		return self.data[-1]

	def my_contains(self, x):
		return self.data.count(x)

	def my_show_all(self):
		return self.data

	def isEmpty(self):
		return len(self.data) == 0
arrStack = My_stack()

def isPrime(n):
	if n <= 1:
		return False
	if n <= 3:
		return True
	if n % 2 == 0 or n % 3 == 0:
		return False
	i = 5
	while i * i <= n:
		if n % i == 0 or n % (i + 2) == 0:
			return False
		i = i + 6
	return True
n = int(input())
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print(1, 1)
else:
	print(2, sep='\n')
	for i in range(n):
		if isPrime(i + 2):
			print(1, end=' ')
		else:
			print(2, end=' ')


import math

def isprime(n):
	for i in range(2, int(math.sqrt(n)) + 1):
		if n % i == 0:
			return 0
	return 1
n = int(input())
a = []
prime = []
for i in range(1, n + 1):
	a.append(i + 1)
for i in range(0, len(a)):
	if isprime(a[i]) == 0:
		prime.append(2)
	else:
		prime.append(1)
if n >= 3:
	print(2)
	print(*prime)
else:
	print(1)
	print(*prime)


def isprime(n):
	if n == 2:
		return 1
	else:
		for i in range(2, int(n ** 0.5) + 2):
			if n % i == 0:
				return 0
		return 1
n = int(input())
if n <= 2:
	print(1)
	for i in range(n):
		print(1, end=' ')
else:
	print(2)
	for i in range(2, n + 2):
		if isprime(i):
			print(1, end=' ')
		else:
			print(2, end=' ')


from sys import stdin, stdout
cin = stdin.readline
cout = stdout.write
mp = lambda : list(map(int, cin().split()))
(n,) = mp()
prime = [1] * (n + 2)
for i in range(2, n + 2):
	if prime[i] == 1:
		for j in range(i + i, n + 2, i):
			prime[j] = 2
if n <= 2:
	cout('1\n')
else:
	cout('2\n')
for i in range(2, n + 2):
	cout(str(prime[i]) + ' ')


def main():
	n = int(input())
	primes = [True for i in range(n)]
	for i in range(n):
		if primes[i]:
			j = 1 + i
			while True:
				index = i + (i + 2) * j
				if index >= n:
					break
				primes[index] = False
				j += 1
	if n <= 2:
		print(1)
	else:
		print(2)
	for prime in primes:
		if prime:
			print(1, end=' ')
		else:
			print(2, end=' ')
	print()
main()


n = int(input())
isPrime = [True] * (n + 2)
for x in range(2, int((n + 1) ** 0.5 + 1), 1):
	if isPrime[x]:
		for y in range(x ** 2, n + 2, x):
			isPrime[y] = False
if n > 2:
	print(2)
else:
	print(1)
for p in range(2, n + 2):
	if isPrime[p]:
		print(1, end=' ')
	else:
		print(2, end=' ')


from math import sqrt
n = int(input())

def prost(a):
	x = int(sqrt(a) + 1)
	for i in range(2, x):
		if a % i == 0:
			return False
	return True
if n <= 2:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	if i == 2 or i == 5:
		print(1, end=' ')
	elif i % 2 == 0 or i % 5 == 0:
		print(2, end=' ')
	elif prost(i) == True:
		print(1, end=' ')
	else:
		print(2, end=' ')


n = int(input())
output = []
for k in range(n):
	output.append(1)
for numb in range(2, (n + 1) // 2 + 1):
	if output[numb - 2] == 1:
		next_idx = 2 * numb - 2
		while next_idx <= n - 1:
			output[next_idx] = 2
			next_idx += numb
str_output = ''
for k in range(n):
	str_output += str(output[k]) + ' '
if n < 3:
	print(str(1))
else:
	print(str(2))
print(str_output)


def sieve(n):
	rn = round(n ** 0.5) + 1
	primes = [1] * (n + 2)
	i = 2
	while i < rn:
		if primes[i] == 1:
			for j in range(i * 2, n + 2, i):
				primes[j] = 2
		i += 1
	primes.remove(1)
	primes.remove(1)
	print(2)
	print(*primes)
n = int(input())
if n < 3:
	print(1)
	ls = [1] * n
	print(*ls)
else:
	sieve(n)


n = int(input())
a = []
for i in range(n + 2):
	a.append(1)
for i in range(2, n + 2):
	if a[i] == 1:
		j = i * 2
		while j <= n + 1:
			if a[j] == a[i]:
				a[j] += 1
			j += i
d = {}
for i in range(2, n + 2):
	ele = a[i]
	if ele not in d:
		d[ele] = 1
	else:
		d[ele] += 1
count = 0
for ele in d:
	count += 1
print(count)
for i in range(2, n + 2):
	print(a[i], sep='', end=' ')


n = int(input())
a = [True for i in range(n + 2)]
(a[0], a[1]) = (False, False)
for i in range(2, n + 2):
	if a[i]:
		j = i * i
		while j < n + 2:
			a[j] = False
			j = j + i
c = 0
for i in range(2, n + 2):
	if a[i] == True:
		c = c + 1
if n <= 2:
	print(1)
	if n == 1:
		print(1)
	else:
		print(1, ' ', 1)
else:
	print(2)
	for i in range(1, n + 1):
		if a[i + 1] == True:
			print(1, end=' ')
		else:
			print(2, end=' ')


n = int(input())
a = [1] * (n + 2)
for i in range(2, n + 2):
	j = 2
	while a[i] == 1 and i * j < n + 2:
		a[i * j] = 2
		j += 1
print(len(set(a[2:])))
print(*a[2:])


n = int(input())
prime = [True for i in range(n + 2)]
prime[0] = False
prime[1] = False
for i in range(2, n + 2):
	if prime[i]:
		for j in range(i ** 2, n + 2, i):
			prime[j] = False
print(2 if n > 2 else 1)
for i in range(n):
	if prime[i + 2]:
		print(1, end=' ')
	else:
		print(2, end=' ')


def divider(n):
	i = 2
	while i ** 2 <= n:
		if n % i == 0:
			return False
		i += 1
	return True
n = int(input())
ans = []
for i in range(2, n + 2):
	if divider(i):
		ans.append(1)
	else:
		ans.append(2)
print(len(set(ans)))
print(*ans)


def sieve(n):
	l = [1] * n
	for i in range(2, n):
		if l[i] == 1:
			for j in range(i * i, n, i):
				l[j] = 0
	l[1] = 0
	l[0] = 0
	if n == 4:
		print(1)
	else:
		print(2)
	for i in range(2, len(l)):
		if l[i] == 1:
			print(1, end=' ')
		else:
			print(2, end=' ')
n = int(input())
if n == 1:
	print(1)
	print(1)
else:
	sieve(n + 2)


n = int(input())
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print('1 1')
else:
	print(2)
	ans = []

	def prime(q):
		j = 2
		while j * j <= q:
			if q % j == 0:
				return False
			j += 1
		return True
	for i in range(2, n + 2):
		if prime(i):
			ans.append('1')
		else:
			ans.append('2')
	print(' '.join(ans))


n = int(input())
color = []
prime = []
c = 0
for i in range(0, n + 2):
	prime.append(1)
	color.append(1)
i = 2
while i * i <= n + 1:
	if prime[i] == 1:
		for j in range(2 * i, n + 2, i):
			prime[j] = 0
			color[j] = 2
	i += 1
for i in range(2, n + 2):
	if color[i] == 2:
		c = 1
		break
if c == 1:
	print(2)
else:
	print(1)
for i in range(2, n + 2):
	print(str(color[i]), end=' ')


n = int(input())
if n == 1 or n == 2:
	print(1)
	print(*[1] * n)
else:
	prime = [1] * (n + 2)
	prime[0] = prime[1] = 0
	i = 2
	while i * i <= n + 1:
		if prime[i] != 2:
			for j in range(i * i, n + 2, i):
				prime[j] = 2
		i += 1
	print(2)
	print(*prime[2:])


last = 1
n = int(input())
arr = [1] * (n + 2)
for i in range(2, n + 2):
	if arr[i] != 1:
		continue
	for j in range(2 * i, n + 2, i):
		if arr[j] == arr[i]:
			arr[j] += 1
			last = max(last, arr[j])
print(last)
print(' '.join(map(str, arr[2:])))


def prime_sieve():
	sieve = [1] * 1000001
	sieve[0] = 0
	sieve[1] = 0
	for i in range(2, 1001):
		if sieve[i] == 1:
			for j in range(i * i, 1000001, i):
				sieve[j] = 0
	return sieve
sieve = prime_sieve()
n = int(input())
if n == 1 or n == 2:
	print(1)
	l = [1] * n
else:
	l = []
	for i in range(2, n + 2):
		if sieve[i] == 1:
			l.append(1)
		else:
			l.append(2)
	print(2)
print(*l)


n = int(input())
l = [1] * 1000001
l[0] = 0
l[1] = 0
for i in range(2, 1000001):
	if l[i] == 1:
		for j in range(i * i, 1000001, i):
			l[j] = 2
k = set(l[2:n + 2])
print(len(k))
print(*l[2:n + 2])


from math import *
from sys import *
input = stdin.readline
n = int(input())
l = []
m = 2
for i in range(2, n + 2):
	f = 0
	for j in range(2, int(sqrt(i)) + 1):
		if i % j == 0:
			f = 1
			break
	if f == 1:
		l.append(m)
	else:
		l.append(1)
print(len(set(l)))
print(*l)


def sieve(n):
	mark = [True] * (n + 1)
	p = 2
	while p * p <= n:
		if mark[p]:
			for i in range(p * p, n + 1, p):
				mark[i] = False
		p += 1
	for i in range(2, n + 1):
		if mark[i]:
			print(1, end=' ')
		else:
			print(2, end=' ')
n = int(input())
if n == 1 or n == 2:
	print(1)
else:
	print(2)
sieve(n + 1)


vis = [0] * int(100000.0 + 3)

def sieve():
	for i in range(2, int(100000.0 + 3)):
		if vis[i]:
			continue
		j = i * i
		while j < int(100000.0 + 3):
			vis[j] = 1
			j += i
sieve()
n = int(input())
print(1 if n <= 2 else 2)
for i in range(2, n + 2):
	vis[i] += 1
print(*vis[2:n + 2])


import math

def check_prime(num):
	if all((num % i != 0 for i in range(2, int(math.sqrt(num)) + 1))):
		return 1
	else:
		return 0
n = int(input())
if n >= 3:
	print(2)
else:
	print(1)
for i in range(2, n + 2):
	if check_prime(i):
		print(1, end=' ')
	else:
		print(2, end=' ')
print()


import math
n = int(input())
a = [1] * n
a[0] = 1
if n >= 3:
	print(2)
	a[2] = 2
else:
	print(1)
for i in range(2, n + 2):
	if a[i - 2] == 1:
		for j in range(2 * i, n + 2, i):
			a[j - 2] = 2
print(*a)


sieve = [0] * 100002
for i in range(2, 100002):
	if sieve[i]:
		continue
	for j in range(i * 2, 100002, i):
		sieve[j] = i
n = int(input())
print(1 if n <= 2 else 2)
ans = ''
for i in range(2, n + 2):
	if sieve[i]:
		ans += '2 '
	else:
		ans += '1 '
print(ans)


def isPrime(n):
	for i in range(2, int(n ** 0.5) + 1):
		if n % i == 0:
			return False
	return True
n = int(input())
x = []
for i in range(n):
	x.append(1 if isPrime(i + 2) else 2)
print(len(list(set(x))))
print(*x)


def prime(n):
	if n == 1:
		print(1)
		print(1)
		return
	if n == 2:
		print(1)
		print(1, 1)
		return
	arr = list(range(2, n + 2))
	for i in range(len(arr)):
		p = arr[i]
		if p == True or p == False:
			continue
		arr[i] = True
		for j in range(p * p, n + 2, p):
			arr[j - 2] = False
	d = {True: 1, False: 2}
	for i in range(len(arr)):
		arr[i] = d[arr[i]]
	print(2)
	print(*arr)
prime(int(input()))


def sakurajima(n):
	if n < 9:
		return ['0', '1', '1', '2', '1', '2', '1', '2'][1:n + 1]
	n += 1
	l = [1] * n
	for i in range(2, int(n ** 0.5) + 1):
		if l[i - 1] == 1:
			for j in range(i ** 2, n + 1, i):
				if j % i == 0:
					l[j - 1] = 2
	l[0] = 0
	return [str(i) for i in l[1:]]
n = int(input())
if n <= 2:
	print(1)
	print(' '.join(['1'] * n))
else:
	print(2)
	print(' '.join(sakurajima(n)))


n = int(input())
s = [i for i in range(n + 2)]
p = [1 for i in range(n + 2)]
p[1] = 1
p[2] = 1
x = 2
while x <= n + 1:
	while x <= n + 1 and p[x] == 2:
		x += 1
	y = 2
	while y * x <= n + 1:
		p[y * x] = 2
		y += 1
	x += 1
res = p[2:]
m = 1
for i in range(len(res)):
	m = max(m, res[i])
print(m)
print(' '.join(map(str, res)))


import sys

def debug(x, table):
	for (name, val) in table.items():
		if x is val:
			print('DEBUG:{} -> {}'.format(name, val), file=sys.stderr)
			return None

def solve():
	n = int(input())
	if n <= 2:
		k = 1
		ans = [1] * n
		print(k)
		print(*ans)
	else:
		k = 2
		ans = color(n)
		print(k)
		print(*ans)

def color(n):
	res = [1] * (n + 2)
	for p in range(2, n + 2):
		if res[p] != 1:
			continue
		for q in range(p * p, n + 2, p):
			res[q] = 2
	return res[2:]

def __starting_point():
	solve()
__starting_point()


import random, math
from copy import deepcopy as dc
MAXN = 100005
primes = [1] * MAXN
primes[0] = 0
primes[1] = 0

def seive():
	i = 2
	while i * i < MAXN:
		if primes[i] == 1:
			for j in range(i * i, MAXN, i):
				primes[j] = 2
		i += 1

def solution(n):
	cur = 1
	out = []
	for i in range(2, n + 2):
		out.append(primes[i])
	return (max(out), out)

def input_test():
	n = int(input())
	(out, li) = solution(n)
	print(out)
	print(' '.join(list(map(str, li))))
seive()
input_test()


maxn = 100005
pri = [1] * 100005
pri[0] = pri[1] = 0
for i in range(2, maxn):
	if not pri[i]:
		continue
	for j in range(i * i, maxn, i):
		pri[j] = 0
n = int(input())
if n < 3:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	if pri[i]:
		print(1, end=' ')
	else:
		print(2, end=' ')


import sys
read = lambda : sys.stdin.readline().strip()
write = lambda x: sys.stdout.write(x + '\n')
N = int(read())
ps = [i for i in range(N + 2)]
pn = 0
cs = [0] * (N + 2)
for i in range(2, N + 2):
	if not cs[i]:
		ps[pn] = i
		pn += 1
		for j in range(i ** 2, N + 2, i):
			cs[j] = 1
if N <= 2:
	write('1')
else:
	write('2')
write(' '.join((str(c + 1) for c in cs[2:])))


import math
n = int(input())

def isPrime(n):
	for i in range(2, int(math.sqrt(n)) + 1):
		if n % i == 0:
			return False
	return True
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print('1 1')
else:
	print(2)
	answerlist = []
	for i in range(2, n + 2):
		if isPrime(i):
			answerlist.append('1')
		else:
			answerlist.append('2')
	print(' '.join(answerlist))


def primefun(n2):
	cnt = 0
	seive = [1 for i in range(n2 + 1)]
	i = 2
	while i * i <= n2 + 1:
		if seive[i] == 1:
			for j in range(i * i, n2 + 1, i):
				seive[j] = 0
		i = i + 1
	seive[0] = 0
	seive[1] = 0
	return seive
n = int(input())
seive = primefun(100001)
if n > 2:
	print(2)
else:
	print(1)
for i in range(2, n + 2):
	if seive[i] == 1:
		print(1, end=' ')
	else:
		print(2, end=' ')


import math
n = int(input())
if n == 1:
	print(1)
	print(1)
	exit(0)
prime = [2]
ans = [1]
for i in range(3, n + 2):
	curr = 0
	sq = math.floor(math.sqrt(i))
	isPrime = True
	while curr < len(prime) and prime[curr] <= sq:
		if i % prime[curr] == 0:
			isPrime = False
			break
		curr += 1
	if isPrime:
		prime.append(i)
		ans.append(1)
	else:
		ans.append(2)
print(2 if n > 2 else 1)
print(' '.join(map(str, ans)))


from sys import stdin, stdout, maxsize
tup = lambda : map(int, stdin.readline().split())
I = lambda : int(stdin.readline())
lint = lambda : [int(x) for x in stdin.readline().split()]
stpr = lambda x: stdout.write(f'{x}' + '\n')
star = lambda x: print(' '.join(map(str, x)))
from _collections import defaultdict

def count(n):
	i = 2
	while i * i <= n:
		if n % i == 0:
			return 2
		i += 1
	return 1
dd = defaultdict(int)
n = I()
ans = []
for i in range(2, n + 2):
	ans.append(count(i))
stpr(len(set(ans)))
star(ans)


def is_prime(x):
	i = 2
	while i * i <= x:
		if x % i == 0:
			return False
		i += 1
	return True
n = int(input())
ans = []
for i in range(2, n + 2):
	if is_prime(i):
		ans.append(1)
	else:
		ans.append(2)
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print(1, 1)
else:
	print(2)
	print(' '.join((str(num) for num in ans)))


n = int(input())
l = [1] * (n + 2)
t = 1
for i in range(2, n + 2):
	if l[i] == 1:
		for j in range(i + i, n + 2, i):
			l[j] = 2
			t = max(t, l[j])
print(t)
print(*l[2:])


N = int(input()) + 2
is_prime = N * [1]
color = N * [2]
for i in range(N):
	if i < 2:
		continue
	if is_prime[i]:
		j = 2 * i
		while j < N:
			is_prime[j] = 0
			j += i
		color[i] = 1
print(max(color[2:N]), ' '.join(map(str, color[2:N])), sep='\n')


n = int(input())
arr = [1] * (n + 2)
arr[0] = 2
arr[1] = 2
i = 2
while True:
	for j in range(2 * i, n + 2, i):
		arr[j] = 2
	try:
		i = arr.index(1, i + 1)
	except:
		break
if n == 1 or n == 2:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	print(arr[i], end=' ')
print()


from math import sqrt
(n, k) = (int(input()) + 1, 1)
t = [1] * (n - 1)
for i in range(2, int(sqrt(n)) + 1):
	for j in range(i * i, n + 1, i):
		(t[j - 2], k) = (2, 2)
print(k)
print(*t)


n = int(input())
a = [1 for i in range(n + 2)]
for i in range(2, int(n ** 0.5) + 2):
	if a[i] != 2:
		for j in range(i * 2, n + 2, i):
			a[j] = 2
print(len(set(a)))
print(*a[2:])


def print_color(n):
	(d, k) = ([1] * (n + 2), 1)
	for i in range(2, n + 2):
		for j in range(i * i, n + 2, i):
			d[j] = 2
	print(len(set(d[2:])))
	print(*d[2:])
n = int(input())
print_color(n)


import os
import sys
import math
import itertools
from io import BytesIO, IOBase
import os.path
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))
mod = 10 ** 9 + 7
pi = 3.141592653589793

def i1():
	return int(sys.stdin.readline())

def sf():
	return sys.stdin.readline()

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

def arr():
	return list(map(int, sys.stdin.readline().split()))

def pf(ans):
	return sys.stdout.write(str(ans) + '\n')

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

def lcm(a, b):
	return a * b // gcd(a, b)
if os.path.exists('input_file.txt'):
	sys.stdin = open('input_file.txt', 'r')
	sys.stdout = open('output_file.txt', 'w')

def SOE(n):
	prime = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p * 2, n + 1, p):
				prime[i] = False
		p += 1
	prime[0] = False
	prime[1] = False
	return prime

def solve(p):
	l = []
	n = int(input())
	if n == 1:
		print(1)
	else:
		for i in range(2, n + 2):
			if i == 1:
				l.append(1)
			elif p[i]:
				l.append(1)
			else:
				l.append(2)
	if n == 2 or n == 1:
		print(1)
	else:
		print(2)
	for i in l:
		print(i, end=' ')
tc = 1
p = SOE(1000002)
for t in range(tc):
	solve(p)


import math
n = int(input())
prime = [True] * (n + 2)
for i in range(2, int(math.sqrt(n + 1)) + 1):
	if prime[i]:
		for j in range(2 * i, n + 2, i):
			if j < len(prime):
				prime[j] = False
if n == 1 or n == 2:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	if prime[i]:
		print(1, end=' ')
	else:
		print(2, end=' ')


from math import sqrt
n = int(input())
if n <= 2:
	print(1)
else:
	print(2)

def isprime(x):
	for i in range(2, int(sqrt(x)) + 1):
		if x % i == 0:
			return 0
	return 1
for j in range(2, n + 2):
	if isprime(j):
		print(1, end=' ')
	else:
		print(2, end=' ')


n = int(input())
l = []
for i in range(n):
	l.append(i + 2)

def SieveOfEratosthenes(n):
	prime = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p * p, n + 1, p):
				prime[i] = False
		p += 1
	return prime
x = SieveOfEratosthenes(n + 1)
for i in range(1, n + 2):
	if x[i] == True:
		l[i - 2] = 1
	else:
		l[i - 2] = 2
if False in x:
	print(2)
else:
	print(1)
for i in l:
	print(i, end=' ')
print()


def prime_nums_finder(n):
	is_prime = [True for i in range(n + 1)]
	is_prime[0] = False
	for i in range(1, int(n ** 0.5)):
		if is_prime[i]:
			for j in range((i + 1) ** 2 - 1, n, i + 1):
				is_prime[j] = False
	return is_prime
n = int(input())
prime_nums = prime_nums_finder(n + 2)
if n < 3:
	print('1\n' + '1 ' * n)
else:
	print('2\n' + ' '.join(['1' if prime_nums[i + 1] else '2' for i in range(n)]))


a = int(input())
z = [0] + [0] * (a + 1)
if a < 3:
	print(1)
else:
	print(2)
for i in range(2, a + 2):
	if not z[i]:
		for j in range(2 * i, a + 2, i):
			z[j] = 2
		z[i] = 1
print(*z[2:])


n = int(input())
color = [0 for _ in range(0, n + 2)]
total = set()
for i in range(2, n + 2):
	if color[i] == 0:
		color[i] = 1
		total.add(1)
		for i in range(i * 2, n + 2, i):
			color[i] = 2
			total.add(2)
print(len(total))
print(*color[2:n + 2])


from math import sqrt

def prime(a):
	if a < 2:
		return False
	for x in range(2, int(sqrt(a)) + 1):
		if a % x == 0:
			return False
	return True
prime_lst = []
n = int(input())
if n < 3:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	if prime(i):
		print(1, end=' ')
	else:
		print(2, end=' ')


n = int(input())
t = [1] * (n + 2)
p = 2
while p ** 2 <= n + 1:
	if t[p] == 1:
		for j in range(p * 2, n + 2, p):
			t[j] = 2
	p += 1
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print(1, 1)
else:
	f = []
	for j in range(1, n + 1):
		if t[j + 1] == 1:
			f.append(1)
		else:
			f.append(2)
	print(2)
	print(*f)


n = int(input())
arr = []
for i in range(n + 2):
	arr.append(1)
x = 2
while x * x <= n + 1:
	if arr[x] == 1:
		if 2 * x <= n + 1:
			for j in range(x * 2, n + 2, x):
				arr[j] = 2
	x += 1
if n == 1 or n == 2:
	print(1)
else:
	print(2)
for y in range(2, n + 2):
	print(arr[y], end=' ')


a = [0] * 100002
for i in range(2, 100002):
	if not a[i]:
		j = 2 * i
	while j <= 100001:
		a[j] = 1
		j += i
n = int(input())
if n <= 2:
	print('1')
else:
	print('2')
for i in range(2, n + 2):
	print(a[i] + 1, end=' ')


import math

def eratosthenes(n):
	is_composite = [False for _ in range(n + 1)]
	is_composite[0] = is_composite[1] = True
	b = math.floor(math.sqrt(n)) + 1
	for p in range(2, b + 1):
		if is_composite[p]:
			continue
		x = 2 * p
		while x <= n:
			is_composite[x] = True
			x += p
	return is_composite
n = int(input())
is_composite = eratosthenes(n + 1)
if n >= 3:
	print(2)
else:
	print(1)
print(*(1 if not is_composite[k] else 2 for k in range(2, n + 2)))


def get_primes(n):
	if n == 1:
		numbers = ['1']
		return numbers
	m = n + 2
	numbers = ['1'] * m
	for i in range(2, int(n ** 0.5 + 1) + 2):
		if numbers[i] == '1':
			for j in range(i * i, m, i):
				numbers[j] = '2'
	return numbers[2:]
n = int(input())
if n <= 2:
	print('1')
	print(' '.join(get_primes(n)))
else:
	print('2')
	print(' '.join(get_primes(n)))


import math

def isPrime(i):
	if sieve[i]:
		for j in range(i * i, n + 2, i):
			sieve[j] = 2
n = int(input())
sieve = [1 for i in range(n + 2)]
rnge = int(math.sqrt(n))
for i in range(2, rnge + 2):
	isPrime(i)
if n >= 3:
	print(2)
else:
	print(1)
for i in range(2, n + 2):
	print(sieve[i], end=' ')


from sys import stdin, stdout

def sieve(n, till):
	if till <= 2:
		print(1)
		for i in range(till):
			print(1, end=' ')
		return
	print(2)
	numbers_till_n = [True for i in range(n + 1)]
	initial_value = 2
	while initial_value ** 2 <= n:
		if numbers_till_n[initial_value]:
			for i in range(initial_value ** 2, n + 1, initial_value):
				numbers_till_n[i] = False
		initial_value += 1
	for i in range(2, till + 2):
		if numbers_till_n[i]:
			print(1, end=' ')
		else:
			print(2, end=' ')
	return
sieve(10 ** 5 + 2, int(stdin.readline()))


import math

def main():
	n = int(input())
	sieve = [True] * 100005
	sieve[0] = False
	sieve[1] = False
	for i in range(2, int(math.sqrt(100005)) + 1):
		if sieve[i]:
			for j in range(2 * i, 100005, i):
				sieve[j] = False
	if n == 1:
		print('1\n1')
	elif n == 2:
		print('1\n1 1')
	else:
		print('2')
		for i in range(2, n + 2):
			if sieve[i]:
				print('1', end=' ')
			else:
				print('2', end=' ')
main()


n = int(input())
a = [0 for i in range(n + 2)]
color = 1
for i in range(2, n + 2):
	if a[i] == 0:
		a[i] = 1
		for j in range(i * i, n + 2, i):
			a[j] = a[i] + 1
			color = max(color, a[j])
print(color)
for i in a[2:]:
	print(i, end=' ')


p = 10 ** 5 + 2

def Sieve():
	l = [True] * p
	i = 2
	while i * i <= p:
		if l[i]:
			for j in range(2 * i, p, i):
				l[j] = False
		i += 1
	return l
isprime = Sieve()
n = int(input())
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print(1, 1)
else:
	print(2)
	for i in range(2, n + 2):
		if isprime[i]:
			print(1, end=' ')
		else:
			print(2, end=' ')


n = int(input())
primes = [True] * (n + 2)
for i in range(2, (n + 1) // 2 + 1):
	for j in range(2, (n + 1) // i + 1):
		primes[i * j] = False
if n <= 2:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	if primes[i]:
		print(1, end=' ')
	else:
		print(2, end=' ')


import math as mt
import sys, string, bisect
input = sys.stdin.readline
from collections import deque
L = lambda : list(map(int, input().split()))
Ls = lambda : list(input().split())
M = lambda : map(int, input().split())
I = lambda : int(input())
MAXN = 10 ** 5 + 5
spf = [0 for i in range(MAXN)]

def sieve():
	spf[1] = 1
	for i in range(2, MAXN):
		spf[i] = i
	for i in range(4, MAXN, 2):
		spf[i] = 2
	for i in range(3, mt.ceil(mt.sqrt(MAXN))):
		if spf[i] == i:
			for j in range(i * i, MAXN, i):
				if spf[j] == j:
					spf[j] = i
sieve()
n = I()
if n < 3:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	if spf[i] == i:
		print('1', end=' ')
	else:
		print('2', end=' ')


n = int(input())
prime = [True] * (n + 2)
prime[0] = prime[1] = False
for m in range(2, n + 2):
	if prime[m]:
		for i in range(2 * m, n + 2, m):
			prime[i] = False
print('2' if n > 2 else '1')
colors = ['1' if prime[m] else '2' for m in range(2, n + 2)]
print(' '.join(colors))


import sys
fin = sys.stdin
fout = sys.stdout
n = int(fin.readline())
colors = [1] * n
allCount = 1
for i in range(2, n + 2):
	if colors[i - 2] == 1 and i * i <= n + 1:
		allCount += 1
		for j in range(i * i, n + 2, i):
			colors[j - 2] = 2
fout.write(str(max(colors)) + '\n')
fout.write(' '.join(map(str, colors)))


n = int(input())
isp = [1] * (n + 2)
for i in range(2, n + 2):
	if isp[i] == 1:
		for j in range(i * i, n + 2, i):
			isp[j] = 2
print(1 if n <= 2 else 2)
print(' '.join((str(isp[i]) for i in range(2, n + 2))))


import sys
import collections
from collections import Counter
import itertools
import math
import timeit

def sieve(n):
	if n < 2:
		return list()
	prime = [True for _ in range(n + 1)]
	p = 3
	while p * p <= n:
		if prime[p]:
			for i in range(p * 2, n + 1, p):
				prime[i] = False
		p += 2
	r = [2]
	for p in range(3, n + 1, 2):
		if prime[p]:
			r.append(p)
	return r

def divs(n, start=1):
	divisors = []
	for i in range(start, int(math.sqrt(n) + 1)):
		if n % i == 0:
			if n / i == i:
				divisors.append(i)
			else:
				divisors.extend([i, n // i])
	return divisors

def divn(n, primes):
	divs_number = 1
	for i in primes:
		if n == 1:
			return divs_number
		t = 1
		while n % i == 0:
			t += 1
			n //= i
		divs_number *= t

def flin(d, x, default=-1):
	left = right = -1
	for i in range(len(d)):
		if d[i] == x:
			if left == -1:
				left = i
			right = i
	if left == -1:
		return (default, default)
	else:
		return (left, right)

def ceil(n, k):
	return n // k + (n % k != 0)

def ii():
	return int(input())

def mi():
	return map(int, input().split())

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

def lcm(a, b):
	return abs(a * b) // math.gcd(a, b)

def prr(a, sep=' '):
	print(sep.join(map(str, a)))

def dd():
	return collections.defaultdict(int)

def ddl():
	return collections.defaultdict(list)
n = ii()
d = sieve(n + 1)
res = [2] * n
for i in d:
	res[i - 2] = 1
print(2 if n > 2 else 1)
prr(res)


def soe(n):
	temp = []
	prime = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p * p, n + 1, p):
				prime[i] = False
		p += 1
	for p in range(2, n + 1):
		if prime[p]:
			temp.append(p)
	return temp
n = int(input())
temp = soe(n + 1)
temp = set(temp)
if len(temp) == 0:
	print(1)
	for i in range(2, n + 2):
		print(1, end=' ')
elif n < 3:
	print(1)
	for i in range(n):
		print(1, end=' ')
else:
	print(2)
	for i in range(2, n + 2):
		if i in temp:
			print(1, end=' ')
		else:
			print(2, end=' ')


num = [0] * 100009
n = int(input())
m = 1
for i in range(2, n + 2, 1):
	if num[i] == 0:
		num[i] = 1
		for j in range(i + i, n + 2, i):
			num[j] = 2
			m = 2
print(m)
for i in range(2, n + 2, 1):
	print(num[i], end=' ')


def get_primes(n):
	m = n + 2
	numbers = ['1'] * m
	for i in range(2, int(n ** 0.5 + 1)):
		if numbers[i] == '1':
			for j in range(i * i, m, i):
				numbers[j] = '2'
	return numbers[2:]
entrada = int(input())
if entrada == 1:
	print('1\n1')
elif entrada == 2:
	print('1\n1 1')
elif entrada == 3:
	print('2\n1 1 2')
else:
	print('2')
	print(' '.join(get_primes(entrada)))


n = int(input())
res = []
for i in range(n):
	u = i + 2
	if u == 2:
		res.append(1)
	else:
		e = int(u ** 0.5)
		lock = 0
		for j in range(2, e + 1):
			if u % j == 0:
				lock = 1
				break
		if lock == 1:
			res.append(2)
		else:
			res.append(1)
print(len(set(res)))
print(*res)


n = int(input())
l = [-1 for i in range(n)]

def evklid(a):
	for i in range(2, int(a ** 0.5) + 1):
		if a % i == 0:
			return i
	return 0
p = 2
for i in range(2, n + 2):
	d = evklid(i)
	if d == 0:
		l[i - 2] = 1
	else:
		l[i - 2] = 2
print(len(set(l)))
print(*l)


from collections import deque

def solve(x):
	if x <= 1:
		return False
	if x <= 3:
		return True
	if x % 2 == 0 or x % 3 == 0:
		return False
	i = 5
	while i * i <= x:
		if x % i == 0 or x % (i + 2) == 0:
			return False
		i += 6
	return True
n = int(input())
arr = deque()
for i in range(1, n + 1):
	arr.append(i + 1)
cnt = 0
res = deque()
for i in range(n):
	if solve(arr[i]) == False:
		cnt += 1
		res.append(2)
	else:
		res.append(1)
if cnt > 0:
	print(2)
	print(*res)
else:
	print(1)
	print(*res)


n = int(input())
a = [0] * (n + 2)

def max(a, b):
	if a > b:
		return a
	return b
mx = 1
for i in range(2, n + 2):
	if a[i]:
		mx = 2
		a[i] = 2
		continue
	j = i
	c = 1
	while j <= n + 1:
		a[j] += 1
		j += i
print(mx)
for i in range(2, n + 2):
	print(a[i], end=' ')


import math

def is_prime(n):
	raiz = math.floor(math.sqrt(n))
	if n == 2 or n == 3:
		return True
	for i in range(2, raiz + 1):
		if n % i == 0:
			return False
	return True
n = int(input())
primos = set()
count = 1
salida = ''
for i in range(2, n + 2):
	if is_prime(i):
		salida += '1 '
	else:
		salida += '2 '
		count = 2
print(count)
print(salida)


int_inp = lambda : int(input())
strng = lambda : input().strip()
strl = lambda : list(input().strip())
mul = lambda : map(int, input().strip().split())
mulf = lambda : map(float, input().strip().split())
seq = lambda : list(map(int, input().strip().split()))
import math
from collections import Counter, defaultdict
n = int(input()) + 1
a = [1] * (n + 1)
a[0] = 2
a[1] = 2
for i in range(2, n + 1):
	if a[i] == 1:
		for j in range(2, n // i + 1):
			a[i * j] = 2
print(1 if n == 2 or n == 3 else 2)
print(*a[2:])


import sys
n = int(input())
A = [True] * (n + 2)
found = False

def solve():
	for i in range(2, n + 2):
		if A[i] == True:
			for j in range(i + i, n + 2, i):
				A[j] = False
solve()
if n > 2:
	print(2)
else:
	print(1)
for i in range(2, n + 2):
	if A[i] == True:
		print(1, end=' ')
	else:
		print(2, end=' ')


def is_prime(x):
	k = 2
	while k * k <= x:
		if x % k == 0:
			return False
		k += 1
	return True
n = int(input())
col = 1
ans = [1] * n
for i in range(2, n + 2):
	if not is_prime(i):
		col = 2
		ans[i - 2] = 2
print(col)
print(*ans)


import sys
sys.setrecursionlimit(10000000)
mod = 10 ** 9 + 7
digl = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
ii = lambda : int(input())
si = lambda : input()
dgl = lambda : list(map(int, input()))
f = lambda : map(int, input().split())
il = lambda : list(map(int, input().split()))
ls = lambda : list(input())
n = ii()
l = [i for i in range(2, n + 2)]
lc = []

def isprime(n):
	return any((n % i == 0 for i in range(2, int(n ** 0.5) + 1)))
for i in l:
	lc.append(isprime(i) + 1)
print(max(lc))
print(*lc)


n = int(input())
primes = [0] * (n + 2)
res = []
for i in range(2, n + 2):
	if primes[i] == 0:
		res.append(1)
		for j in range(i, n + 2, i):
			primes[j] = 1
	else:
		res.append(2)
if n < 3:
	print(1)
else:
	print(2)
print(' '.join(map(str, res)))


import math
n = int(input())
if n < 3:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	sq = int(math.sqrt(i)) + 1
	for j in range(2, sq):
		if i % j == 0:
			print(2, end=' ')
			break
	else:
		print(1, end=' ')


import timeit

def seive(n):
	prime = [True for i in range(n + 2)]
	prime[1] = False
	prime[0] = False
	for p in range(2, int(n ** 0.5) + 1):
		if prime[p]:
			for i in range(p * 2, n + 1, p):
				prime[i] = False
	return prime
n = int(input())
primes = seive(n + 2)
if n > 2:
	print('2')
else:
	print('1')
for i in range(2, n + 2):
	if primes[i] == True:
		primes[i] = 1
	else:
		primes[i] = 2
print(' '.join([str(primes[i]) for i in range(2, n + 2)]))


n = int(input())
sieve = [0 for x in range(n + 5)]
for i in range(2, n + 2):
	if sieve[i] is 0:
		j = 2 * i
		while j <= n + 1:
			sieve[j] = 1
			j += i
if n > 2:
	print(2)
else:
	print(1)
for s in range(2, n + 2):
	if sieve[s] is 0:
		print(1, end=' ')
	else:
		print(2, end=' ')


n = int(input())
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print(1, 1)
else:
	print(2)
	np = [False for i in range(n + 1 + 1)]
	for i in range(2, n + 1 + 1):
		if np[i]:
			print(2, end=' ')
		else:
			print(1, end=' ')
			for j in range(i + i, n + 1 + 1, i):
				np[j] = True
	print()


sieve = [False for _ in range(100005)]
n = int(input())
for i in range(2, n + 2):
	if not sieve[i]:
		j = 2 * i
		while j <= n + 1:
			sieve[j] = True
			j += i
if n > 2:
	print('2')
else:
	print('1')
for i in range(2, n + 2):
	print('1' if not sieve[i] else '2', end=' ')


x = [0] * 100010
for i in range(2, 100010):
	if x[i] == 0:
		j = 2 * i
		while j < 100010:
			x[j] = 1
			j += i
n = int(input())
if n <= 2:
	print(1)
	if n == 1:
		print(1)
	else:
		print(1, 1)
	exit()
print(2)
for i in range(2, n + 2):
	if x[i] == 0:
		print(1, end=' ')
	else:
		print(2, end=' ')
print()


n = int(input())
li = [0] * (n + 2)
li[0] = li[1] = 10 ** 6
for i in range(2, n + 1 // 2 + 1):
	if li[i] == 0:
		for j in range(i * 2, n + 2, i):
			li[j] += 1
value = n + 2 - li.count(0) - 2
if value >= 1:
	value = 2
else:
	value = 1
print(value)
for i in range(2, n + 2):
	if li[i] == 0:
		print(1, end=' ')
	else:
		print(2, end=' ')


n = int(input())
p = [1] * (n + 2)
if n <= 2:
	print(1)
else:
	print(2)
for i in range(2, n + 2):
	if p[i] == 1:
		for j in range(2, (n + 1) // i + 1):
			p[i * j] = 2
print(*p[2:n + 2])


n = int(input())
l = [1] * 1000001
l[0] = 0
l[1] = 0
for i in range(2, 1000001):
	if l[i] == 1:
		for j in range(i * i, 1000001, i):
			l[j] = 2
if n > 2:
	print(2)
else:
	print(1)
print(*l[2:n + 2])


from math import sqrt

class Solution:

	def countPrimes(self, n):
		prime_array = [1] * (n + 2)
		count = 0
		for i in range(2, (n + 2) // 2 + 1):
			if prime_array[i] == 1:
				for j in range(2, (n + 1) // i + 1):
					if prime_array[i * j] < 2:
						prime_array[i * j] += 1
		print(max(prime_array))
		for i in range(2, n + 2):
			print(prime_array[i], end=' ')
val = int(input())
a = Solution()
a.countPrimes(val)


from math import sqrt
n = int(input())
nums = [1] * n
for i in range(2, n + 2):
	if nums[i - 2]:
		for j in range(2, (n + 1) // i + 1):
			nums[i * j - 2] = 0
if n > sum(nums):
	print(2)
else:
	print(1)
for i in range(n):
	if nums[i]:
		print(1, end=' ')
	else:
		print(2, end=' ')


import sys
n = int(input())
col = [1 for i in range(n + 2)]
curprime = 1
ans = 0
if n <= 2:
	print(1)
	for i in range(n):
		print(1, end=' ')
	return
while True:
	prime = curprime + 1
	while prime <= n + 1 and col[prime] == 2:
		prime += 1
	if prime >= n + 1:
		break
	for i in range(prime + prime, n + 2, prime):
		col[i] = 2
	curprime = prime
print(2)
for i in range(2, n + 2):
	print(col[i], end=' ')


def Sieve(n):
	l = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if l[p]:
			for i in range(p * p, n + 1, p):
				l[i] = False
		p += 1
	for i in range(n + 1):
		if l[i]:
			l[i] = 1
		else:
			l[i] = 2
	return l
n = int(input())
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print(1, 1)
else:
	print(2)
	print(*Sieve(n + 1)[2:])


from typing import List
import math

class Solution:

	def prime_factors(self, n) -> int:
		f_map = {}
		self.smallest_prime_factor = [-1] * (n + 2)
		self.primes_or_not = [1] * (n + 2)
		self.primes_or_not[1] = 0
		for i in range(2, int(math.sqrt(n)) + 1):
			if self.primes_or_not[i] == 1:
				j = i
				while i * j <= n:
					if self.primes_or_not[i * j] == 1:
						self.primes_or_not[i * j] = 0
					j += 1
		self.primes = [i for i in range(2, n + 1) if self.primes_or_not[i] == 1]
sol = Solution()
sol.prime_factors(10 ** 5 + 2)
n = int(input())
ans = []
for i in range(2, n + 2):
	val = 1 if sol.primes_or_not[i] == 1 else 2
	ans.append(str(val))
if n <= 2:
	print(1)
else:
	print(2)
print(' '.join(ans))


class node:

	def __init__(self):
		self.data = 1
		self.boo = True

def clr_count(n):
	li = []
	for z in range(n + 2):
		li.append(node())
	c = 1
	for i in range(2, int((n + 2) ** (1 / 2)) + 1):
		if li[i].boo == True:
			for j in range(i * i, len(li), i):
				li[j].boo = False
				if li[i].data == li[j].data:
					if c == li[j].data:
						c += 1
				li[j].data = c
	print(c)
	for i in li[2:]:
		print(i.data, end=' ')
n = int(input())
clr_count(n)


n = int(input())
l = list(range(2, n + 2))
l = [0, 0] + l
for i in range(2, n + 2):
	if 2 * l[i] > n + 1 or (i != 2 and l[i] == 2):
		continue
	for j in range(2 * l[i], n + 2, l[i]):
		if l[j] > 2:
			l[j] = 2
for i in range(2, n + 2):
	if l[i] > 2:
		l[i] = 1
l[2] = 1
print(len(set(l)) - 1)
for i in range(2, n + 2):
	print(l[i], end=' ')


import math
n = int(input())
prime_num = [1] * (n + 2)
prime_num[1] = 0
for i in range(2, math.ceil(n ** 0.5) + 1):
	if prime_num[i]:
		for j in range(i ** 2, n + 2, i):
			prime_num[j] = 0
if n > 2:
	print(2)
	for i in range(2, n + 2):
		if prime_num[i]:
			print(1, end=' ')
		else:
			print(2, end=' ')
else:
	print(1)
	for i in range(n):
		print(1, end=' ')


n = int(input())
C = [1] * n
for i in range(2, 1 + int((n + 1) ** 0.5)):
	for j in range(i * i, n + 2, i):
		C[j - 2] = 2
print(2 - (n < 3))
print(*C)


n = int(input())
p = [0, 1] + [i + 1 for i in range(1, n + 1)]
ans = [0] + [1] * (n + 1)
m = 2
p[1] = 0
while m < n:
	if p[m] != 0:
		j = m * 2
		ans[m] = 1
		c = 2
		while j <= n + 1:
			p[j] = 0
			if ans[j] == 1:
				ans[j] = c
			j += m
	m += 1
print(max(ans[2:]))
print(*ans[2:])


n = int(input())
a = [True] * (n + 2)
a[0] = a[1] = False
for i in range(2, n + 2):
	if a[i] == True:
		m = 2 * i
		while m < n + 2:
			a[m] = False
			m = m + i
na = []
for i in range(2, n + 2):
	if a[i] == True:
		na.append(1)
	else:
		na.append(2)
if n > 2:
	print(2)
else:
	print(1)
for i in range(len(na)):
	print(na[i], end=' ')


def SieveOfEratosthenes(n):
	prime = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p * 2, n + 1, p):
				prime[i] = False
		p += 1
	nuPrime = prime[2:n]
	return nuPrime
n = int(input())
prime = SieveOfEratosthenes(n + 2)
if n == 1:
	print(1)
	print(1)
elif n == 2:
	print(1)
	print('1 1')
else:
	print(2)
	for i in range(n):
		if prime[i]:
			print('1 ', end='')
		else:
			print('2 ', end='')


import math as ma
n = int(input())
maxN = 100001
primes = [0] * (n + 2)
color = [0] * (n + 2)
c = 1
for p in range(2, n + 2):
	if primes[p] == 0:
		for l in range(p, n + 2 - p, p):
			primes[p + l] = 1
ncolors = 1
for p in range(2, n + 2):
	if primes[p] == 0:
		color[p] = 1
	else:
		color[p] = 2
		ncolors = 2
print(ncolors)
for p in range(2, n + 2):
	print(color[p], end=' ')


import sys
input = sys.stdin.readline

def ceil(x):
	if x != int(x):
		x = int(x) + 1
	return x

def factorial(x, m):
	val = 1
	while x > 0:
		val = val * x % m
		x -= 1
	return val

def fact(x):
	val = 1
	while x > 0:
		val *= x
		x -= 1
	return val

def swaparr(arr, a, b):
	temp = arr[a]
	arr[a] = arr[b]
	arr[b] = temp

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

def lcm(a, b):
	return a * b // gcd(a, b)

def nCr(n, k):
	if k > n:
		return 0
	if k > n - k:
		k = n - k
	res = 1
	for i in range(k):
		res = res * (n - i)
		res = res / (i + 1)
	return int(res)

def upper_bound(a, x, lo=0, hi=None):
	if hi == None:
		hi = len(a)
	while lo < hi:
		mid = (lo + hi) // 2
		if a[mid] < x:
			lo = mid + 1
		else:
			hi = mid
	return lo

def primefs(n):
	primes = {}
	while n % 2 == 0 and n > 0:
		primes[2] = primes.get(2, 0) + 1
		n = n // 2
	for i in range(3, int(n ** 0.5) + 2, 2):
		while n % i == 0 and n > 0:
			primes[i] = primes.get(i, 0) + 1
			n = n // i
	if n > 2:
		primes[n] = primes.get(n, 0) + 1
	return primes

def power(x, y, p):
	res = 1
	x = x % p
	if x == 0:
		return 0
	while y > 0:
		if y & 1 == 1:
			res = res * x % p
		y = y >> 1
		x = x * x % p
	return res

def swap(a, b):
	temp = a
	a = b
	b = temp
	return (a, b)

def find(x, link):
	p = x
	while p != link[p]:
		p = link[p]
	while x != p:
		nex = link[x]
		link[x] = p
		x = nex
	return p

def union(x, y, link, size):
	x = find(x, link)
	y = find(y, link)
	if size[x] < size[y]:
		(x, y) = swap(x, y)
	if x != y:
		size[x] += size[y]
		link[y] = x

def sieve(n):
	prime = [True for i in range(n + 1)]
	(prime[0], prime[1]) = (False, False)
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p * p, n + 1, p):
				prime[i] = False
		p += 1
	return prime

def phi(n):
	result = n
	p = 2
	while p * p <= n:
		if n % p == 0:
			while n % p == 0:
				n = n // p
			result = result * (1.0 - 1.0 / float(p))
		p = p + 1
	if n > 1:
		result = result * (1.0 - 1.0 / float(n))
	return int(result)
MAXN = int(100000.0 + 5)

def spf_sieve():
	spf[1] = 1
	for i in range(2, MAXN):
		spf[i] = i
	for i in range(4, MAXN, 2):
		spf[i] = 2
	for i in range(3, ceil(MAXN ** 0.5), 2):
		if spf[i] == i:
			for j in range(i * i, MAXN, i):
				if spf[j] == j:
					spf[j] = i
spf = [0 for i in range(MAXN)]

def factoriazation(x):
	res = []
	for i in range(2, int(x ** 0.5) + 1):
		while x % i == 0:
			res.append(i)
			x //= i
	if x != 1:
		res.append(x)
	return res

def factors(n):
	res = []
	for i in range(1, int(n ** 0.5) + 1):
		if n % i == 0:
			res.append(i)
			res.append(n // i)
	return list(set(res))

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

def float_array():
	return list(map(float, input().strip().split()))

def str_array():
	return input().strip().split()
MOD = int(1000000000.0) + 7
CMOD = 998244353
INF = float('inf')
NINF = -float('inf')
from itertools import permutations
import math
from bisect import bisect_left

def solve():
	n = int(input())
	if n <= 2:
		print(1)
		print(*[1] * n)
		return
	primes = sieve(n + 1)
	val = []
	for x in primes[2:]:
		if x:
			val.append(1)
		else:
			val.append(2)
	print(2)
	print(*val)
for _ in range(1):
	solve()


import math
n = int(input())
is_Prime = [True for i in range(n + 2)]
limit = int(math.sqrt(len(is_Prime)))

def displaySieve():
	for i in range(len(is_Prime)):
		print(i, is_Prime[i])
for i in range(2, limit + 1, 1):
	if is_Prime[i]:
		for j in range(i + i, len(is_Prime), i):
			is_Prime[j] = False
output = []
if False in is_Prime:
	print(2)
	for i in range(2, len(is_Prime), 1):
		if is_Prime[i]:
			output.append('1')
		else:
			output.append('2')
else:
	print('1')
	for i in range(2, len(is_Prime), 1):
		output.append('1')
print(' '.join(output))


n = int(input())
ans = [1 for _ in range(n + 2)]
for i in range(2, int(n ** 0.5) + 2):
	if ans[i] == 2:
		continue
	for j in range(i * 2, n + 2, i):
		ans[j] = 2
print(len(set(ans)))
print(*ans[2:])


n = int(input())
if n <= 2:
	print(1)
else:
	print(2)
n += 2
result = ['1'] * n
for i in range(2, int(n ** 0.5) + 1):
	j = 0
	while i ** 2 + j * i < n:
		result[i ** 2 + j * i] = '2'
		j += 1
print(' '.join(result[2:]))


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')

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()]

def prime(n):
	color = [1] * (n + 1)
	c = 1
	pr = [True] * (n + 1)
	pr[0] = False
	pr[1] = False
	p = 2
	while p * p <= n:
		if pr[p] == True:
			color[p] = c
			ct = 2
			for j in range(p * p, n + 1, p):
				color[j] = ct
				pr[j] = False
		p += 1
	return color[2:]
n = Int()
ans = prime(n + 1)
print(max(ans))
print(*ans)


userInput = int(input())

def colorPrimeSieve(n):
	x = [0] * (n - 1)
	primes = []
	for i in range(2, n + 1):
		if x[i - 2] == 0:
			x[i - 2] = 1
			for j in range(i, int(n / i) + 1):
				x[i * j - 2] = 2
	return x
primes = colorPrimeSieve(userInput + 1)
if userInput > 2:
	print(2)
else:
	print(1)
outputColor = ''
for x in primes:
	outputColor = outputColor + str(x) + ' '
print(outputColor)


import math

def soe(n):
	is_prime = [True for i in range(n + 2)]
	is_prime[0] = False
	is_prime[1] = False
	color = [1 for i in range(n + 2)]
	for i in range(2, n + 2):
		if is_prime[i]:
			for j in range(2 * i, n + 2, i):
				is_prime[j] = False
				color[j] = 2
	return color
colors = soe(pow(10, 5))
n = int(input())
if n > 2:
	print(2)
else:
	print(1)
print(*colors[2:n + 2])


def is_prime(n):
	i = 2
	while i * i <= n:
		if n % i == 0:
			return 2
		i += 1
	return 1
n = int(input())
ans = []
for i in range(2, n + 2):
	ans.append(is_prime(i))
print(len(set(ans)))
print(*ans)