В Берляндском государственном университете локальная сеть между серверами не всегда работает без ошибок. При передаче двух одинаковых сообщений подряд возможна ошибка, в результате которой эти два сообщения сливаются в одно. При таком слиянии конец первого сообщения совмещается с началом второго. Конечно, совмещение может происходить только по одинаковым символам. Длина совмещения должна быть положительным числом, меньшим длины текста сообщения. 

Например, при передаче двух сообщений «abrakadabra» подряд возможно, что оно будет передано с ошибкой описанного вида, и тогда будет получено сообщение вида «abrakadabrabrakadabra» или «abrakadabrakadabra» (в первом случае совмещение произошло по одному символу, а во втором — по четырем).

По полученному сообщению t определите, возможно ли, что это результат ошибки описанного вида работы локальной сети, и если возможно, определите возможное значение s. 

Не следует считать ошибкой ситуацию полного наложения друга на друга двух сообщений. К примеру, если получено сообщение «abcd», следует считать, что в нём ошибки нет. Аналогично, простое дописывание одного сообщения вслед за другим не является признаком ошибки. Например, если получено сообщение «abcabc», следует считать, что в нём ошибки нет.


-----Входные данные-----

В единственной строке выходных данных следует непустая строка t, состоящая из строчных букв латинского алфавита. Длина строки t не превосходит 100 символов.


-----Выходные данные-----

Если сообщение t не может содержать ошибки, выведите «NO» (без кавычек) в единственную строку выходных данных.

В противном случае в первой строке выведите «YES» (без кавычек), а в следующей строке выведите строку s — возможное сообщение, которое могло привести к ошибке. Если возможных ответов несколько, разрешается вывести любой из них.


-----Примеры-----
Входные данные
abrakadabrabrakadabra

Выходные данные
YES
abrakadabra

Входные данные
acacacaca

Выходные данные
YES
acaca

Входные данные
abcabc

Выходные данные
NO

Входные данные
abababab

Выходные данные
YES
ababab

Входные данные
tatbt

Выходные данные
NO



-----Примечание-----

Во втором примере подходящим ответом также является строка acacaca.

Source: codeforces | Difficulty: MEDIUM


Solutions:
s = input()
t = 0
if len(s) % 2 == 0:
	n = (len(s) - 1) // 2 + 1
else:
	n = (len(s) - 1) // 2
for i in range(n, len(s) - 1):
	a = i
	b = len(s) - i - 1
	if s[:a + 1] == s[b:]:
		print('YES')
		print(s[:a + 1])
		t = 1
		break
if t == 0:
	print('NO')


a = input()
if len(a) // 2 * 2 == len(a):
	k = 1
	p = 0
else:
	k = 0
	p = 1
for i in range(k, len(a) // 2):
	b = a[:len(a) // 2 + i + p]
	c = a[len(a) // 2 - i:]
	if c == b:
		print('YES')
		print(c)
		break
else:
	print('NO')


s = input()
n = len(s)
for i in range(n):
	if i * 2 > n and s[:i] == s[-i:]:
		print('YES')
		print(s[:i])
		break
else:
	print('NO')


a = input()
flag = 0
if len(a) % 2 == 1:
	q = len(a) // 2
	w = q
else:
	q = len(a) // 2 - 1
	w = len(a) // 2
while q > 0 and flag == 0:
	if a[:w + 1] == a[q:]:
		s = a[:w + 1]
		flag = 1
	else:
		q -= 1
		w += 1
if flag:
	print('YES')
	print(s)
else:
	print('NO')


s = input()
n = len(s)
for i in range(n // 2 + 1, n):
	if s[0:i] == s[n - i:n]:
		print('YES')
		print(s[0:i])
		return
print('NO')


def main():
	s = input()
	for k in range(len(s) // 2 + 1, len(s)):
		if s[:k] == s[len(s) - k:]:
			print('YES', s[:k], sep='\n')
			return 0
	print('NO')
main()


inp = input()
n = len(inp) // 2 + 1
t = False
for i in range(n, len(inp)):
	if inp[:i] == inp[-i:]:
		t = True
		n = i
		break
if t:
	print('YES')
	print(inp[:n])
else:
	print('NO')


s = input()
f = 0
for i in range(1, len(s)):
	sl = s[0:i]
	for j in range(0, i):
		if sl == s[j:len(s)]:
			print('YES')
			print(sl)
			f = 1
			break
	if f == 1:
		break
if f == 0:
	print('NO')


def sol():
	s = input()
	for i in range(len(s)):
		if 2 * i > len(s) and s[0:i] == s[len(s) - i:len(s)]:
			print('YES\n', s[0:i], sep='')
			return
	print('NO')
sol()


a = input()
n = len(a)
z = list((0 for mas in range(n)))
z[0] = n
L = R = 0
for i in range(1, n):
	if i <= R:
		if z[i - L] < R - i + 1:
			z[i] = z[i - L]
		else:
			j = 1
			while R + j < n and a[R + j] == a[R - i + j]:
				j += 1
			z[i] = R - i + j
			L = i
			R += j - 1
	else:
		j = 0
		while i + j < n and a[i + j] == a[j]:
			j += 1
		z[i] = j
		L = i
		R = i + j - 1
q = n // 2
if n % 2 == 0:
	q -= 1
u = -1
for i in range(1, q + 1):
	if z[i] + i == n:
		u = i
if u == -1:
	print('NO')
else:
	print('YES')
	print(a[u:])


s = input()
x = len(s) // 2 + 1
z = 0
for i in range(x):
	a = s[0:x + i]
	if s.startswith(a) and s.endswith(a) and (len(a) < len(s)):
		print('YES')
		print(a)
		z += 1
		break
	else:
		pass
if z == 0:
	print('NO')


st = input()
for i in range(1, len(st)):
	if st[:i] == st[len(st) - i:] and 2 * len(st[:i]) > len(st):
		print('YES', st[:i], sep='\n', end='')
		return
print('NO')


s = input()
l = len(s) // 2
o = 0
if len(s) % 2 != 0:
	o = 1
for i in range(1, l):
	if s[:l + i] == s[o + l - i:]:
		print('YES')
		print(s[:i + l])
		break
else:
	print('NO')


n = input()
c = len(n) // 2
for i in range(c - 1):
	if n[len(n) - c - 1 - i:] == n[:c + 1 + i]:
		print('YES')
		print(n[:c + i + 1])
		break
else:
	print('NO')


s = input()
size = len(s) // 2 + 1
for i in range(size, len(s)):
	if s[:i] == s[-i:]:
		print('YES')
		print(s[:i])
		break
else:
	print('NO')