Машинное обучение

시간 제한2초메모리 제한1024 MB

요약
길이 n 이하의 모든 이진 단어에 대한 수용 여부가 주어질 때, 이를 정확히 인식하는 최소 상태 DFA를 구성한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디, 구현, 비트 연산
정답자
아직 제출이 없습니다

문제

Машинное обучение --- раздел теоретической информатики, который изучает возможности алгоритмов и компьютерных программ <<обучаться>>. Обычно обучение происходит с использованием так называемых обучающих примеров. В этой задаче вам предстоит реализовать простейший вариант машинного обучения, натренировав детерминированный конечный автомат правильно распознавать слова из заданного множества.

Формально детерминированный конечный автомат представляет собой набор из четырех элементов: ⟨Σ,U,s,T,φ⟩\langle\Sigma, U, s, T, \varphi\rangle, где Σ\Sigma --- конечное множество, которое представляет собой входной алфавит (в этой задаче будем полагать, что Σ=0,1\Sigma = \\{0, 1\\}), UU --- это некоторое конечное множество состояний, s∈Us \in U --- начальное состояние, T⊂UT \subset U --- множество допускающих состояний, а φ:U×Σ→U\varphi : U \times \Sigma \rightarrow U представляет собой функцию переходов.

Входом для автомата является слово α\alpha, составленное из символов алфавита Σ\Sigma. Исходно автомат находится в состоянии ss. На каждом шаге он читает очередной символ cc входного слова и изменяет свое состояние на φ(u,c)\varphi(u, c), где uu --- текущее состояние. После этого автомат переходит к следующему символу входного слова. Если когда слово целиком обработано автомат оказывается в допускающем состоянии, то говорят, что автомат допускает слово α\alpha, иначе говорят, что он его не допускает.

Разделим все слова длиной от 0 до заданного числа nn на два множества: S+S^+ и S−S^-. Говорят, что автомат соответствует этому разбиению, если он допускает все слова из S+S^+ и не допускает все слова из S−S^-. Заметим, что слова длиннее nn могут как допускаться, так и не допускаться автоматом.

Требуется построить автомат, соответствующий заданному разбиению, имеющий минимальное количество состояний.

입력

Первая строка входного файла содержит число nn (1≤n≤121 \le n \le 12). Следующие 2n+1−12^{n+1}-1 строк описывают S+S^+ и S−S^-. Каждая строка содержит по одному слову, перед словом идет <<+>>, если оно содержится в S+S^+, либо <<->>, если оно содержится в S−S^-. Слова упорядочены по длине, а при равной длине --- лексикографически.

출력

На первой строке выходного файла выведите число uu --- минимальное количество состояний в автомате (u≥1u \ge 1) и ss --- номер начального состояния (состояния нумеруются от 11 до uu).

Вторая строка должна содержать tt --- количество допускающих состояний, затем должно следовать tt целых чисел --- номера допускающих состояний.

Следующие uu строк должны описывать переходы, каждая из этих строк должна содержать по два числа, ii-я из строк должна содержать φ(i,0)\varphi(i, 0) и φ(i,1)\varphi(i, 1).

예제1

  1. 예제 1

    입력
    2
    +
    +0
    -1
    +00
    -01
    -10
    -11
    
    예상 출력
    2 1
    1 1
    1 2
    2 2