PALIN - The Next Palindrome


A positive integer is called a palindrome if its representation in the decimal system is the same when read from left to right and from right to left. For a given positive integer K of not more than 1000000 digits, write the value of the smallest palindrome larger than K to output. Numbers are always displayed without leading zeros.

Input

The first line contains integer t, the number of test cases. Integers K are given in the next t lines.

Output

For each K, output the smallest palindrome larger than K.

Example

Input:
2
808
2133

Output:
818
2222

Warning: large Input/Output data, be careful with certain languages


hide comments
Sotirios Nikoloutsopoulos: 2014-01-15 15:17:31

I got AC on this problem , even if my code failed at some test cases at even numbers ( now my code is corrected :) ).

Let's consider the case
Input :
1
20899802

Wrong output :
21000012

Wright output :
20900902

Shouldn't such test cases be included?

hendrik: 2014-01-15 15:17:31

@manish: Write a brute force function and calc all results from 0..10000 or so. Then compare that against your algo you need for that task. I got AC at the first shot with that approach.

genesect: 2014-01-15 15:17:31

@Hadyan: status codes explained here: http://www.spoj.pl/forum/viewtopic.php?f=6&t=55

@Stefan: test cases contain no leading zeros, disregard that case

Ricky Suryadharma: 2014-01-15 15:17:31

Not wondering again... :D
Just AC in Java.
The main problem, just I though, how to read/write I/O (not the algorithm).
Try to read byte by byte and write byte by byte (don't use Scanner class and System.out.println, they will slow program).

Hey, after I saw the status, my Java program runs faster than my C++ program (even I use the same algorithm).. LOL.. my first time experience XD

Ricky Suryadharma: 2014-01-15 15:17:31

@hadi:
Same here..
Firstly, I wrote in Java and always got TLE, even tried to read the input byte by byte (using the fastest method I've known).
After transform my code to C++, without changing the algorithm, I got AC.
Wondering... :|

@Burak Yılmaztürk:
Running time can be reduced by analyze and design the better algorithm, optimize the code (compiler or programming language manual or API may be such a help), choose another programming language like I did.
See https://www.spoj.pl/tutorials/USERS/ for TLE.

@aravind:
May be you should try the worst testcase (1000000 digits) by generate the input (search I/O pipe reference for more info).
Or you may try to generate the input for all 1000 first positive integers and see manually whether the output right or not.

@Wojciech Pietrzak:
I'm not familiar with that programming language. May be you should try the worst testcase.

An Yujie: 2014-01-15 15:17:31

Coders, attention. SIGSEGV means your array is not big enough. I got SIGSEGV by x[100000], but when I changed it to x[1000000], I got AC. It means that the biggest number may have 1000000 digits...

Last edit: 2010-07-02 13:12:06
Jargon: 2014-01-15 15:17:31

It's up to 1 million digits -- try reading the comments below yours to see if the question has been answered before.
This is a string problem, not a number problem.


Added by:adrian
Date:2004-05-01
Time limit:2s-9s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: NODEJS PERL6

Problem's scores 1 vote

Concept difficulty
Concept difficulty 37%
Implementation difficulty
Implementation difficulty 50%
468 16