#include <iostream>
using namespace std;
void chenab(char* a, long b)
{
char len = (char)strlen(a);
long tmpRet = 0;
long carrayNum = 0;
char i = 0;
for (i = 0; i < len; ++i)
{
tmpRet = (a[i] - '0') * b + carrayNum;
carrayNum = tmpRet / 10;
a[i] = tmpRet % 10 + '0';
}
while (carrayNum) {
a[i++] = carrayNum%10 + '0';
carrayNum/=10;
}
a[i] = 0;
}
void rever(char* a)
{
char len = (char)strlen(a) - 1;
for (char i = 0; i < (len + 1)/2; ++i)
{
a[i] ^= a[len - i];
a[len - i] ^= a[i];
a[i] ^= a[len - i];
}
}
void printLargetNum(char* a, char pointBit)
{
char len = (char)strlen(a);
for (char i = len - 1; i >= 0; --i) {
cout << a[i];
}
cout << endl;
}
long charArry2Long(char *a)
{
char len = (char)strlen(a);
long ret = 0;
for(char i = 0; i < len; ++i)
{
ret = ret * 10 + a[i] - '0';
}
return ret;
}
char formatBeforeRever(char* a, bool removePoint = true)
{
char len = (char)strlen(a);
bool cutting = true;
char cutBit = 0;
for(char i = len - 1; i >= 0; --i)
{
if (cutting and a[i] != '0')
{
cutBit = i + 1;
cutting = false;
}
if (a[i] == '.') {
if (i + 1 == cutBit) {
cutBit = i;
a[cutBit] = 0;
}
else if (removePoint)
{
memmove(a+i, a + i + 1, strlen(a + i + 1) + 1);
a[cutBit-1] = 0;
}
char ret = cutBit - 1 - i;
return ret < 0?0:ret;
}
}
return 0;
}
void printLargeNum(char* retArray, char pointbit)
{
if (pointbit != 0) {
memmove(retArray+pointbit + 1, retArray+pointbit, strlen(retArray+pointbit) + 1);
retArray[pointbit] = '.';
}
rever(retArray);
formatBeforeRever(retArray, false);
if (pointbit > strlen(retArray)) {
cout << '.';
for (char i = pointbit - strlen(retArray); i; --i) {
cout << '0';
}
}
cout << retArray << endl;
}
void test1001()
{
int n; char a[126];
char pointBit = 0;
long b = 0;
while (cin >> a >> n) {
if (not n) {
cout << 1 << endl;
continue;
}
pointBit = formatBeforeRever(a);
b = charArry2Long(a);
rever(a);
for (char i = 1; i < n; ++i)
{
chenab(a, b);
}
printLargeNum(a, n * pointBit);
}
}
int main() {
test1001();
return 0;
}