만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

전화번호

시간 제한2초메모리 제한512 MB

요약
하이픈으로 적힌 전화번호를 1부터 999999999 사이의 수로 다시 나누어, 러시아어로 똑같이 읽히는 전화번호를 모두 찾습니다.
난이도

보통10점 중 7점

유형
문자열, 백트래킹, 동적 계획법
정답자
아직 제출이 없습니다

문제

Vasya는 얼마 전 전화로 전화번호를 불러 받았다. 그는 숫자를 하이픈으로 구분해 번호를 적었지만, 제대로 옮겨 적었는지 의심하기 시작했다. 서로 다른 전화번호인데도 같은 방식으로 읽히는 경우가 있기 때문이다. 예를 들어 "3000-100-1", "3000-101", "3100-1", "3101" 네 번호는 모두 "три тысячи сто один"(삼천백일)로 읽힌다. Vasya는 자기가 적은 번호와 똉 같은 방식으로 읽히는 전화번호를 모두 찾고 싶어 한다.

Vasya는 전화번호를 읽을 때 아홉 자리를 넘는 수는 쓰이지 않는다고 생각한다. 1부터 999 999 999999\,999\,999까지의 수는 다음과 같이 읽는다.

수가 1 000 0001\,000\,000 이상이면 먼저 백만 단위의 수를 남성형으로 읽고, 이어서 "миллион", "миллиона", "миллионов" 중 하나를 붙인다. 백만 단위 수를 100으로 나눈 나머지가 11이 아니고 10으로 나눈 나머지가 1이면 "миллион"을 쓴다. 100으로 나눈 나머지가 12, 13, 14가 아니고 10으로 나눈 나머지가 2, 3, 4이면 "миллиона"를 쓴다. 그 외에는 "миллионов"를 쓴다.

수를 1 000 0001\,000\,000으로 나눈 나머지가 1 0001\,000 이상이면 다음으로 천 단위의 수를 여성형으로 읽고, 이어서 "тысяча", "тысячи", "тысяч" 중 하나를 붙인다. 천 단위 수를 100으로 나눈 나머지가 11이 아니고 10으로 나눈 나머지가 1이면 "тысяча"를 쓴다. 100으로 나눈 나머지가 12, 13, 14가 아니고 10으로 나눈 나머지가 2, 3, 4이면 "тысячи"를 쓴다. 그 외에는 "тысяч"를 쓴다.

마지막으로 수를 1 0001\,000으로 나눈 나머지가 0이 아니면 그 나머지 수를 남성형으로 읽는다.

예를 들어 978 121 014978\,121\,014는 "девятьсот семьдесят восемь миллионов сто двадцать одна тысяча четырнадцать"로 읽고, 1 000 1421\,000\,142는 "один миллион сто сорок два"로 읽는다. "миллион" 앞의 "один"은 생략할 수 없고, "тысяча" 앞의 "одна"도 생략할 수 없다. 11부터 19까지의 수는 한 단어로 읽는다.

입력

입력은 Vasya가 적은 전화번호가 적힌 한 줄이다. 번호는 양의 정수를 하이픈으로 이어 쓴 것이다. 각 정수는 최대 아홉 자리이며 앞에 0이 붙지 않는다. Vasya가 적은 번호에 나오는 숫자는 최대 50개이다.

출력

첫 줄에는 Vasya가 적은 번호와 같은 방식으로 읽히는 전화번호의 개수를 출력한다. 다음 줄부터 그 전화번호를 한 줄에 하나씩 출력한다. 각 번호는 1부터 999 999 999999\,999\,999까지의 정수를 하이픈으로 이은 것이어야 한다. 출력 순서는 상관없다. 답에 나오는 번호의 개수는 100 000100\,000을 넘지 않는다. 답에 포함된 번호는 숫자가 50개를 넘을 수도 있다.

예제1

  1. 예제 1

    입력
    3000-101
    
    예상 출력
    4
    3000-100-1
    3000-101
    3100-1
    3101