만드는 중입니다

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

수수께끼 수

면접 대비

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

요약
10^45 미만의 십진수 N을 세 자리 이하의 수 K개로 이어 붙여 만들 때, 각 수를 한 번씩만 쓰면서 사용하는 조각의 개수가 가장 적은 분할을 찾습니다.
난이도

보통10점 중 5점

유형
동적 계획법, 문자열, 해시맵
정답자
아직 제출이 없습니다

문제

John은 Research Institute for the Meaning of Life의 주니어 연구원이다. 최근 그는 십진수 NN에 인간의 삶과 관련된 몇 가지 문제를 밝혀 줄 지식이 담겨 있다는 사실을 발견했다. 하지만 John은 이기적인 사람이라 이 발견을 나누고 싶어 하지 않는다. 그래서 그는 이 수를 외우고 이와 관련된 모든 기록을 없애기로 했다.

안타깝게도 John은 다소 산만하고 잘 잊어버려서 다음 방법으로 NN을 외우기로 했다. 그에게는 삶과 관련된 수 KK개의 집합이 있으며, 이 수들은 생일보다도 더 잘 기억한다. 이 수들은 모두 세 자리 이하이다.

John은 NN을 이 집합의 수들을 이어 붙여 나타내려 한다. 예를 들어 1과 2를 이어 붙이면 순서에 따라 12 또는 21이 된다. 같은 수는 두 번 쓸 수 없지만, 집합의 모든 수를 반드시 쓸 필요는 없다. John은 가능한 한 적은 개수의 수로 나타내기를 원한다. 이런 표현을 찾는 프로그램을 작성하라.

입력

첫 줄에 정수 NN (1≤N<10451 \le N < 10^{45})이 주어진다. 둘째 줄에는 집합의 크기 KK (1≤K≤10001 \le K \le 1000)가 주어진다. 셋째 줄에는 기억하는 수 KK개가 주어진다 (0≤ai<10000 \le a_i < 1000). 집합의 수는 모두 서로 다르며, 불필요한 선행 0이 없다.

출력

첫 줄에 분할의 크기 MM을 출력한다. 이어서 MM개의 줄에 NN을 얻으려면 이어 붙여야 하는 순서대로 분할을 이루는 수를 한 줄에 하나씩 출력한다.

조건을 만족하는 분할이 여러 개이면 아무거나 출력해도 된다. 조건을 만족하는 분할이 적어도 하나 존재함이 보장된다.

예제2

  1. 예제 1

    입력
    123
    4
    1 3 12 23
    
    예상 출력
    2
    12
    3
    
  2. 예제 2

    입력
    123
    4
    1 2 3 123
    
    예상 출력
    1
    123