알고리즘 교육
시간 제한1.5초메모리 제한512 MB
교사마다 아는 알고리즘 목록이 주어질 때, 학생들이 받는 교육 범위가 서로 포함 관계에 놓이지 않도록 팀을 꾸리는 최대 학생 수를 구합니다.
문제
라틴 아메리카 초보자 지역 대회가 다가오고 있으며, 바이트랜드 대학교는 신입생으로 팀을 꾸려 이 대회에 내보내려 한다. 이 대학에는 알고리즘을 가르칠 수 있는 교사가 명 있다. 각 지원 학생은 교사 한 명에게 교육을 받으며, 그 교사가 아는 알고리즘 중 공집합이 아닌 부분집합으로 훈련받는다. 예를 들어 교사가 PRIM과 KRUSKAL을 안다면, 그 교사는 학생을 PRIM만, KRUSKAL만, 또는 둘 다로 교육할 수 있다. 이처럼 이 교사가 학생을 교육하는 방법은 세 가지다. 일반적으로 개의 서로 다른 알고리즘을 아는 교사는 학생을 가지 방법으로 교육할 수 있다. 대학에는 신입생이 많고 교사가 가르칠 수 있는 학생 수에도 제한이 없으므로, 이 가지 선택지는 모두 실행될 수 있다.
대학은 가능한 한 많은 학생으로 팀을 구성하려 한다. 다만 최종 팀의 학생들은 모두 서로 협력할 수 있어야 한다. 즉, 학생 각자가 상대방은 배우지 않은 알고리즘을 배운 상태여야 한다. 예를 들어 BFS와 DFS를 배운 학생은 DFS와 DIJKSTRA를 배운 다른 학생과 협력할 수 있다. 첫 번째 학생은 BFS를 배웠고 두 번째 학생은 BFS를 배우지 않았기 때문이다. 반면 BFS와 DFS를 배운 학생은 BFS만 배운 학생, DFS만 배운 학생, BFS와 DFS를 모두 배운 학생 등과는 협력할 수 없다.
입력
첫 줄에 교사의 수 ()이 주어진다. 다음 개 줄 각각은 교사 한 명을 나타낸다. 각 줄에는 교사가 아는 알고리즘의 수 ()가 먼저 주어지고, 이어서 서로 다른 공집합이 아닌 알고리즘 이름 개가 주어진다. 각 이름은 최대 10개의 대문자 알파벳으로 이루어진다.
출력
팀의 모든 학생이 서로 협력할 수 있도록 구성했을 때, 팀에 포함할 수 있는 학생 수의 최댓값을 정수 한 줄로 출력한다.