#include <bits/stdc++.h>

#include "nlohmann/json.hpp"

using namespace std;
using json = nlohmann::json;

pair<string, string> splite_number(string s) {
  string integral_part, decimal_part;
  //小数点があるか判定し、整数部と小数部に分割
  bool decimal_flag = false;
  for (char c : s) {
    if (!decimal_flag) {
      if (c == '.') {
        decimal_flag = true;
        continue;
      } else {
        integral_part += c;
      }
    } else {
      decimal_part += c;
    }
  }
  //小数部がないならば、小数部の文字列をnothingにする
  if (!decimal_flag) decimal_part = "nothing";
  return {integral_part, decimal_part};
}

string integral_translate(string s) {
  // jsonファイルを開く
  ifstream i("number.json");
  json j;
  i >> j;

  //整数部の長さを取得
  int l = s.size();

  // 3ずつに区切ったときのブロックの数
  int block = l / 3 + (l % 3 == 0 ? 0 : 1);

  //先頭のブロックの文字数
  int head;
  if (l % 3 == 0)
    head = 3;
  else if (l % 3 == 2)
    head = 2;
  else if (l % 3 == 1)
    head = 1;

  //返す文字列
  string ans;

  //ブロックごとに処理
  for (int i = 0; i < block; i++) {
    //ブロックの切り出し
    string tmp;
    if (i == 0) {  //先頭ブロックの処理
      tmp = s.substr(0, head);
    } else {  //それ以外のブロックの処理
      tmp = s.substr(head * i, 3);
    }

    //ブロック内が000なら読まない
    if (tmp == "000") continue;

    // jsonファイルを参照する時のkey
    string moji;

    //英語に変換
    if (i == 0 && head != 3) {  //先頭ブロックが3文字でないとき
      if (head == 2) {          //先頭ブロックが2文字
        //十の位
        moji = tmp[0];
        moji += '0';
        ans += j[moji].get<string>();

        //一の位
        moji = tmp[1];
        if (tmp[1] != '0') {
          //前に単語があるので空白を入れる
          ans += " ";

          ans += j[moji].get<string>();
        }
      } else {  //先頭ブロックが1文字
        moji = tmp[0];
        ans += j[moji].get<string>();
      }
    } else {  //先頭ブロックが3文字のときとその他ブロックの処理
      //百の位
      moji = tmp[0];
      ans += j[moji].get<string>();
      ans += " ";
      ans += "hundred ";

      //十の位
      moji = tmp[1];
      moji += '0';
      ans += j[moji].get<string>();
      ans += " ";

      //一の位
      moji = tmp[2];
      if (tmp[2] != '0') ans += j[moji].get<string>();
    }

    //単語の間に空白を入れる
    ans += " ";

    // thousand,million,billion,trillionなどを付与する
    int scale = block - i - 1;
    if (scale == 4)
      ans += "trillion ";
    else if (scale == 3)
      ans += "billion ";
    else if (scale == 2)
      ans += "million ";
    else if (scale == 1)
      ans += "thousand ";
  }
  return ans;
}

string decimal_translate(string s) {
  // jsonファイルを開く
  ifstream i("number.json");
  json j;
  i >> j;

  //返す文字列
  string ans;

  // 1文字ずつ変換する
  for (char c : s) {
    // keyがstring型なので変換する
    string tmp = {c};

    //英訳する
    ans += j[tmp];

    //単語の間に空白を入れる
    ans += " ";
  }
  //最後の空白はいらないので削除する
  ans.pop_back();

  return ans;
}

string translate(string s) {
  string answer;
  //文字列を整数部と小数部に分割
  auto [integral_part, decimal_part] = splite_number(s);
  //整数部を英語読みにする
  answer = integral_translate(integral_part);
  //小数部を英語読みする
  if (decimal_part != "nothing") {
    //小数部がある場合、区切りにpointが入る
    answer += "point ";
    //小数点以下の翻訳
    answer += decimal_translate(decimal_part);
  }
  return answer;
}

int main() {
  string s;
  cin >> s;
  cout << translate(s) << endl;
  return 0;
}