DFA
시간 제한1초메모리 제한128 MB
유한 개의 단어로 이루어진 언어를 정확히 인식하는 DFA의 최소 상태 수를 구합니다.
문제
결정적 유한 오토마타(DFA)는 방향 간선을 가진 멀티그래프이다. 정점은 상태(state), 간선은 전이(transition)라고 부른다.
DFA의 모든 전이에는 글자 하나가 적혀 있다. 또한 각 상태 와 각 글자 에 대해, 에서 나가면서 글자 이 적힌 전이는 최대 한 개만 존재한다.
DFA에는 시작 상태가 하나 있고, 최종 상태들의 집합(상태 전체의 부분집합)이 있다. DFA는 하나의 언어를 정의한다. 어떤 단어가 이 언어에 속하려면, 시작 상태에서 출발하여 어떤 최종 상태에 도달하는 경로가 있어야 하고, 그 경로의 간선에 적힌 글자들을 순서대로 이어 붙인 것이 그 단어와 같아야 한다.
단어의 개수가 유한한 언어가 주어지면, 이 언어를 정확히 인식하는 DFA를 항상 만들 수 있다. 예를 들어 언어 {fix, foo, ox}를 단순하게 나타낸 DFA는 상태가 7개이지만, 이는 상태 수가 가장 적은 DFA가 아니다. 같은 언어를 상태 5개로도 나타낼 수 있으며, 5개보다 적은 상태로는 이 언어를 나타낼 수 없다.
언어가 주어졌을 때, 이 언어를 인식하는 DFA를 만드는 데 필요한 상태의 최소 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 단어의 개수 이 주어진다. ()
다음 개의 줄에는 단어가 한 줄에 하나씩 주어진다. 각 단어는 알파벳 소문자로만 이루어져 있으며 길이는 최대 30이다. 입력으로 주어지는 모든 단어는 서로 다르다.
출력
첫째 줄에 주어진 언어를 인식하는 DFA를 만드는 데 필요한 상태의 최소 개수를 출력한다.