Input

The first line contains integer t, the number of test cases. Followed by t lines containing integers K.

Output

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

Example

Input:

2

808

2133

Output:

818

2222

Response1:

If ( (number already a palindrome) or (right half <> left half)

___ Copy reverse of left half to right half.

Response2:

perfect..above soln always gives correct answer.

for even no.of digits join n/2,n/2+1 th digit as one digit(so that u've to increment both these digits for 1st case).

ex.1441

ans->> 1551(if i'm not wrong)

here both the digits(2nd ,3rd).

this may also be done using naive approach like

while(!ispalindrome(++n))

;

output(n)

but this consumes a lot computing time.u can verify this

by giving large nos as i/p.

Response3:

the solution is not correct...

consider the case say 323421

now the right half ie 421 is greater than left 323

so according to your algo the answer wud be 323323

which is wrong...

the correct algo is

If ( (number already a palindrome) or (right half <> left half)

___increment the last digit of left half by 1 and copy the reverse of it to right half.

Response4:

>> In case of even length.. middle element is the rightmost element of left half.

>> otherwise middle element is separate from left half.

So, the correct algo goes like..

If( reverse left half> right half )

___ Copy reverse left half to right half

else

___ Increment middle element by 1 and then Copy reverse left half to right half.

Response5:

Modified algo

For even digits

increment left half until left half

copy left half to right half

## No comments:

## Post a Comment

Note: Only a member of this blog may post a comment.