package Ġthe o Ċ Ċ class ĠThe o 3 2 Ġ{ ĊĊĠĠĠ Ġfun Ġmain () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalphabet Ġ= ĠlistOf (' a ', Ġ' b ') ĊĊĠĠĠĠĠĠĠ Ġval Ġstate 0 Ġ= ĠState (" q 0 ", Ġis Start Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġstate 1 Ġ= ĠState (" q 1 ", Ġis Final Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġstate 2 Ġ= ĠState (" q 2 ", Ġis Final Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġstate 3 Ġ= ĠState (" q 3 ") ĊĠĠĠĠĠĠĠ Ġval Ġstate 4 Ġ= ĠState (" q 4 ") ĊĠĠĠĠĠĠĠ Ġval Ġstate 5 Ġ= ĠState (" q 5 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġstates Ġ= ĠlistOf ( state 0 , Ġstate 1 , Ġstate 2 , Ġstate 3 , Ġstate 4 , Ġstate 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtransitions Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 0 , Ġstate 1 , Ġ' a '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 0 , Ġstate 0 , Ġ' b '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 1 , Ġstate 4 , Ġ' a '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 1 , Ġstate 2 , Ġ' b '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 2 , Ġstate 3 , Ġ' a '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 2 , Ġstate 1 , Ġ' b '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 3 , Ġstate 5 , Ġ' a '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 3 , Ġstate 1 , Ġ' b '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 4 , Ġstate 5 , Ġ' a '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 4 , Ġstate 2 , Ġ' b '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 5 , Ġstate 1 , Ġ' a '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( state 5 , Ġstate 5 , Ġ' b ') ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġd ( from State : ĠState , Ġwith Letter : ĠChar ) Ġ= Ġtransitions . first Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . from State Ġ== Ġfrom State Ġ&& Ġit . with Letter Ġ== Ġwith Letter ĊĠĠĠĠĠĠĠ Ġ}. to State ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġu Ġ= Ġmutable Set Of < Set < State >>() ĊĊĠĠĠĠĠĠĠ Ġstates . filter Ġ{ Ġit . is Final Ġ}. forEach Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . filter Ġ{ Ġ! it . is Final Ġ}. forEach Ġ{ Ġq Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . add ( set Of ( p , Ġq )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 ĊĠĠĠĠĠĠĠ Ġvar Ġdid Work : ĠBoolean ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Work Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . forEach Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstates . forEach Ġ{ Ġq Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! u . contains ( set Of ( p , Ġq ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalphabet . forEach Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( u . contains ( set Of ( d ( p , Ġa ), Ġd ( q , Ġa )))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Work Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . add ( set Of ( p , Ġq )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( did Work ) ĊĊĠĠĠĠĠĠĠ Ġprintln ( u ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠState ( val Ġlabel : ĠString , Ġval Ġis Final : ĠBoolean Ġ= Ġfalse , Ġval Ġis Start : ĠBoolean Ġ= Ġfalse ) ĊĊĠĠĠ Ġdata Ġclass ĠTransition ( val Ġfrom State : ĠState , Ġval Ġto State : ĠState , Ġval Ġwith Letter : ĠChar ) Ċ } Ċ