I cannot understand on what input my code fails. It’s giving correct output on every input, but wrong answer on SPOJ. Here is my code, Please someone find my mistake-
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int t,mm;
int flaa=0,prte=0;
scanf("%lld",&t);
for(mm=0;mm<t;mm++)
{
char s[1000003];
long long i=0,l,j;
scanf("%s",s);
while(s[i]!='\0')
++i;
//cout<<i<<"\n";
j=i;
//digits achieved
while(i)
{
if(s[i-1]=='9')
{s[i-1]='0';}//printf("%c\n",s[i-1]);}
else
{++s[i-1];break;}
--i;
}
i=j;
if(s[0]=='0')
{
printf("1");
while(i-1)
{printf("0");--i;}
printf("1\n");
flaa=1; prte=1;
}
//cout<<s<<"\n";
i=j;
//increased the digit by one & PRINTED 1....0....1 if all digits in 9s format.
if(flaa==0)
{
while(i-1>=j/2)
{
if(s[j-i]==s[i-1])
--i;
else
{flaa=1;break;}
}
if(i-1==j/2&&flaa==0)
{printf("%s\n",s); flaa=1; prte=1;}
if(prte==0)
flaa=0;
}
//cout<<"this is palindromic magical no. "<<i<<"\n";
i=j;
//checked if palindrome exists, IF YES PRINTED IT.
if(flaa==0)
{
l=i/2-1;
while(l!=-1&&prte==0)
{
//GAME BEGINS FOR ODD NUMBERS.
if(s[i-l-1]!=s[l]&&flaa==0&&i%2!=0)
{
if(s[l]<s[i-1-l]&&s[j/2]!='9')
{
++s[j/2];
s[i-l-1]=s[l];
flaa=1;
}
//flag on, for odd digits, mid!=9
else if(s[l]<s[i-1-l]&&s[j/2]=='9')
{
s[j/2]='0';
flaa=1;
j=j/2;
while(j-1!=-1)
{
if(s[j-1]=='9')
{
s[j-1]='0';
s[i-j]=s[j-1];
--j;
}
else
{++s[j-1]; s[i-j]=s[j-1]; break;}
}
j=i;
if(s[0]=='0')
{
printf("1");
while(i-1)
{printf("0");--i;}
printf("1\n");
i=j;
prte=1;
}
//printing combo.
}
//flag on, for odd digits when mid==9 & continue increasing digits on left making right equal.
}
//GAME BEGINS FOR EVEN DIGITS.
else if(flaa==0&&i%2==0)
{
if(s[j/2-1]!='9'&&s[l]<s[j-l-1])
{
++s[j/2-1];
s[j-j/2]=s[j/2-1];
s[i-l-1]=s[l];
flaa=1;
}
//flag on, for even digits, mid-1!=9
else if(s[j/2-1]=='9'&&s[l]<s[j-l-1])
{
s[j/2-1]='0';
s[j-j/2]=s[j/2-1];
flaa=1;
j=j/2;
while(j-1!=-1)
{
if(s[j-1]=='9')
{
s[j-1]='0';
s[i-j]=s[j-1];
--j;
}
else
{++s[j-1]; s[i-j]=s[j-1]; break;}
}
j=i;
if(s[0]=='0')
{
printf("1");
while(i-1)
{printf("0");--i;}
printf("1\n");
i=j;
prte=1;
}
//printing combo.
}
//flag on, for even digits when mid-1==9 & continue increasing digits on left making right equal.
}
if(s[l]>s[j-l-1]&&i%2==0)
flaa=1;
s[i-l-1]=s[l];
--l;
}
}
if(prte==0)
printf("%s\n",s);
flaa=0;
prte=0;
}
return 0;
}