비밀번호 이름 찾기

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

요약
길이 3~8인 여자 이름 2~5개를 찾아 그 이름들의 두 개씩 연결로 주어진 모든 비밀번호를 만들어내는 최소 이름 집합을 구하는 문제입니다.
난이도

보통10점 중 6점

유형
문자열, 백트래킹, 완전 탐색
정답자
아직 제출이 없습니다

문제

Charlie는 여러 이메일 주소를 자주 사용하는 능숙한 인터넷 사용자입니다. 각 이메일 주소는 비밀번호로 보호되어 있습니다. Charlie는 기억력이 좋지 않아, 만들기 쉽고 외우기 쉬운 규칙을 정했습니다. 각 비밀번호는 그가 몰래 좋아하는 여자아이 두 명의 이름을 이어 붙인 문자열입니다.

Charlie가 몰래 좋아하는 여자아이는 최소 2명, 최대 5명입니다. 이름은 모두 서로 다르며, 각 이름은 영문 소문자 3자 이상 8자 이하입니다. Lucy는 Charlie가 비밀번호를 만드는 규칙을 알고 있고, 그의 비밀번호를 모두 찾아냈습니다. 비밀번호를 만드는 데 사용된 이름들의 가능한 최소 집합을 찾는 프로그램을 작성하세요.

입력

첫째 줄에 비밀번호의 개수 N이 주어집니다 (1 ≤ N ≤ 100).

다음 N개의 줄에는 비밀번호가 하나씩 주어집니다. 비밀번호는 영문 소문자 a부터 z까지로 이루어진 길이 16 이하의 문자열입니다.

출력

첫째 줄에 비밀번호를 구성하는 이름의 최소 개수 S를 출력합니다.

다음 S개의 줄에는 해당 이름들을 사전순 오름차순으로 하나씩 출력합니다.

입력 데이터는 정답이 유일하도록 주어집니다.

예제3

  1. 예제 1

    입력
    2
    ivaana
    anaiva
    
    예상 출력
    2
    ana
    iva
    
  2. 예제 2

    입력
    3
    ananana
    nanahana
    hanaana
    
    예상 출력
    3
    ana
    hana
    nana
    
  3. 예제 3

    입력
    3
    nemikirk
    daglaskirk
    kirkdaglas
    
    예상 출력
    3
    daglas
    kirk
    nemi