피자 파티!
시간 제한3초메모리 제한1024 MB
절대적 토핑 요구와 혼 절 형식의 함의(여러 토핑의 논리곱 또는 논리합이 다른 토핑을 함의)가 주어질 때, 모든 선호를 만족하는 피자의 최소 토핑 수를 구한다.
문제
당신은 컴퓨터 과학 학회를 공동 주최하고 있으며, 학회 손님을 위한 피자 파티를 맡고 있다. 각 손님은 토핑 조합에 대한 선호를 가지고 있고, 손님들은 학회장 연회장에서 테이블별로 묶여 앉는다. 피자는 테이블마다 하나씩 제공된다. 특정 테이블의 모든 손님을 만족시키는 피자 토핑을 찾아 각 테이블의 집단적 선호를 파악해야 한다. 토핑마다 비용을 지불하므로, 학회 주최측은 각 테이블의 피자에 대해 만족을 주는 토핑의 최소 집합을 찾고 싶어 한다.
피자 선호는 절대 형태 또는 함의 형태의 문장으로 주어진다. pepperoni에 대한 절대 선호는 특정 손님을 만족시키려면 피자에 pepperoni가 반드시 있어야 한다는 문장이다. 함의 선호는 조건문이다. 예를 들어 if pepperoni and sausage then mushroom은 pepperoni와 sausage가 모두 있는 피자에는 mushroom도 있어야 한다는 뜻이다. pepperoni나 sausage 중 하나라도 피자에 없으면 mushroom에 대한 선호는 언급되지 않는다.
손님들은 이미 테이블별로 나뉘어 있고, 각 테이블의 선호는 모아져 있다. 각 테이블의 피자에 대한 토핑 배정을 찾는 것이 당신의 일이다.
입력
입력의 첫 줄에는 만들려는 피자에 대한 선호의 개수 ()가 주어진다. 이어서 개의 줄에 절대 선호 또는 함의 선호가 하나씩 주어진다.
각 토핑의 이름은 길이가 을 넘지 않는 한 단어이며, 알파벳 소문자로만 이루어진다. if, and, or, then은 피자 토핑의 이름으로 쓰일 수 없다.
절대 선호는 토핑 이름 하나로 이루어진다. 모든 함의 선호는 if and and ... and then 형태이거나 if or or ... or then 형태이며, 여기서 , , , 은 각각 토핑 이름이고 이다.
출력
주어진 테스트 케이스에 대해, 테이블의 모든 손님을 만족시키는 피자의 최소 토핑 개수 를 한 줄에 출력한다.