#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 100000
int main() {
char *s;
int i, j, k, i1, j1, n, q, t, dot, site1, site2, tmp, dotsite, forward, end, st, le;
int b[LEN], c[LEN], a[10];
s = (char *)malloc(10);
while(scanf("%s%d", s, &t) !=EOF) {
if(t == 0) {
printf("1\n");
continue;
}
n = le = strlen(s);
q = 0;
for(i = 0; i < le; i++) {
if(s[i] != '0') {
q = 1;
break;
}
}
if(!q) {
printf("0\n");
continue;
}
dot = le; //小数点位置
for(i = 0; i < le; i++) {
if(s[i] == '.') {
n = le - 1;
dot = i;
break;
}
}
for(i = 0, j = le - 1; j >= 0; i++, j--) {
if(s[j] == '.') {
j--;
}
c[i] = a[i] = b[i] = (int)(s[j] - '0');
}
site1 = site2 = n;
for(i1 = 0; i1 < t - 1; i1++) {
memset(c, 0, LEN);
for(i = 0; i < n; i++) {
k = 0;
forward = 1;
for(j = 0; j < i; j++) {
forward *= 10;
}
tmp = 0;
for(j = 0; j < site1; j++) {
tmp += (a[i] * b[j] * forward + c[k]);
c[k] = tmp % 10;
tmp /= 10;
k++;
}
k = site1;
while(tmp) {
tmp += c[k];
c[k] = tmp % 10;
tmp /= 10;
k++;
}
//此判断条件防止乘数首位为零
if(site2 < k) {
site2 = k;
}
if(site2 < (n - dot) * (i1 + 2)) {
site2 = (n - dot) * (i1 + 2);
}
}
for(i = 0; i < site2; i++) {
b[i] = c[i];
}
site1 = site2;
}
dotsite = n - dot;
dotsite *= t;
end = 0;
for(i = 0; i <= dotsite - 1; i++) {
if(c[i] == 0) {
end++;
}
else {
break;
}
}
st = site2 -1;
for( i = site2 - 1; i >= dotsite; i--) {
if(c[i] != 0) {
break;
}
st--;
}
j1 = 0;
for(; i >= dotsite; i--) {
printf("%d", c[i]);
j1 = 1;
}
if(dotsite && (end != dotsite)) {
printf(".");
}
if(dotsite && (end == dotsite) && !j1) {
printf("0");
}
for(i = dotsite - 1; i >= end; i--) {
printf("%d", c[i]);
}
printf("\n");
}
free(s);
}