-module(q2). -export( [init/0, push/2, pop/1]). init() -> {queue, [],[]}. push( {queue, A,B},X) -> {queue, A, [X|B]}. pop( {queue, [X|A], B} ) -> { X, {queue, A,B} }; pop( {queue, [], B} ) -> [First|Rest] = lists:reverse(B), { First, {queue, Rest, []} }.