#include <stdio.h>
#include <string.h>
#define MAX 300
int intLen(int *pArr)
{
int len = 0;
while(pArr[len] != -1)
{
len++;
}
return len;
}
void copyIntArr(int * pArr1, int *pArr2)
{
int len = intLen(pArr1);
int i = 0;
for(; i < len; i ++)
{
pArr2[i] = pArr1[i];
}
pArr2[i] = -1;
}
int* plusArrWithArr(int *pArr1, int *pArr2)
{
int len1 = intLen(pArr1);
int len2 = intLen(pArr2);
int *retArr = (len1 >= len2) ? pArr1 : pArr2;
int *tmpArr = (len1 >= len2) ? pArr2 : pArr1;
int max = (len1 >= len2) ? len1 : len2;
int min = (len1 >= len2) ? len2 : len1;
int i = 0;
for(; i < min; i++)
{
retArr[max - i - 1] += tmpArr[min - i - 1];
}
if(retArr != pArr1)
{
int len = intLen(retArr);
int i = 0;
for(; i < len; i ++)
{
pArr1[i] = retArr[i];
}
pArr1[i] = -1;
}
return retArr;
}
void multiplyArrWithUnits(int* pArr1, int pNum, int index, int * pAns)
{
int i = 0;
int len = intLen(pArr1);
for(; i < len; i++)
{
pAns[i] = pArr1[i] * pNum;
}
for(int j = 0; j < index; j++)
{
pAns[i++] = 0;
}
pAns[i] = -1;
}
void checkArr(int * pArr, int * pAns)
{
int len = intLen(pArr);
int i=0;
for(; i < len - 1; i++)
{
int a = pArr[len - i - 1] / 10;
int b = pArr[len - i - 1] % 10;
if( a > 0)
{
pArr[len - i - 2] += a;
pArr[len - i - 1] = b;
}
}
int c = pArr[len - i - 1] / 10;
int d = pArr[len - i - 1] % 10;
int max = 0;
if(c > 0)
{
max= c;
pArr[len - i - 1] = d;
}
int j = 0;
if(max > 0)
{
pAns[j] = max;
j = 1;
}
int k = 0;
for(; k < len ; k++)
{
pAns[k + j] = pArr[k];
}
pAns[k + j] = -1;
}
int getDigit(char* pNumberString)
{
bool hasDot = false;
int len = strlen(pNumberString);
int ret = 0;
bool start = false;
bool end = false;
for(int i = 0; i < len; i++)
{
if((!start && pNumberString[len - 1 - i] != '0') || start)
{
start = true;
if(pNumberString[len - 1 - i] == '.')
{
hasDot = true;
break;
}
ret++;
}
}
return (hasDot) ? ret : 0;
}
void getArr(char* pNumStr, int* pNum)
{
int point = getDigit(pNumStr);
int len = strlen(pNumStr);
int index = 0;
bool right = false;
bool start = false;
int i = 0;;
int j = 0;
for(; i < len; i++)
{
if(pNumStr[i] != '0' && !start)
{
start = true;
}
if(pNumStr[i] == '0' && !right && !start)
{
j ++;
}
if(pNumStr[i] == '.')
{
right = true;
j ++;
continue;
}
if(right)
{
index++;
}
if(index > point)
{
break;
}
pNum[i-j] = pNumStr[i] - '0';
}
if(i == j)
{
pNum[i-j] = 0;
j --;
}
pNum[i-j] = -1;
}
int getNumber(int * pNumber)
{
int len = intLen(pNumber);
int ret = pNumber[0];
for(int i = 1; i < len; i++)
{
ret = pNumber[i] + ret*10;
}
return ret;
}
void multiplyArrWithArr(int* pArr1, int *pArr2, int * pAns)
{
int len1 = intLen(pArr1);
int len2 = intLen(pArr2);
int *tmpArr = (len1 >= len2) ? pArr2 : pArr1;
int *maxArr = (len1 >= len2) ? pArr1 : pArr2;
int x = getNumber(tmpArr);
int index = 0;
do
{
int k = x % 10;
int temp[MAX];
multiplyArrWithUnits(maxArr, k, index, temp);
plusArrWithArr(pAns,temp);
index++;
x = x / 10;
}while(x != 0);
}
/*
void testMultiplyArrWithArr()
{
int a[] = {1, 1, 1, -1};
int b[] = {1, 1, 1, -1};
int c[MAX] = {0, -1};
multiplyArrWithArr(a, b, c);
int i=0;
while(c[i]!=-1)
{
printf("%d ",c[i]);
i++;
}
printf("/n");
}
void testGetArr()
{
char arr1[] = "3.0300";
int num1[6];
getArr(arr1,num1);
int i=0;
while(num1[i]!=-1)
{
printf("%d",num1[i]);
i++;
}
printf("/n");
char arr2[] = "3.0000";
int num2[6];
getArr(arr2,num2);
i=0;
while(num2[i]!=-1)
{
printf("%d",num2[i]);
i++;
}
printf("/n");
}
void testGetDigit()
{
char a[] = "3.03";
printf("%d/n",getDigit(a));
char b[] = "3.0300";
printf("%d/n",getDigit(b));
char c[] = "3.00";
printf("%d/n",getDigit(c));
char d[] = "3.0";
printf("%d/n",getDigit(d));
char e[] = "0.3";
printf("%d/n",getDigit(e));
char f[] = "0.0";
printf("%d/n",getDigit(f));
}
void testCheckArr()
{
int arr1[] = {9, 0, 12, -1};
int arr2[5];
checkArr(arr1, arr2);
int len = intLen(arr2);
int i=0;
while(arr2[i]!=-1)
{
printf("%d ",arr2[i]);
i++;
}
printf("/n");
}
void testPlusArrWithArr()
{
int arr1[] = {1,2,3,4,5,-1};
int arr2[] = {2,13,-1};
int* ret = plusArrWithArr(arr1,arr2);
int i=0;
while(ret[i]!=-1)
{
printf("%d ",ret[i]);
i++;
}
printf("/n");
}
void testMultiplyArrWithUnits()
{
int arr1[] = {3,4,1,-1};
int ch = 2;
int * ans1 = new int[5];
multiplyArrWithUnits(arr1, ch, 1, ans1);
int i=0;
while(ans1[i]!=-1)
{
printf("%d ",ans1[i]);
i++;
}
printf("/n");
delete ans1;
}*/
void notZero(int num, int * arr, int point, int times)
{
int ans[MAX] = {0, -1};
int tmp[MAX];
copyIntArr(arr, tmp);
if( times == 1)
{
copyIntArr(arr, ans);
}
for(int i = 1; i < times; i++)
{
int ans1[MAX] = {0, -1};
multiplyArrWithArr(arr, tmp, ans1);
int t[MAX];
copyIntArr(ans1, t);
checkArr(t, ans1);
copyIntArr(ans1, tmp);
copyIntArr(ans1, ans);
}
int right = point * times;
int left = intLen(ans) - right;
bool negative = false;
if(left < 0)
{
negative = true;
left *= -1;
}
int count = -1;
int i=0;
while(ans[i]!=-1)
{
if(!negative && i == left)
{
printf(".");
}
else if(negative && count < left)
{
if(count == -1)
{
printf(".");
}
else
{
printf("0");
}
count ++;
continue;
}
printf("%d",ans[i]);
i++;
}
printf("/n");
}
int main()
{
// testMultiplyArrWithUnits();
// testPlusArrWithArr();
// testCheckArr();
// testGetDigit();
// testGetArr();
// testMultiplyArrWithArr();
char s[10];
int times;
while(scanf("%s%d",s,×)==2)
{
int arr[10];
getArr(s, arr);
int number = getNumber(arr);
if(times==0)
{
printf("%d/n",1);
}
else
{
int point = getDigit(s);
notZero(number, arr, point, times);
}
}
return 0;
}