페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4627

메뉴만들기 1s 256MB

문제

식당을 운영하는 커미는 covid-19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있다.

기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 새로운 메뉴를 제공하기로 결정했다.

어떤 단품메뉴들을 조합해서 코스요리 메뉴로 구성하면 좋을지 고민하던 커미는

이전에 각 손님들이 주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성하기로 했다.

단, 코스요리 메뉴는 최소 2가지 이상의 단품메뉴로 구성하려고 한다.

또한, 최소 2명 이상의 손님으로부터 주문된 단품메뉴 조합에 대해서만 코스요리 메뉴 후보에 포함하기로 했다.

 

예를 들어, 손님 5명이 주문한 단품메뉴들의 조합이 다음과 같다면,

(각 손님은 단품메뉴를 2개 이상 주문해야 하며, 각 단품메뉴는 A ~ Z의 알파벳 대문자로 표기한다.)

 

손님 번호    주문한 단품메뉴 조합

1번 손님    A, B, C, F, G

2번 손님    A, C

3번 손님    C, D, E

4번 손님    A, C, D, E

5번 손님    B, C, F, G

6번 손님    A, C, D, E, H

 

가장 많이 함께 주문된 단품메뉴 조합에 따라 커미가 만들게 될 코스요리 메뉴 구성 후보는 다음과 같다.

 

코스 종류    메뉴 구성    설명

요리2개코스   A,C       1번, 2번, 4번, 6번 손님으로부터 총 4번 주문되었다.

요리3개코스   C,D,E     3번, 4번, 6번 손님으로부터 총 3번 주문되었다.

요리4개코스   B,C,F,G   1번,5번 손님으로부터 총 2번 주문되었다.

요리4개코스   A,C,D,E   4번, 6번 손님으로부터 총 2번 주문되었다.

 

커미가 운영하는 식당에 각 손님들이 주문한 단품메뉴 목록과

커미가 추가하고 싶어하는 코스요리를 구성하는 단품메뉴 목록이 주어질 때,

커미가 새로 추가하게 될 코스요리의 메뉴 구성을 구하는 프로그램을 작성하시오.​


입력

첫 행에 손님들의 수 N이 주어진다. ( 1 <= N <= 20)

다음 N개의 줄에 각 손님들이 주문한 단품메뉴들이 문자열형식으로 주어진다.

문자열은 대문자로 구성되며 각 문자는 하나의 단품메뉴를 의미한다.

단품메뉴들로 구성된 문자열의 길이는 2~10 이다.

 

다음 행에 커미가 추가하고 싶어하는 코스요리를 구성하는 

단품메뉴들의 갯수 M 이 주어진다. ( 1 <= M <= 9)

다음 행에 M개의 수가 공백으로 구분되어 주어지는데

각 수의 범위는 2 ~ 10 이며 오름차순으로 정렬되어 주어진다.

같은 값이 중복해서 주어지지 않는다.​ 


출력

첫 행에 가능한 모든 코스 요리 메뉴의 개수 C를 출력한다.

각각 코스요리별로 단품요리들을 정렬한 후,​

다음 C개의 행에 코스요리를 오름차순 정렬하여 출력한다.

적어도 1개의 코스요리가 있도록 입력이 주어진다.

 


예제 #1

6

ABCFG
AC
CDE
ACDE
BCFG
ACDEH
3
2 3 4
4

AC
ACDE
BCFG
CDE

예제 #2

7

ABCDE
AB
CD
ADE
XYZ
XYZ
ACD
3
2 3 5
5

ACD
AD
ADE
CD
XYZ

예제 #3

3

XYZ
XWY
WXA
3
2 3 4
2

WX
XY


출처

kakao2020_2 2번 | dnfka0930
로그인해야 코드를 작성할 수 있어요.