start(0). t(0,a,0). t(0,a,1). t(0,[],2). t(1,b,2). final(1). accept(S):-start(I),path(I,S). path(K,[_]):-final(K). path(K,[H|T]):-t(K,H,N),path(N,T). path(K,X):-t(K,[],N),path(N,X).