#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000,100000000000")
const int INF = 1e9;
const long double cp = 2 * asin(1.0);
const long double eps = 1e-9;
const long long mod = 1000000007;
using namespace std;
int conv(string s) {
  int res = 0;
  for (int i = 0; i < s.size(); i++) res *= 10, res += s[i] - '0';
  return res;
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  string expression;
  cin >> expression;
  string firstPartwoP, firstPartwP, secondPart, result, betRes;
  bool e = false, point = false;
  for (int i = 0; i < expression.size(); i++) {
    if (expression[i] == '.')
      point = true;
    else if (expression[i] == 'e')
      e = true;
    else if (!e && !point)
      firstPartwoP += expression[i];
    else if (!e && point)
      firstPartwP += expression[i];
    else
      secondPart += expression[i];
  }
  bool isP = false;
  int _move = conv(secondPart);
  int a = conv(firstPartwoP);
  result += firstPartwoP;
  if (_move >= firstPartwP.size())
    result += firstPartwP;
  else {
    for (int i = 0; i < _move; i++) result += firstPartwP[i];
    result += '.';
    for (int i = _move; i < firstPartwP.size(); i++) result += firstPartwP[i];
    isP = true;
  }
  if (_move >= firstPartwP.size())
    for (int i = 0; i < _move - firstPartwP.size(); i++) result += '0';
  if (isP) {
    while (result[result.size() - 1] == '0')
      result.erase(result.begin() + result.size() - 1);
    if (result[result.size() - 1] == '.')
      result.erase(result.begin() + result.size() - 1);
  }
  while (result[0] == '0') result.erase(result.begin());
  if (result[0] == '.') result = "0" + result;
  if (result[result.size() - 1] == '.')
    result.erase(result.begin() + result.size() - 1);
  if (!result.size()) result = "0";
  cout << result;
  return 0;
}
