#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( )
{
int t , i; // t = number of test cases , i = a temporary variable for iteration purpose
char * input , * output ;
unsigned long long int l , x , y , mid ; // l = length of input string , x = to iterate from mid to start ,
// y = to iterate from mid to end
// mid = middle location of input string (even : l/2-1 , odd : l/2)
while ( t-- )
{
input
= ( char * ) malloc ( 1000000 ) ;
//check if input is single digit
if ( l== 1 )
{
break ;
}
//check if input is already a palindrome of kind '99','99','9999',etc. so that output becomes : '101' , '10001'
i = 0 ;
for ( i = 0 ; i< l ; i++ )
{
if ( input[ i] != '9' )
break ;
}
if ( i== l)
{
output[ 0 ] = '1' ;
output[ l] = '1' ;
for ( i= 1 ; i< l; i++ )
output[ i] = '0' ;
output[ l+ 1 ] = '\0 ' ;
break ;
}
//make a string containig all digits of input
//find the mid number
output[ l- 1 ] = output[ l- 1 ] + 1 ;
if ( l% 2 == 0 )
{
//even
mid = l/ 2 ;
x = mid - 1 ;
y = mid ;
//scan until the last the element , and if break appears then start copying the remaining elements
// as shown in [1]
while ( y!= l)
{
//check if first half element is less than second half element ,
// if yes , it means the first half element needs to be increased by 1 and second half //element is made equal to first half element, Ex : 2473 : 2553
//condition(1)
if ( output[ x] < output[ y] )
{
output[ x] = output[ x] + 1 ;
output[ y] = output[ x] ;
break ;
}
//if the two elements are already equal as in '236679' , '6' == '6' , then we check for
// '3' and '7'
//condition(2)
else if ( output[ x] == output[ y] && output[ x] != '\0 ' )
{
x--;
y++;
if ( output[ x] < output[ y] ) //if less , then we do the same as condition(1)
{
output[ x+ 1 ] = output[ x+ 1 ] + 1 ;
output[ y- 1 ] = output[ y- 1 ] + 1 ;
}
//no break , so that we can check for next elements
}
//special case for handling 9s
else if ( output[ x] == '9' && output[ y] == '9' )
{
while ( output[ x] == output[ y] ) //case like '199999'
{
x--;
y++;
}
if ( output[ x] < output[ y] ) //same as condition(1)
{
output[ x] = output[ x] + 1 ;
output[ y] = output[ x] ;
for ( i= x+ 1 ; i<= y- 1 ; i++ ) // but also replace the 9s with 0
output[ i] = '0' ;
}
break ;
}
//condition(4)
else if ( output[ x] > output[ y] ) //if first half element is greater than //second half element , then simply replace the second half element with first half element
{
output[ y] = output[ x] ;
break ;
}
x--;
y++;
}
//start copying unscanned elements of first half elements to second half elements
while ( y <= l- 1 )
{
output[ y] = output[ x] ;
x--;
y++;
}
}
else
{
//odd
mid = l/ 2 ;
x = mid - 1 ;
y = mid + 1 ;
while ( y!= l)
{
if ( output[ x] <= output[ y] && output[ mid] != '9' )
{
output[ mid] = output[ mid] + 1 ;
break ;
}
else if ( output[ x] <= output[ y] && output[ mid] == '9' )
{
while ( output[ x] == output[ y] )
{
x--;
y++;
}
if ( output[ x] < output[ y] ) // 14897 case
{
output[ x] = output[ x] + 1 ;
output[ y] = output[ x] ;
for ( i= x+ 1 ; i<= y- 1 ; i++ )
output[ i] = '0' ;
}
break ;
}
else if ( output[ x] > output[ y] )
{
output[ y] = output[ x] ;
break ;
}
x--;
y++;
}
while ( y <= l- 1 )
{
output[ y] = output[ x] ;
x--;
y++;
}
}
//check
x = 0 ;
y = l - 1 ;
while ( output[ x] == output[ y] && output[ x] != '\0 ' )
{
x++;
y--;
}
if ( x- 1 == l- 1 )
{
}
}
return 0 ;
}
CgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgppbnQgbWFpbigpCnsKICAgIGludCAgdCAsIGk7ICAgIC8vIHQgPSBudW1iZXIgb2YgdGVzdCBjYXNlcyAsIGkgPSBhIHRlbXBvcmFyeSB2YXJpYWJsZSBmb3IgaXRlcmF0aW9uIHB1cnBvc2UKICAgIGNoYXIgKmlucHV0ICwgKm91dHB1dCA7IAogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBsICwgeCAsIHkgLCBtaWQgIDsgIC8vIGwgPSBsZW5ndGggb2YgaW5wdXQgc3RyaW5nICwgeCA9IHRvIGl0ZXJhdGUgZnJvbSBtaWQgdG8gc3RhcnQgLCAKCQkJCQkgICAgICAgLy8geSA9IHRvIGl0ZXJhdGUgZnJvbSBtaWQgdG8gZW5kCgkJCQkJICAgICAgIC8vIG1pZCA9IG1pZGRsZSBsb2NhdGlvbiBvZiBpbnB1dCBzdHJpbmcgKGV2ZW4gOiBsLzItMSAsIG9kZCA6IGwvMikKICAgIHNjYW5mKCIlZCIsJnQpOwoKICAgIHdoaWxlICh0LS0pCiAgICB7CiAgICAgICAgaW5wdXQgPSAoY2hhciAqKW1hbGxvYygxMDAwMDAwKTsKICAgICAgICBzY2FuZigiJXMiLGlucHV0KTsKICAgICAgICBsID0gc3RybGVuKGlucHV0KTsKCgkvL2NoZWNrIGlmIGlucHV0IGlzIHNpbmdsZSBkaWdpdAoJaWYobD09MSkKCXsKCQlwcmludGYoIjExXG4iKTsKCQlicmVhazsKCX0KCS8vY2hlY2sgaWYgaW5wdXQgaXMgYWxyZWFkeSBhIHBhbGluZHJvbWUgb2Yga2luZCAnOTknLCc5OScsJzk5OTknLGV0Yy4gc28gdGhhdCBvdXRwdXQgYmVjb21lcyA6ICcxMDEnICwgJzEwMDAxJwogICAgICAgIGkgPSAwIDsKICAgICAgICBmb3IoaSA9IDAgOyBpPCBsIDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihpbnB1dFtpXSE9JzknKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmKGk9PWwpCiAgICAgICAgewogICAgICAgICAgICBvdXRwdXQgPSBtYWxsb2MobCsyKTsKICAgICAgICAgICAgb3V0cHV0WzBdPScxJzsKICAgICAgICAgICAgb3V0cHV0W2xdPScxJzsKICAgICAgICAgICAgZm9yKGk9MTtpPGw7aSsrKQogICAgICAgICAgICAgICAgb3V0cHV0W2ldPScwJzsKICAgICAgICAgICAgb3V0cHV0W2wrMV09J1wwJzsKICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixvdXRwdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKICAgICAgICAvL21ha2UgYSBzdHJpbmcgY29udGFpbmlnIGFsbCBkaWdpdHMgb2YgaW5wdXQKICAgICAgICBvdXRwdXQgPSBtYWxsb2MobCk7CiAgICAgICAgc3RyY3B5KG91dHB1dCxpbnB1dCk7CgogICAgICAgICAgIC8vZmluZCB0aGUgbWlkIG51bWJlcgogICAgICAgICAgICBsID0gc3RybGVuKG91dHB1dCk7CiAgICAgICAgICAgIG91dHB1dFtsLTFdPW91dHB1dFtsLTFdKzE7CiAgICAgICAgICAgIGlmIChsJTI9PTApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vZXZlbgogICAgICAgICAgICAgICAgbWlkID0gbC8yIDsKICAgICAgICAgICAgICAgIHggPSBtaWQgLSAxIDsKICAgICAgICAgICAgICAgIHkgPSBtaWQgOwoKCQkvL3NjYW4gdW50aWwgdGhlIGxhc3QgdGhlIGVsZW1lbnQgLCBhbmQgaWYgYnJlYWsgYXBwZWFycyB0aGVuIHN0YXJ0IGNvcHlpbmcgdGhlIHJlbWFpbmluZyBlbGVtZW50cwoJCS8vIGFzIHNob3duIGluIFsxXQogICAgICAgICAgICB3aGlsZSAoeSE9bCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9jaGVjayBpZiBmaXJzdCBoYWxmIGVsZW1lbnQgaXMgbGVzcyB0aGFuIHNlY29uZCBoYWxmIGVsZW1lbnQgLCAKCQkJLy8gaWYgeWVzICwgaXQgbWVhbnMgdGhlIGZpcnN0IGhhbGYgZWxlbWVudCBuZWVkcyB0byBiZSBpbmNyZWFzZWQgYnkgMSBhbmQgc2Vjb25kIGhhbGYgICAgICAvL2VsZW1lbnQgaXMgbWFkZSBlcXVhbCB0byBmaXJzdCBoYWxmIGVsZW1lbnQsIEV4IDogMjQ3MyA6IDI1NTMKLy9jb25kaXRpb24oMSkJCgkJaWYgKG91dHB1dFt4XSA8IG91dHB1dFt5XSkKICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFt4XT1vdXRwdXRbeF0rMSA7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFt5XT1vdXRwdXRbeF07CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIDsKCiAgICAgICAgICAgICAgICAgICAgfQoJCQkvL2lmIHRoZSB0d28gZWxlbWVudHMgYXJlIGFscmVhZHkgIGVxdWFsIGFzIGluICcyMzY2NzknICwgJzYnID09ICc2JyAsIHRoZW4gd2UgY2hlY2sgZm9yCgkJCS8vICczJyBhbmQgJzcnIAovL2NvbmRpdGlvbigyKSAgICAgICAgICAKCQkgZWxzZSBpZiAob3V0cHV0W3hdID09IG91dHB1dFt5XSAmJiBvdXRwdXRbeF0gIT0gJ1wwJykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgICAgICAgICAgICAgeSsrOwogICAgICAgICAgICAgICAgICAgICAgICBpZihvdXRwdXRbeF0gPCBvdXRwdXRbeV0pICAgLy9pZiBsZXNzICwgdGhlbiB3ZSBkbyB0aGUgc2FtZSBhcyBjb25kaXRpb24oMSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFt4KzFdID0gb3V0cHV0W3grMV0rMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbeS0xXSA9IG91dHB1dFt5LTFdKzE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCQkJCS8vbm8gYnJlYWsgLCBzbyB0aGF0IHdlIGNhbiBjaGVjayBmb3IgbmV4dCBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgIH0KLy9zcGVjaWFsIGNhc2UgZm9yIGhhbmRsaW5nIDlzIAoJCSBlbHNlIGlmIChvdXRwdXRbeF0gPT0gJzknICYmIG91dHB1dFt5XT09ICc5JykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChvdXRwdXRbeF09PSBvdXRwdXRbeV0pICAgICAgICAgICAvL2Nhc2UgbGlrZSAnMTk5OTk5JwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5Kys7CgogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0W3hdIDwgb3V0cHV0W3ldKSAgICAgICAgICAgICAgICAgICAgICAgICAvL3NhbWUgYXMgY29uZGl0aW9uKDEpIAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W3hdPW91dHB1dFt4XSsxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFt5XT1vdXRwdXRbeF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPXgrMTsgaTw9eS0xOyBpKyspICAgICAgICAgICAgICAgICAgLy8gYnV0IGFsc28gcmVwbGFjZSB0aGUgOXMgd2l0aCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpXT0nMCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLy9jb25kaXRpb24oNCkKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXRbeF0gPiBvdXRwdXRbeV0pICAgICAgICAgICAgICAgICAgICAgICAvL2lmIGZpcnN0IGhhbGYgZWxlbWVudCBpcyBncmVhdGVyIHRoYW4gLy9zZWNvbmQgaGFsZiBlbGVtZW50ICwgdGhlbiBzaW1wbHkgcmVwbGFjZSB0aGUgc2Vjb25kIGhhbGYgZWxlbWVudCB3aXRoIGZpcnN0IGhhbGYgZWxlbWVudCAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFt5XT1vdXRwdXRbeF07CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgICAgICAgICB5Kys7CiAgICAgICAgICAgICAgICAgfQovL3N0YXJ0IGNvcHlpbmcgdW5zY2FubmVkIGVsZW1lbnRzIG9mIGZpcnN0IGhhbGYgZWxlbWVudHMgdG8gc2Vjb25kIGhhbGYgZWxlbWVudHMKICAgICAgICAgICAgICAgIHdoaWxlICh5IDw9IGwtMSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W3ldPW91dHB1dFt4XTsKICAgICAgICAgICAgICAgICAgICB4LS07CiAgICAgICAgICAgICAgICAgICAgeSsrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vb2RkCiAgICAgICAgICAgICAgICBtaWQgPSBsLzIgOwogICAgICAgICAgICAgICAgeCA9IG1pZCAtIDEgOwogICAgICAgICAgICAgICAgeSA9IG1pZCArIDE7CgogICAgICAgICAgICAgICAgd2hpbGUgKHkhPWwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dFt4XSA8PSBvdXRwdXRbeV0gJiYgb3V0cHV0W21pZF0gIT0gJzknKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W21pZF09b3V0cHV0W21pZF0rMTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXRbeF0gPD0gb3V0cHV0W3ldICYmIG91dHB1dFttaWRdID09ICc5JykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChvdXRwdXRbeF0gPT0gb3V0cHV0W3ldKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5Kys7CgogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0W3hdIDwgb3V0cHV0W3ldKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxNDg5NyBjYXNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFt4XT1vdXRwdXRbeF0rMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFt5XT1vdXRwdXRbeF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9eCsxOyBpPD15LTE7IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaV09JzAnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXRbeF0gPiBvdXRwdXRbeV0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbeV09b3V0cHV0W3hdOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB4LS07CiAgICAgICAgICAgICAgICAgICAgeSsrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICB3aGlsZSAoeSA8PSBsLTEgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG91dHB1dFt5XT1vdXRwdXRbeF07CiAgICAgICAgICAgICAgICAgICAgeC0tOwogICAgICAgICAgICAgICAgICAgIHkrKzsKICAgICAgICAgICAgICAgIH0KCgoKICAgICAgICAgICAgfQoKCgogICAgICAgICAgICAvL2NoZWNrCiAgICAgICAgICAgIHggPSAwIDsKICAgICAgICAgICAgeSA9IGwgLTEgOwogICAgICAgICAgICB3aGlsZShvdXRwdXRbeF09PW91dHB1dFt5XSAmJiBvdXRwdXRbeF0gIT0gJ1wwJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeCsrOwogICAgICAgICAgICAgICAgeS0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHgtMSA9PSBsLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsb3V0cHV0KTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICB9CgogICAgZnJlZShpbnB1dCk7CiAgICBmcmVlKG91dHB1dCk7CgogICAgcmV0dXJuIDAgOwp9Cg==