In this paper, we consider enumeration problems for edge-distinct and
vertex-distinct Eulerian trails. Here, two Eulerian trails are
\emph{edge-distinct} if the edge sequences are not identical, and they are
\emph{vertex-distinct} if the vertex sequences are not identical. As the main
result, we propose optimal enumeration algorithms for both problems, that is,
these algorithm runs in O(N) total time, where N is the number of
solutions. Our algorithms are based on the reverse search technique introduced
by [Avis and Fukuda, DAM 1996], and the push out amortization technique
introduced by [Uno, WADS 2015]