import java.util.*;

public class Main{
    public static String[] ones = new String[]{"zero","one","two","three","four","five","six","seven","eight","nine"};
    public static String[] tens = new String[]{"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
    public static String[] wholeTen = new String[]{"zero","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
    //wholeTen里带上0和10,是为了保证20在下标2的位置。但是用不到0和10
    /*下面是科学计数法表示:e前面的是基数,e后面的是10的幂数,也是就是说:
    1e2=1*(10的平方)=100,一百,one hundred;
    1e3=1*(10的立方)=1,000,一千,one thousand;
    1e6=1*(10的6次方)=1,000,000,一百万,one million;
    1e9=1*10^9=1,0亿00,000,000,10亿,one billion;
    1e12=1*10^12=1,000,0亿00,000,000,一万亿,one trillion。
    题中说明:
数字为正整数,不考虑小数,转化结果为英文小写;
保证输入的数据合法
关键字提示:and,billion,million,thousand,hundred。
数据范围:1≤n≤2000000 ,2,000,000小于等于两百万。two million 小于等于2*1e6
1,652,510:  one million six hundred and fifty two thousand five hundred and ten
             1  million  6               5     2  thousand  5               10
     */
    public static int[] range = new int[]{(int)1e2, (int)1e3, (int)1e6, (int)1e9, (int)1e12};
    public static String[] ranges = new String[]{"hundred","thousand","million","billion","trillion"};
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLong()){
            long n = sc.nextLong();//输入一个long型整数
            System.out.println(transformEnglish(n));
        }
    }
/*
1,652,510:  one million six hundred and fifty two thousand five hundred and ten
             1  million  6               5     2  thousand  5               10
*/
    private static String transformEnglish(long num) {
        if(num >= 0 && num <= 9) {
            return ones[(int) num];//0,1,2,3,4,5,6,7,8,9。
        }else if(num >= 10 && num <= 19) {
            return tens[(int) num % 10];//10%10=0 ten,11%10=1 eleven,12%10=2 twelve,...,19%10=9。
        }else if(num >= 20 && num <= 99) {
            return wholeTen[ (int) num / 10]
                   + (num % 10 == 0 ? "" : (" " + ones[(int) (num % 10)]) );
            //21= 20 + 21%10=20+1,20/10=2=wholeTen[2]=twenty,twenty one;
            // 99= 90 + 99%10 = 90+9,90/10=9=wholeTen[9]=ninety,ninety nine
        }
/*注意:题目要求十位和个位之间不加-。下面先写上
* 100:  one hundred
145:  one hundred and forty-five = 145/100 = 145 / 1e2 = one hundred
1,234:  one thousand two hundred and thirty-four
8,088:  eight thousand (and) eighty-eight (注意:这个and可加可不加,这个题目我们选择不加)
486,669:  four hundred and eighty-six thousand six hundred and sixty-nine
1,652,510:  one million,six hundred and fifty-two thousand,five hundred and ten
1,235,365,953:one billion,two hundred and thirty-five million,three hundred sixty-five thousand,nine hundred fifty-three。
1,000,0亿00,000,000,一万亿,one trillion。
*
* */
        else if (num >= 100) {
            //递归调用
            for (int i = 0; i < 4; i++) {//每循环一次,就会多一个单词hundred,thousand...
                if(num < range[ i + 1 ]){
                    //i=0,i+1=1,小于1e3,使用hundred;i=1,i+1=2,小于1e6,使用thousand;
                    // i=2,i+1=3,小于1e9,使用million;i=3,i+1=4,小于1e12,使用billion。
                 /*   return
                            transformEnglish(num / range[i] )+ " " + ranges[i]
                            + (
                                num % range[i] == 0 ? "" : (i != 0 ? " " : " and ")
                                + transformEnglish(num % range[i])
                              );*/
                    String str =
                            num % range[i] == 0 ? "" : (i != 0 ? " " : " and ")
                            +  transformEnglish(num % range[i]);
/* i>0的时候,后面还有数字需要循环调用。
        1,234=one thousand(i!=0,用空格)two hundred and thirty-four
        100,023=one hundred thousand and twenty-three  但是此题要求这个and不用加。所以是one hundred thousand twenty-three
   1=0时,145:  one hundred and forty-five    */
                    return transformEnglish(num / range[i] ) + " " + ranges[i] + str;
                }
            }
        }
        return "";
    }
}