(define $Node Integer) (define $NodeInfo (type {[$var-match (lambda [$tgt] {tgt})] [$inductive-match (destructor {[node [Node (Multiset Node) (Multiset Node)] {[ {[n in out]}]}]})] [$equal? (lambda [$val $tgt] (match [val tgt] [NodeInfo NodeInfo] {[[ ] ] [[_ _] ]}))]})) (define $Graph (Multiset NodeInfo)) (define $hamilton-cycle (lambda [$g] (let {[$n (size g)]} (match-all g Graph [ _> (loop $l $i [3 n] _> l> _> _>)> (loop $l $i [1 n] {a_i @l} {})])))) (define $hamilton-path (lambda [$g] (let {[$n (size g)]} (match-all g Graph [ _> (loop $l $i [3 n] _> l> >)> (loop $l $i [1 n] {a_i @l} {})]))))