rendered paste body#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void strrev1(char*str)
{
int k=0,i;
char*ans=(char*)malloc(30);
for(i=strlen(str)-1;i>=0;i--)
ans[k++]=str[i];
ans[k]='\0';
strcpy(str,ans);
}
char*Add(char*str1,char*str2)
{
int carry=0,i,k=0;
char*ans=(char*)malloc(30);
strcpy(ans,"");
strrev1(str1);
strrev1(str2);
for(i=0;i<strlen(str1) && i<strlen(str2);i++)
{
ans[k++]=(str1[i]-'0'+str2[i]-'0'+carry)%10+'0';
carry=(str1[i]-'0'+str2[i]-'0'+carry)/10;
}
while(i<strlen(str1))
{
ans[k++]=(carry+str1[i]-'0')%10+'0';
carry=(carry+str1[i]-'0')/10;
i++;
}
while(i<strlen(str2))
{
ans[k++]=(carry+str2[i]-'0')%10+'0';
carry=(carry+str2[i]-'0')/10;
i++;
}
if(carry!=0)
ans[k++]=carry+'0';
ans[k]='\0';
strrev1(ans);
strrev1(str1);
strrev1(str2);
while(ans[0]=='0')
ans++;
return ans;
}
char*g(char*n)
{
char*ans=(char*)malloc(30);
char*i=(char*)malloc(30);
strcpy(i,"0");
strcpy(ans,"0");
while((strlen(ans)<strlen(n)) || ((strlen(ans)==strlen(n) && (strcmp(ans,n)<=0))))
{
i=Add(i,"1");
ans=Add(ans,i);
}
return i;
}
char*f(char*n)
{
int k=0,flag=0;
char*ans=(char*)malloc(30);
char*sum=(char*)malloc(30);
char*tempSum=(char*)malloc(30);
char*i=(char*)malloc(30);
char*j=(char*)malloc(30);
strcpy(i,"0");
strcpy(j,"0");
strcpy(ans,"0");
strcpy(sum,"0");
strcpy(tempSum,"0");
for(strcpy(i,"1");((strlen(sum)<strlen(n)) || ((strlen(sum)==strlen(n) && (strcmp(sum,n)<0))));i=Add(i,"1"))
{
for(strcpy(j,"1");(strlen(j)<strlen(i)) || (strlen(j)==strlen(i) && (strcmp(j,i)<=0));j=Add(j,"1"))
{
strcpy(tempSum,sum);
for(k=0;k<atoi(j);k++)
sum=Add(sum,i);
if((strlen(n)<strlen(sum)) || ((strlen(n)==strlen(sum) && (strcmp(n,sum)<=0))))
{
ans=Add(ans,j);
flag=1;
break;
}
else if(strcmp(j,i)!=0)
strcpy(sum,tempSum);
}
if(flag!=1)
ans=Add(ans,i);
}
return ans;
}
int main()
{
int t;
scanf(" %d",&t);
while(t--)
{
char*n=(char*)malloc(30);
scanf("%s",n);
printf("%s",f(g(n)));
}
return 0;
}