#include
#include
#include
#include
using namespace std;
const int MAX = 500;
char a[MAX];
char b[MAX];
char temp[MAX];
char result[MAX];
char str[8]="98.999";
int n = 10,point;
bool pointEmpty(){
int i;
for(i=0; i<strlen(str); i++)
if(str[i] == '.')
return true;
return false;
}
void init(){
int i,j;
memset(a,0,MAX*sizeof(char));
memset(b,0,MAX*sizeof(char));
memset(result,0,MAX*sizeof(char));
memset(temp,0,MAX*sizeof(char));
if(pointEmpty())
for(i=strlen(str)-1; str[i]=='0'; i--)
str[i] = '\0';
for(i=strlen(str)-1,j=0; i>=0; i--){
if(str[i]!='.'){
b[j] = str[i];
a[j++] = str[i];
}else{
point = strlen(str) - i - 1;
}
}
point = point*n;
}
void fun(){
int i,j,h,k,v,z,x,y;
if(n==1) {
strcpy(result, a);
return ;
}
if(n==0){
strcpy(result, "1");
return ;
}
while(--n){
for(i=0; i<strlen(a); i++){
z=0; h=0;
for(j=0; j<strlen(b); j++){
z = (a[i]-48) * (b[j]-48) + z;
v = z%10;
z = z/10;
temp[h++] = v+48;
}
if(z!=0) temp[h++] = z+48;
temp[h] = '\0';
h=0;z=0;
for(k=i; k<j || h<strlen(temp); h++,k++){
if(i==0){
result[k] = temp[h];
}else{
if(result[k] == 0) x=0;
else x = result[k]-48;
if(temp[h] == 0) y=0;
else y = temp[h]-48;
z = x + y + z;
v = z%10;
z = z/10;
result[k] = v+48;
}
}
if(z!=0) result[k++] = z+48;
result[k] = '\0';
}
strcpy(b, result);
}
}
void solve(){
int count,i,j,k;
char ch;
init();
fun();
strcpy(temp, result);
for(i=0,j=0; i<strlen(result); i++){
if(point == i && point!=0){
result[j++] = '.';
}
result[j++] = temp[i];
}
k = strlen(result);
for(i=k-1; i>=k/2; i--){
ch = result[i];
result[i] = result[k-i-1];
result[k-i-1] = ch;
}
printf("%s\n",result);
}
int main()
{
while(cin>>str>>n){
solve();
}
return 0;
}