typedef struct n {
unsigned int c : 23;
unsigned int b : 8;
unsigned int a : 1;
}node;
char s[20];
float read(char * s)
{
char *sp = s;
float f=0;
node * np = (node *)&f;
if (s[0] == '-')
np->a = 1, sp++;
long long big = 0, small = 0,mod=1;
while (*sp && *sp != '.')
{
big = big * 10 + *sp - 48;
sp++;
}
if (*sp == '.')
{
sp++;
while (*sp)
{
small = small * 10 + *sp - 48;
mod *= 10;
sp++;
}
}
int k = 0;
if (big)
{
while (!(big & 1ll << 23))
{
int tag = 0;
small *= 2;
if(small>=mod)
{
small -= mod;
tag = 1;
}
big <<= 1;
big += tag;
k++;
}
if (small * 2 > mod)
big++;
np->c = big;
np->b = 150 - k;
}
else
{
if (!small)
return f;
int flag = 0, ex = 0;
while (1)
{
k++;
big <<= 1;
small *= 2;
if (small >= mod)
{
if (!flag)
flag = 1, ex = -k;
small -= mod;
big += 1;
}
if (big & 1ll << 23)
break;
}
if (small * 2 > mod)
big++;
np->c = big;
np->b = 127 +ex;
}
return f;
}
int main()
{
scanf("%s", s);
float f = read(s);
printf("%f", f);
}