accept(Xs) :- initial(Q), accept(Xs,Q,[]). 
accept([],Q,[]) :- final(Q).  
accept([X|Xs],Q,S) :- delta(Q,X,S,Q1,S1), accept(Xs,Q1,S1).

initial(q0).
final(q1).

delta(q0,X,S,q0,[X|S]).
delta(q0,X,S,q1,[X|S]).	%even length such as abba
delta(q0,X,S,q1,S). %odd length such as madam
delta(q1,X,[X|S],q1,S).