# 入力

s = eval(input())



# 処理

leftLen = len(s) // 2 # 文字列の長さの半分

left = s[:leftLen] # sの左半分



# leftの回文チェック

leftLenHalf = leftLen // 2

isPalindromeLeft = True

for i in range(0, leftLenHalf):

	if left[i] != left[leftLen - i - 1]:

		isPalindromeLeft = False



# 全体の回文チェック

right = s[leftLen * -1:] # sの右半分

isPalindrome = isPalindromeLeft and left == right



# 結果

result = "Yes" if isPalindrome else "No"



# 出力

print(result)

# 入力

s = eval(input())



# 処理

leftLen = len(s) // 2 # 文字列の長さの半分

left = s[:leftLen] # sの左半分



# leftの回文チェック

leftReverse = left[::-1]

isPalindromeLeft = left == leftReverse;



# 全体の回文チェック

right = s[leftLen * -1:] # sの右半分

isPalindrome = isPalindromeLeft and (left == right)



# 結果

result = "Yes" if isPalindrome else "No"



# 出力

print(result)

# 入力
s = eval(input())
# 処理
leftLen = len(s) // 2  # 文字列の長さの半分
left = s[:leftLen]  # sの左半分
# leftの回文チェック
leftLenHalf = leftLen // 2
isPalindromeLeft = True
for i in range(0, leftLenHalf):
    if left[i] != left[leftLen - i - 1]:
        isPalindromeLeft = False
# 全体の回文チェック
right = s[leftLen * -1 :]  # sの右半分
isPalindrome = isPalindromeLeft and left == right
# 結果
result = "Yes" if isPalindrome else "No"
# 出力
print(result)

# 入力
s = eval(input())
# 処理
leftLen = len(s) // 2  # 文字列の長さの半分
left = s[:leftLen]  # sの左半分
# leftの回文チェック
leftReverse = left[::-1]
isPalindromeLeft = left == leftReverse
# 全体の回文チェック
right = s[leftLen * -1 :]  # sの右半分
isPalindrome = isPalindromeLeft and (left == right)
# 結果
result = "Yes" if isPalindrome else "No"
# 出力
print(result)

-leftLenHalf = leftLen // 2 -isPalindromeLeft = True -for i in range(0, leftLenHalf): -    if left[i] != left[leftLen - i - 1]: -        isPalindromeLeft = False +leftReverse = left[::-1] +isPalindromeLeft = left == leftReverse -isPalindrome = isPalindromeLeft and left == right +isPalindrome = isPalindromeLeft and (left == right)