만드는 중입니다

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

양방향 코드

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

요약
10^18 미만의 n이 주어질 때, n을 10개 이하의 팰린드롬 수의 합으로 나타내고 그 개수와 각 팰린드롬을 출력한다.
난이도

어려움10점 중 8점

유형
수학, 그리디, 구현, 문자열 매칭
정답자
아직 제출이 없습니다

문제

지구와 위성 사이의 우주 통신에서는 4G 같은 휴대폰 통신처럼 메시지를 그냥 보낼 수 없다. 신호가 이동하는 거리가 매우 길어서 잡음 때문에 메시지가 손상될 수 있기 때문이다.

연구자들은 오랜 시간에 걸쳐 이 문제를 우회할 방법을 찾았고, 그 해답은 중복 데이터를 넣는 데 있었다. 그러면 수신자는 받은 데이터에 오류가 있는지 검사할 수 있고, 오류가 있으면 송신자에게 메시지를 다시 보내 달라고 요청하거나, 오류가 작을 경우 원래 메시지를 복구할 수도 있다. 이 연구 분야를 부호 이론이라고 한다.

우리는 실수를 막기 위해 새로운 중복 시스템을 만들었다. 이제 어떤 수를 보내려면 그 수를 회문수의 합으로 표현하는 방법을 찾아 각 회문수를 평소처럼 보내면 된다. 그러면 수신자는 받은 수가 회문수가 아닌지 검사할 수 있고, 그런 경우 오류가 발생했음을 알 수 있다.

통신을 충분히 효율적으로 유지하기 위해 연구소는 수를 많아야 1010개의 회문수의 합으로만 분해할 수 있다는 제약을 추가했다. 모든 수를 회문수들의 합으로 분해하는 방법을 찾아야 한다.

최근 논문은 모든 양의 정수가 세 회문수의 합이라는 사실을 보였다.

입력

  • 한 줄에 정수 nn (1≤n<10181\leq n < 10^{18})이 주어진다. 이 수를 회문수의 합으로 나타내야 한다.

출력

먼저 필요한 회문수의 개수 1≤k≤101\leq k\leq 10을 한 줄에 출력한다. 그다음 kk개의 줄에 각각 회문수를 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    1100000
    
    예상 출력
    2
    645546
    454454
    
  2. 예제 2

    입력
    1000
    
    예상 출력
    5
    1
    99
    1
    898
    1