/* Problem Statement: https://w...content-available-to-author-only...j.com/problems/PALIN/
Author: striker
*/
#include<stdio.h>
#include<stdlib.h>
#include<inttypes.h>
#include<string.h>
#include<stdbool.h>
#include<assert.h>
#define STRING_LENGTH 1000002
bool check_palindrome(char[]);
bool check_all_nines(char[]);
void find_next_palindrome(char[]);
int main(void) {
uint64_t test;
while(test--) {
char number_base_10[STRING_LENGTH];
scanf("%s",number_base_10
); uint32_t string_len
= strlen(number_base_10
); if(check_all_nines(number_base_10)) {
for(uint32_t i=0;i<=string_len;++i) {
if(i == 0 || i == (string_len)) {
number_base_10[i] = '1';
} else {
number_base_10[i] = '0';
}
}
} else {
find_next_palindrome(number_base_10);
}
memset(number_base_10
,'\0',sizeof(char)*STRING_LENGTH
); }
return 0;
}
bool check_all_nines(char number[]) {
bool is_all_nines = true;
for(uint32_t i=0;number[i]!='\0';++i) {
if(!(number[i] == '9')) {
is_all_nines = false;
break;
}
}
return is_all_nines;
}
bool check_palindrome(char number[]) {
bool is_palindrome = true;
for(uint32_t start
= 0,end
= (strlen(number
) - 1);(start
< end
);++start
,--end
) { if(!(number[start] == number[end])) {
is_palindrome = false;
break;
}
}
return is_palindrome;
}
void find_next_palindrome(char number[]) {
uint32_t str_len
= strlen(number
); if(check_palindrome(number)) {
uint32_t start,mid,end;
start = 0;
end = str_len - 1;
mid = ((end - start) >> 1) + start;
for(start = mid,(end = (str_len & 1) ? mid : (mid + 1)); (start >= 0 && end < str_len) && (number[start] == '9'); --start,++end) {
number[end] = number[start] = '0';
}
if(start >= 0 && end < str_len) {
number[start]++;
number[end] = number[start];
}
} else {
uint32_t start,mid,end;
bool flag = false;
start = 0;
end = str_len - 1;
mid = ((end - start) >> 1) + start;
for(start = mid, end = ((str_len & 1) ? mid: (mid + 1)); (start >=0 && end < str_len) && (number[start] == number[end]); --start,++end);
if(number[start] < number[end]) {
flag = true;
number[end] = number[start];
}
if(flag) {
for(start = mid, end = ((str_len & 1) ? mid : (mid + 1)); (start >=0 && end < str_len) && (number[start] == '9'); --start,++end) {
number[end] = number[start] = '0';
}
if(start >=0 && end < str_len) {
number[start]++;
number[end] = number[start];
}
}
for(start = 0, end = str_len - 1; (start < end); ++start,--end) {
number[end] = number[start];
}
}
}
LyogIFByb2JsZW0gU3RhdGVtZW50OiBodHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmouY29tL3Byb2JsZW1zL1BBTElOLwogICAgQXV0aG9yOiBzdHJpa2VyCiovCgojaW5jbHVkZTxzdGRpby5oPgojaW5jbHVkZTxzdGRsaWIuaD4KI2luY2x1ZGU8aW50dHlwZXMuaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlPHN0ZGJvb2wuaD4KI2luY2x1ZGU8YXNzZXJ0Lmg+CgojZGVmaW5lIFNUUklOR19MRU5HVEggMTAwMDAwMgoKYm9vbCBjaGVja19wYWxpbmRyb21lKGNoYXJbXSk7CmJvb2wgY2hlY2tfYWxsX25pbmVzKGNoYXJbXSk7CnZvaWQgZmluZF9uZXh0X3BhbGluZHJvbWUoY2hhcltdKTsKCmludCBtYWluKHZvaWQpIHsKICAgIHVpbnQ2NF90IHRlc3Q7CiAgICBzY2FuZigiJSJTQ051NjQsJnRlc3QpOwogICAgYXNzZXJ0KHRlc3QgPiAwKTsKICAgIHdoaWxlKHRlc3QtLSkgewogICAgICAgIGNoYXIgbnVtYmVyX2Jhc2VfMTBbU1RSSU5HX0xFTkdUSF07CiAgICAgICAgc2NhbmYoIiVzIixudW1iZXJfYmFzZV8xMCk7CiAgICAgICAgdWludDMyX3Qgc3RyaW5nX2xlbiA9IHN0cmxlbihudW1iZXJfYmFzZV8xMCk7CiAgICAgICAgYXNzZXJ0KHN0cmluZ19sZW4gPiAwKTsKICAgICAgICBpZihjaGVja19hbGxfbmluZXMobnVtYmVyX2Jhc2VfMTApKSB7CiAgICAgICAgICAgIGZvcih1aW50MzJfdCBpPTA7aTw9c3RyaW5nX2xlbjsrK2kpIHsKICAgICAgICAgICAgICAgIGlmKGkgPT0gMCB8fCBpID09IChzdHJpbmdfbGVuKSkgewogICAgICAgICAgICAgICAgICAgIG51bWJlcl9iYXNlXzEwW2ldID0gJzEnOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBudW1iZXJfYmFzZV8xMFtpXSA9ICcwJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpbmRfbmV4dF9wYWxpbmRyb21lKG51bWJlcl9iYXNlXzEwKTsKICAgICAgICB9CiAgICAgICAgcHV0cyhudW1iZXJfYmFzZV8xMCk7CiAgICAgICAgbWVtc2V0KG51bWJlcl9iYXNlXzEwLCdcMCcsc2l6ZW9mKGNoYXIpKlNUUklOR19MRU5HVEgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCmJvb2wgY2hlY2tfYWxsX25pbmVzKGNoYXIgbnVtYmVyW10pIHsKICAgIGJvb2wgaXNfYWxsX25pbmVzID0gdHJ1ZTsKICAgIGZvcih1aW50MzJfdCBpPTA7bnVtYmVyW2ldIT0nXDAnOysraSkgewogICAgICAgIGlmKCEobnVtYmVyW2ldID09ICc5JykpIHsKICAgICAgICAgICAgaXNfYWxsX25pbmVzID0gZmFsc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBpc19hbGxfbmluZXM7Cn0KCmJvb2wgY2hlY2tfcGFsaW5kcm9tZShjaGFyIG51bWJlcltdKSB7CiAgICBib29sIGlzX3BhbGluZHJvbWUgPSB0cnVlOwogICAgZm9yKHVpbnQzMl90IHN0YXJ0ID0gMCxlbmQgPSAoc3RybGVuKG51bWJlcikgLSAxKTsoc3RhcnQgPCBlbmQpOysrc3RhcnQsLS1lbmQpIHsKICAgICAgICBpZighKG51bWJlcltzdGFydF0gPT0gbnVtYmVyW2VuZF0pKSB7CiAgICAgICAgICAgIGlzX3BhbGluZHJvbWUgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGlzX3BhbGluZHJvbWU7Cn0KCnZvaWQgZmluZF9uZXh0X3BhbGluZHJvbWUoY2hhciBudW1iZXJbXSkgewogICAgdWludDMyX3Qgc3RyX2xlbiA9IHN0cmxlbihudW1iZXIpOwogICAgaWYoY2hlY2tfcGFsaW5kcm9tZShudW1iZXIpKSB7CiAgICAgICAgdWludDMyX3Qgc3RhcnQsbWlkLGVuZDsKICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgZW5kID0gc3RyX2xlbiAtIDE7CiAgICAgICAgbWlkID0gKChlbmQgLSBzdGFydCkgPj4gMSkgKyBzdGFydDsKICAgICAgICBmb3Ioc3RhcnQgPSBtaWQsKGVuZCA9IChzdHJfbGVuICYgMSkgPyBtaWQgOiAobWlkICsgMSkpOyAoc3RhcnQgPj0gMCAmJiBlbmQgPCBzdHJfbGVuKSAmJiAobnVtYmVyW3N0YXJ0XSA9PSAnOScpOyAtLXN0YXJ0LCsrZW5kKSB7CiAgICAgICAgICAgIG51bWJlcltlbmRdID0gbnVtYmVyW3N0YXJ0XSA9ICcwJzsKICAgICAgICB9CiAgICAgICAgaWYoc3RhcnQgPj0gMCAmJiBlbmQgPCBzdHJfbGVuKSB7CiAgICAgICAgICAgIG51bWJlcltzdGFydF0rKzsKICAgICAgICAgICAgbnVtYmVyW2VuZF0gPSBudW1iZXJbc3RhcnRdOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdWludDMyX3Qgc3RhcnQsbWlkLGVuZDsKICAgICAgICBib29sIGZsYWcgPSBmYWxzZTsKICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgZW5kID0gc3RyX2xlbiAtIDE7CiAgICAgICAgbWlkID0gKChlbmQgLSBzdGFydCkgPj4gMSkgKyBzdGFydDsKICAgICAgICBmb3Ioc3RhcnQgPSBtaWQsIGVuZCA9ICgoc3RyX2xlbiAmIDEpID8gbWlkOiAobWlkICsgMSkpOyAoc3RhcnQgPj0wICYmIGVuZCA8IHN0cl9sZW4pICYmIChudW1iZXJbc3RhcnRdID09IG51bWJlcltlbmRdKTsgLS1zdGFydCwrK2VuZCk7CiAgICAgICAgaWYobnVtYmVyW3N0YXJ0XSA8IG51bWJlcltlbmRdKSB7CiAgICAgICAgICAgIGZsYWcgPSB0cnVlOwogICAgICAgICAgICBudW1iZXJbZW5kXSA9IG51bWJlcltzdGFydF07CiAgICAgICAgfQogICAgICAgIGlmKGZsYWcpIHsKICAgICAgICAgICAgZm9yKHN0YXJ0ID0gbWlkLCBlbmQgPSAoKHN0cl9sZW4gJiAxKSA/IG1pZCA6IChtaWQgKyAxKSk7IChzdGFydCA+PTAgJiYgZW5kIDwgc3RyX2xlbikgJiYgKG51bWJlcltzdGFydF0gPT0gJzknKTsgLS1zdGFydCwrK2VuZCkgewogICAgICAgICAgICAgICAgbnVtYmVyW2VuZF0gPSBudW1iZXJbc3RhcnRdID0gJzAnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHN0YXJ0ID49MCAmJiBlbmQgPCBzdHJfbGVuKSB7CiAgICAgICAgICAgICAgICBudW1iZXJbc3RhcnRdKys7CiAgICAgICAgICAgICAgICBudW1iZXJbZW5kXSA9IG51bWJlcltzdGFydF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yKHN0YXJ0ID0gMCwgZW5kID0gc3RyX2xlbiAtIDE7IChzdGFydCA8IGVuZCk7ICsrc3RhcnQsLS1lbmQpIHsKICAgICAgICAgICAgbnVtYmVyW2VuZF0gPSBudW1iZXJbc3RhcnRdOwogICAgICAgIH0KICAgIH0KfQ==
OAo5Nzc5NTM3NTc1NjEyMjM1MjU3Mjg3OTgyNjU1MjE1MTY1NDM4NzExMjI2MgoxODkyMzg4NDk3MTY5NTE2NzM0OTkyMzU2NTI4NDY2CjE5ODkxODU5NDQ4Mjg2MTY3ODEyCjQ3NzM3Nzk1NzgyMjQxODc5ODExNTY2Njk3ODI5MjM4ODYyOTk0MjYzMjc4ODQ5OTQyNjMyOTI2NDM4NzI1Cjg1Nzc1MTI3NTc0NDQ3NjI5NzE0OTUxNTY2MQo2OTkKNTExOTc4MzczODY2NTQ0ODEyMTE2MjY0MjI4Ngo0MTc3MTE4NjI0MzEzNDEyOTM3MjM1NzQ2NDUx
8
97795375756122352572879826552151654387112262
1892388497169516734992356528466
19891859448286167812
47737795782241879811566697829238862994263278849942632926438725
857751275744476297149515661
699
5119783738665448121162642286
4177118624313412937235746451