//POJ 1001 Exponentiation (百炼叫test)高精浮点乘方
//by 澄哥
#include <iostream>
#include <cstring>
#define MAX 200
using namespace std;
char* cut_zero(char *res)
{
int headZero;
int len = strlen(res);
for (headZero = 0; headZero < len-1; headZero++)
if (res[headZero]!='0')
break;
if(headZero)
for (int i = 0; i <= len; i++)
res[i] = res[i+headZero];
return res;
}
char *big_mutiply(char a[], char b[])
{
int la = strlen(a);
int lb = strlen(b);
int r[MAX] = {0};
char* res = new char [MAX];
int head = 0;
for (int i = 0; i < la; i++)
for (int j = 0; j < lb; j++)
r[i+j] += (a[i]-'0')*(b[j]-'0');
for (int i = la + lb - 2; i >= 0; i--)
{
if (i == 0)
{
head = r[0]/10;
r[0] = r[0]%10;
}
else
{
r[i-1] += r[i]/10;
r[i] = r[i]%10;
}
}
if (head == 0)
{
for (int i = 0; i < la + lb -1; i++)
res[i] = r[i]+'0';
res[la + lb - 1] = '\0';
}
else
{
for (int i = la + lb - 2; i >= 0; i--)
res[i+1] = r[i]+'0';
res[0] = head + '0';
res[la + lb] = '\0';
}
return cut_zero(res);
}
char *big_pow(char a[], int n)
{
if (n == 0)
return "1";
if (n == 1)
return cut_zero(a);
if (n % 2 == 0)
return big_mutiply(big_pow(a, n/2),big_pow(a, n/2));
else
return big_mutiply(big_pow(a, n/2),big_pow(a, n/2+1));
}
char* double_pow(char s[], int n)
{
int dot = 0;
char* s2 = new char[MAX];
int len = strlen(s);
for (int i = 0, j = 0; i <= len; i++)
{
if (s[i] == '.')
dot = (len-i-1)*n;
else
s2[j++] = s[i];
}
strcpy(s2, big_pow(s2, n));
if (dot == 0) return s2;
len = strlen(s2);
if (len >= dot)
{
for (int i = len; i >= len - dot; i--)
s2[i+1] = s2[i];
s2[len-dot] = '.';
}
else
{
for (int i = len; i>= 0; i--)
s2[i+dot-len+1] = s2[i];
for (int i = 1; i <= dot - len; i++)
s2[i] = '0';
s2[0] = '.';
}
for (int i = strlen(s2)-1; i >= 0; i--)
{
if (s2[i] == '0')
{
s2[i] = '\0';
}
else
{
if (s2[i] == '.')
s2[i] = '\0';
break;
}
}
return s2;
}
int main()
{
char s[10];
int n;
while(cin >> s >> n)
{
cout << double_pow(s, n) << endl;
}
// system("pause");
return 0;
}