Машинное обучение
시간 제한2초메모리 제한1024 MB
길이 n 이하의 모든 이진 단어에 대한 수용 여부가 주어질 때, 이를 정확히 인식하는 최소 상태 DFA를 구성한다.
문제
Машинное обучение --- раздел теоретической информатики, который изучает возможности алгоритмов и компьютерных программ <<обучаться>>. Обычно обучение происходит с использованием так называемых обучающих примеров. В этой задаче вам предстоит реализовать простейший вариант машинного обучения, натренировав детерминированный конечный автомат правильно распознавать слова из заданного множества.
Формально детерминированный конечный автомат представляет собой набор из четырех элементов: , где --- конечное множество, которое представляет собой входной алфавит (в этой задаче будем полагать, что ), --- это некоторое конечное множество состояний, --- начальное состояние, --- множество допускающих состояний, а представляет собой функцию переходов.
Входом для автомата является слово , составленное из символов алфавита . Исходно автомат находится в состоянии . На каждом шаге он читает очередной символ входного слова и изменяет свое состояние на , где --- текущее состояние. После этого автомат переходит к следующему символу входного слова. Если когда слово целиком обработано автомат оказывается в допускающем состоянии, то говорят, что автомат допускает слово , иначе говорят, что он его не допускает.
Разделим все слова длиной от 0 до заданного числа на два множества: и . Говорят, что автомат соответствует этому разбиению, если он допускает все слова из и не допускает все слова из . Заметим, что слова длиннее могут как допускаться, так и не допускаться автоматом.
Требуется построить автомат, соответствующий заданному разбиению, имеющий минимальное количество состояний.
입력
Первая строка входного файла содержит число (). Следующие строк описывают и . Каждая строка содержит по одному слову, перед словом идет <<+>>, если оно содержится в , либо <<->>, если оно содержится в . Слова упорядочены по длине, а при равной длине --- лексикографически.
출력
На первой строке выходного файла выведите число --- минимальное количество состояний в автомате () и --- номер начального состояния (состояния нумеруются от до ).
Вторая строка должна содержать --- количество допускающих состояний, затем должно следовать целых чисел --- номера допускающих состояний.
Следующие строк должны описывать переходы, каждая из этих строк должна содержать по два числа, -я из строк должна содержать и .