카드
시간 제한2초메모리 제한1024 MB
카드 복사를 허용할 때 단어 t를 부분 문자열로 포함하는 카드 행을 만들고, 사용한 카드 수가 최소가 되도록 구하여 그 문자열을 출력합니다.
문제
보바는 아주 조용한 소년이라서 조용히 앉아 무언가를 하는 것을 좋아한다. 최근 부모님이 라틴 알파벳으로 된 단어가 하나씩 적힌 카드 세트를 선물했다. 카드의 단어들은 어떤 단어도 다른 단어의 접미사가 되지 않도록 골라져 있다.
부모님이 단어 를 말하면, 보바는 카드 여러 장을 한 줄로 늘어놓아 를 부분 문자열로 포함하는 긴 문자열 를 만든다. 카드끼리 겹쳐 놓을 수 없다. 보바는 복사기를 사용해 가진 카드를 원하는 만큼 복사할 수 있다.
보바가 이 과제를 완료하기 위해 사용해야 하는 카드의 최소 개수를 구하라.
입력
첫 줄에 단어 가 주어진다. 길이는 를 넘지 않는다.
둘째 줄에 보바가 가진 서로 다른 카드의 개수 ()이 주어진다. 이어서 개의 줄에 카드마다 적힌 단어가 한 줄씩 주어진다. 모든 카드 단어의 길이 합은 를 넘지 않는다.
어떤 카드의 단어도 다른 카드의 단어의 접미사가 되지 않는다. 단어 $t`와 카드의 단어는 모두 소문자 라틴 알파벳으로만 이루어진다.
출력
첫 줄에 사용한 카드의 개수 를 출력한다. 복사한 카드도 포함한다.
둘째 줄에는 장의 카드를 한 줄로 배치해 만든 단어 를 출력한다. 는 를 부분 문자열로 포함해야 한다. 답이 여러 개이면 그중 아무거나 출력한다.
카드를 이런 방식으로 배치할 수 없으면 No solution을 출력한다.