#include <fstream>
#include <cmath>
#define GOD 3000
using namespace std ;
ifstream fin( "sqrt.in" );
ofstream fout( "sqrt.out" );
short v[ GOD ], rez[ GOD / 2 ], vv[ GOD ], val[ GOD ];
short k, n;
char c;
short zerouri( short a[], int poz ){
int i = poz;
bool gasit = 0;
while( !gasit ){
if( a[ i ] )
gasit = 1;
i++;
}
return i - 1;
}
void Inmultire( short a[], int poz, int la, int cif, short x[] ){
int i = la;
int j = GOD - 2;
int rest = 0;
int prod;
while( i > poz ){
prod = a[ i ] * cif + rest;
rest = prod / 10;
x[ j ] = ( prod - 10 * rest );
i--;
j--;
}
if( i == poz ){
prod = a[ i ] * cif + rest;
rest = prod / 10;
x[ j ] = ( prod - 10 * rest );
x[ j - 1 ] = rest;
}
}
bool Comparare ( short a[], int poz, int la, short b[], int pozz, int lb ){
int i = poz;
int j = pozz;
bool gasit = 0;
if( la - poz > lb - pozz )
return 1;
if( la - poz < lb - pozz )
return 0;
if( la - poz == lb - pozz ){
while( !gasit && i <= la && j <= lb ){
if( a[ i ] < b[ j ] ){
gasit = 1;
return 0;
}
if( a[ i ] > b[ j ] ){
gasit = 1;
return 1;
}
i++;
j++;
}
if( i == la + 1 && j == lb + 1 )
return 1;
}
}
void Diferenta( short a[], int poz, int la, short b[], int pozz, int lb ){
int diff;
int imp = 0;
int i = la;
int j = lb;
while( j >= pozz ){
diff = a[ i ] - b[ j ] - imp;
a[ i ] = diff;
if( diff < 0 ){
imp = 1;
a[ i ] = diff + 10;
}
if( diff >= 0 )
imp = 0;
j--;
i--;
}
if( imp )
a[ i ] = a[ i ] - imp;
}
int main( )
{
int i = 0;
int j;
bool gasit;
fin >> c;
while( !fin.eof( ) ){
v[ i ] = c - '0';
i++;
fin >> c;
}
k = 0;
if( i % 2 == 1 ){
rez[ k ] = ( int )sqrt( v[ 0 ] );
v[ k ] = v[ k ] - rez[ k ] * rez[ k ];
j = 1;
}
if( i % 2 == 0 ){
k = v[ 0 ] * 10 + v[ 1 ];
rez[ 0 ] = ( int ) sqrt( k );
n = rez[ 0 ] * rez[ 0 ];
v[ 0 ] = ( ( k - n ) / 10 );
v[ 1 ] = ( k - n ) - v[ 0 ] * 10;
j = 2;
}
fout << rez[ 0 ];
k = 1;
while( j < i ){
Inmultire( rez , 0 , k - 1 , 2 , vv );
gasit = 1;
n = 0;
while( n < 10 && gasit ){
n = n + 1;
vv[ GOD - 1 ] = n;
Inmultire ( vv , zerouri( vv , GOD - j - 2 ) , GOD - 1 , n , val );
gasit = Comparare ( v , zerouri ( v , 0 ) , j + 1 , val , zerouri ( val , GOD - j - 4 ) , GOD - 2 );
}
if( n == 1 ){
fout << 0;
rez[ k ] = 0;
} else {
fout << n - 1;
rez[ k ] = n - 1;
vv[ GOD - 1 ] = n - 1;
Inmultire ( vv , zerouri( vv , GOD - j - 2 ) , GOD - 1 , n - 1 , val );
Diferenta ( v , zerouri( v , 0 ) , j + 1 , val , zerouri( val , GOD - j - 4 ) , GOD - 2 );
}
j = j + 2;
k++;
}
return 0 ;
}