Kevin and Nicky Sun have invented a new game called Lieges of Legendre. In this game, two players take turns modifying the game state with Kevin moving first. Initially, the game is set up so that there are n piles of cows, with the i-th pile containing a_{i} cows. During each player's turn, that player calls upon the power of Sunlight, and uses it to either:

  Remove a single cow from a chosen non-empty pile.  Choose a pile of cows with even size 2·x (x > 0), and replace it with k piles of x cows each. 

The player who removes the last cow wins. Given n, k, and a sequence a_1, a_2, ..., a_{n}, help Kevin and Nicky find the winner, given that both sides play in optimal way.


-----Input-----

The first line of the input contains two space-separated integers n and k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 10^9).

The second line contains n integers, a_1, a_2, ... a_{n} (1 ≤ a_{i} ≤ 10^9) describing the initial state of the game. 


-----Output-----

Output the name of the winning player, either "Kevin" or "Nicky" (without quotes).


-----Examples-----
Input
2 1
3 4

Output
Kevin

Input
1 2
3

Output
Nicky



-----Note-----

In the second sample, Nicky can win in the following way: Kevin moves first and is forced to remove a cow, so the pile contains two cows after his move. Next, Nicky replaces this pile of size 2 with two piles of size 1. So the game state is now two piles of size 1. Kevin then removes one of the remaining cows and Nicky wins by removing the other.

Difficulty: HARD
Tags: Game theory

Mathematics

Starter code:

Solutions:
G_EVEN = {0: 0, 1: 1, 2: 2}
G_ODD = {0: 0, 1: 1, 2: 0, 3: 1}

def grundy(k, ai):
	if k % 2:
		if ai <= 3:
			return G_ODD[ai]
		elif ai % 2:
			return 0
		else:
			p = 0
			j = ai
			while not j & 1:
				p += 1
				j >>= 1
			if j == 3:
				return 2 if p % 2 else 1
			else:
				return 1 if p % 2 else 2
			return 1 + p % 2
	elif ai <= 2:
		return G_EVEN[ai]
	else:
		return ~ai & 1

def nim_sum(ns):
	s = 0
	for ni in ns:
		s ^= ni
	return s

def winner(k, a):
	return bool(nim_sum((grundy(k, ai) for ai in a)))
(n, k) = map(int, input().split())
a = list(map(int, input().split()))
print('Kevin' if winner(k, a) else 'Nicky')


def grundy(n, k):
	if k % 2 == 0:
		if n <= 2:
			return n
		else:
			return n % 2 == 0
	elif n <= 4:
		return [0, 1, 0, 1, 2][n]
	elif n % 2 == 1:
		return 0
	else:
		return 2 if grundy(n // 2, k) == 1 else 1

def __starting_point():
	(n, k) = list(map(int, input().split()))
	xList = list(map(int, input().split()))
	res = 0
	for x in xList:
		res ^= grundy(x, k)
	print('Kevin' if res else 'Nicky')
__starting_point()


f = lambda : map(int, input().split())
(n, k) = f()
s = 0
for a in f():
	d = 0
	while a % (2 << d) == 0:
		d += 1
	x = a & 1 if a < 4 else 0 if a & 1 else 1 if (a == 3 << d) ^ d & 1 else 2
	y = a if a < 3 else a & 1 ^ 1
	s ^= x if k & 1 else y
print('Kevin' if s else 'Nicky')


def solve(x, k):
	if k % 2 == 0:
		if x <= 2:
			return x
		return (x + 1) % 2
	else:
		if x == 3 or x == 1:
			return 1
		if x % 2 == 1:
			return 0
		if x == 0 or x == 2:
			return 0
		twos = 1
		while x % 2 == 0:
			twos += 1
			x //= 2
		if x == 3:
			twos += 1
		return twos % 2 + 1
(n, k) = map(int, input().split())
A = list(map(int, input().split()))
x = 0
for a in A:
	x ^= solve(a, k)
if x == 0:
	print('Nicky')
else:
	print('Kevin')


from functools import reduce

def gao(x, y):
	if x == 1:
		return 1
	if x == 2:
		return (~y & 1) * 2
	if x == 3:
		return y & 1
	if x & 1:
		return 0
	if ~y & 1:
		return 1
	l = len(bin(x)) - bin(x).rfind('1') - 1
	if x >> l == 3:
		l += 1
	return 2 - l % 2
(n, k) = map(int, input().split())
s = reduce(lambda x, y: x ^ gao(y, k), map(int, [0] + input().split()))
if s:
	print('Kevin')
else:
	print('Nicky')