지역 코드 정하기

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

요약
여러 지역 코드 문자열 중 일부를 골라 모든 자릿수를 재배열해 가장 짧은 회문을 만들고, 사용한 지역 번호를 출력한다.
난이도

보통10점 중 5점

유형
그리디, 해시맵, 문자열, 구현
정답자
아직 제출이 없습니다

문제

때는 2123년, UDPC는 전세계의 많은 지역을 아우르는 거대한 대회로 자라났다. UDPC를 구성하는 NN개의 지역은 UDPC의 100주년을 맞아 모든 지역을 통일해 연합을 구성하기로 했다. 각 지역은 11부터 NN까지의 지역 번호로 구분된다. 하지만 통일 과정에서 사소한 문제가 발생하는데, 바로 지역마다 지역 코드가 제각각이라는 점이다.

지역 코드는 지역 번호와 다른 것으로, 각 지역에 배정된 00부터 99까지의 숫자로 이루어진 문자열이다. 긴 회의 끝에, 다음과 같은 규칙을 통해 새 연합의 지역 코드를 결정하기로 하였다.

  • 새 지역 코드는 기존 지역의 지역 코드 중 하나 이상을 골라 합친 뒤 문자 단위로 재배열한 것이어야 한다.
  • 새 지역 코드는 외우기 쉽도록 회문이어야 한다. 회문이란, 왼쪽에서 오른쪽으로 읽은 것과 오른쪽에서 왼쪽으로 읽은 것이 서로 같은 문자열을 말한다.
  • 새 지역 코드는 위의 조건을 만족하는 것 중 가장 짧은 것이다.

UDPC의 평화를 위해, 새 연합의 지역 코드를 구해 보자.

입력

첫째 줄에 지역의 수 NN이 주어진다. (1≤N≤106)(1\le N\le 10^6)

둘째 줄부터 NN개의 줄이 주어진다. 그중 ii번째 줄에 ii번 지역의 지역 코드를 나타내는 비어 있지 않은 문자열 S_iS\_i가 주어진다.

각 문자열은 00부터 99까지의 숫자로만 이루어져 있으며, 모든 문자열의 길이의 합은 2×1062\times 10^6 이하임이 보장된다.

출력

첫째 줄에 새 지역 코드의 길이를 출력한다. 만약 새 지역 코드를 만드는 것이 불가능할 경우 -1을 출력한다.

새 지역 코드를 만드는 것이 가능할 경우 아래와 같이 두 줄을 더 출력한다.

둘째 줄에 새 지역 코드를 이루는 지역의 수 MM을 출력한다.

셋째 줄에 새 지역 코드를 이루는 MM개 지역의 지역 번호를 공백으로 구분해 오름차순으로 출력한다.

가능한 방법이 여러 가지일 경우 그중 아무 것이나 출력한다.

예제3

  1. 예제 1

    입력
    5
    01
    123
    3111
    23
    123123
    
    예상 출력
    5
    2
    2 4
    
  2. 예제 2

    입력
    4
    010101
    101010
    1234789874321
    00112233445566
    
    예상 출력
    12
    2
    1 2
    
  3. 예제 3

    입력
    3
    052
    053
    054
    
    예상 출력
    -1