#include<iostream>
using namespace std;
template<typename E>class Node {
public :
E data;
Node * next;
Node(E it, Node *p = NULL) {
data = it; next = p;
}
Node(Node *p = NULL) {
next = p;
}
};
template<typename E> class LStack {
public :
Node<E> * head;
int cnt;
LStack() { head = NULL; cnt++; }
~LStack() {
while (head != NULL) {
Node<E> * p = head;
head = head->next;
delete p;
}
cnt = 0;
}
void push(const E& it) {
cnt++;
head = new Node<E>(it, head);
}
E pop() {
cnt--;
Node<E> *temp = head->next;
E it = head->data;
delete head;
head = temp;
return it;
}
int length() { return cnt; }
};
template<typename E> class LQueue {
public :
Node<E> * head;
Node<E> * tail;
int cnt;
LQueue() {
head = tail = new Node<E>();
cnt = 0;
}
~LQueue() {
while (head->next!=NULL) {
tail = head->next;
delete tail;
}
tail = head;
delete head;
cnt = 0;
}
void enqueue(E it) {
tail->next = new Node<E>(it, NULL);
tail = tail->next;
cnt++;
}
E dequeue() {
Node<E> * temp = head->next;
E it = temp->data;
if (temp == tail) tail = head;
cnt--;
head->next = temp->next;
delete temp;
return it;
}
int length() { return cnt; }
};
int main() {
char c;
LQueue<char> allchar;
LQueue<char> fronthalf;
LStack<char> rearhalf;
while ((c = cin.get()) != '\n')
allchar.enqueue(c);
//for (Node<char> *p = allchar.head->next; p != NULL; p = p->next)
// cout << p->data ;
int num = allchar.length();
int i;
for (i = 0; i < num / 2; i++)
fronthalf.enqueue(allchar.dequeue());
if (num % 2 != 0) {
allchar.dequeue(); i++;
}
for (; i < num; i++)
rearhalf.push(allchar.dequeue());
for ( i = 0; i < num / 2; i++)
if (fronthalf.dequeue() != rearhalf.pop())
break;
if (i == num / 2) cout << "TRUE";
else cout << "FALSE";
}