while (c[c.len]>0) c.len++;
return c;
}
BigNum BigNum::operator-(const BigNum& b)const //ensure that a>b
{
BigNum c=BigNum();
c.len=max(len,b.len);
int k=0;
for (int i=0;i
c[i]=a[i]-b[i]-k;
else
{
k++;
c[i]=a[i]-b[i]+base;
}
while (c.len>0 && c[c.len-1]==0) c.len--;
return c;
}
BigNum BigNum::operator-(const int b)const
{
BigNum c=*this;
int i=0;
c[i]-=b;
while (c[i]<0)
{
c[i+1]--;
c[i]+=base;
i++;
}
while (c.len>0 && c[c.len-1]==0) c.len--;
return c;
}
BigNum BigNum::operator*(const BigNum& b)const
{
BigNum c=BigNum();
c.len=0;
int t;
for (int j=0;j
t=c[i+j]+a[i]*b[j];
c[i+j]=t%base;
c[i+j+1]+=t/base;
if (c[i+j]>0) c.len=max(c.len,i+j);
if (c[i+j+1]>0) c.len=max(c.len,i+j+1);
}
c.len++;
return c;
}
BigNum BigNum::operator*(const int b)const
{
BigNum c=BigNum();
c.len=len;
int k=0;
for (int i=0;i
c[i]=(a[i]*b+k)%base;
k=(a[i]*b+k)/base;
}
while (k>0)
{
c[c.len++]=k%base;
k/=base;
}
return c;
}
bool BigNum::operator< (const BigNum& b)const
{
if (len
for (int i=len-1;i>=0;i--)
if (a[i] else if (a[i]>b[i]) return false;
return false;
}
bool BigNum::operator> (const BigNum& b)const
{
if (len>b.len) return true;
if (len
if (a[i]>b[i]) return true;
else if (a[i] return false;
}
bool BigNum::operator== (const BigNum& b)const
{
if (len!=b.len) return false;
return true;
}
bool BigNum::operator!= (const BigNum& b)const
{
return !(*this==b);
}
ostream& operator<< (ostream& os,const BigNum& a)
{
int i=a.len-1;
os << a[i];
for (i-=1;i>=0;i--)
{
if (a[i]
}
return os;
}
string BigNum::toString()const
{
int i=len-1;
char s[MAX*blen+1];
sprintf(s,"%d",a[i]);
for (i-=1;i>=0;i--)
{
if (a[i]
}
return string(s,s+strlen(s));
}
BigNum cal(BigNum a)
{
string s=a.toString();
int x=s[0]-'0';
int b=s.size();
if (b==1) return BigNum(x);
BigNum tmp;
for (int i=0;i
tmp=tmp+(a-BigNum(1,b-1)+1)*b;
return tmp;
}
int get(string s1,string s2)
{
int i,ans=0;
for (i=1;i<=min(s1.size(),s2.size());i++)
{
string ss1=s1.substr(0,i);
string ss2=s2.substr(s2.size()-i,i);
if (ss1==ss2) ans=i;
}
return ans;
}
int main()
{
freopen("in.txt","r",stdin);
int i,j,len,n,k,slen;
bool ff;
BigNum ans,tmp;
string s,ss,st,sp,s1,s2;
cin >> s;
n=s.size();
if (s==string(n,'0'))
{
ans=cal(BigNum(1,n))-n+1;
cout << ans << endl;
return 0;
}
if (n==1)
{
cout << s << endl;
return 0;
}
for (len=1;len
j=i+len-1;
if (j>=n) continue;
ff=true;
st=s.substr(i,len);
if (st[0]=='0') continue;