#include <stdio.h>
#include<string.h>
const int MAXN=10000;
int sum[MAXN],sum1[MAXN];
void Carry(int len)
{
int c=0,i;
for (i=0;i<len;i++)
{
int s=sum[i]+c;
sum[i]=s%10;
c=s/10;
}
}
int main(int argc, char *argv[])
{
int i,j,cas,n,c,k,t;
char ch1[MAXN],ch[10];
int flag1,flag2,flag3;
while(gets(ch)!=NULL)
{
flag1=0,flag2=0,flag3=0;
memset(ch1,0,sizeof(ch1));
memset(sum,0,sizeof(sum));
for (i=0;ch[i]!=' ';i++)
ch1[i]=ch[i];
ch1[i]='\0';
if(ch[7]==' ') n=0;//前六位是底数 后两位是指数
else if(ch[7]>='0' && ch[7]<='9') n=(ch[7]-48)*10;
n=n+ch[8]-48;
int len1=strlen(ch1);
for (i=0;i<len1/2;i++)
{
char change;
change=ch1[i];
ch1[i]=ch1[len1-i-1];
ch1[len1-i-1]=change;
}
for (i=0;i<len1;i++)
if(ch1[i]=='.') break;
if (i<len1) t=n*i;//记录小数位数
else t=0;
if(n==1)//n==1的情况
{
for (j=0;j<6;j++)
if(ch1[j]!=0 && ch1[j]!='.' ) { flag3=1; break; }//是否为0.00000的情况
if(flag3)
{
for (j=0;j<len1;j++)
if(ch1[j]!='0' && ch1[j]!=' ') break;
int k1=j;
for (j=len1-1;j>=0;j--)
if(ch1[j]!='0') break;
int k2=j;
if(ch1[k1]=='.')//若为1.00000的情况
for (j=k2;ch1[j]!='.';j--)
printf("%c",ch1[j]);//直接打整数
else
for (j=k2;j>=k1;j--)
printf("%c",ch1[j]);
printf("\n");
}
else printf("0\n");
continue;
}
for (j=i;j<len1;j++)
ch1[j]=ch1[j+1];
for (i=0;i<len1;i++)
ch1[i]-=48;
if(t) ch1[len1-1]=0;
for (j=0;j<len1;j++)
{
c=0;
for (int k=0;k<MAXN;k++)
{
int s=ch1[j]*ch1[k]+c;
sum[k+j]+=s%10;
c=s/10;
}
}
Carry(MAXN);
for (i=1;i<=n-2;i++)
{
for (j=0;j<len1;j++)
{
c=0;
for (int k=0;k<MAXN;k++)
{
int s=sum[k]*ch1[j]+c;
sum1[k+j]+=s%10;
c=s/10;
}
}
for (cas=0;cas<MAXN;cas++)
sum[cas]=sum1[cas];
memset(sum1,0,sizeof(sum1));
Carry(MAXN);
}
c=0;
for (i=MAXN-1;i>=0;i--)
if(sum[i]) break;
for (k=i;k>=0;k--)
if(sum[k]!=0) { flag1=1 ; break; }
if(flag1)
{
for (;i>t-1;i--)
printf("%d",sum[i]);
for (k=i;k>=0;k--)
if(sum[k]!=0){ flag2=1;break; }
if(flag2)
{
if(t) printf(".");
int z=t;
while(1)
{
if(z==(1+i)) break;
printf("0");
z--;
}
if(t)
{
for (j=0;j<=i;j++)
if(sum[j]) break;
}
for (;i>=j;i--)
{
printf("%d",sum[i]);
}
}
printf("\n");
}
else
printf("0\n");
}
return 0;
}