-- -- This file has been auto-generated by egison-translator. -- def node {a} : Matcher (Integer, Maybe a) := (integer, maybe integer) def graph {a, b} : Matcher [((Integer, Maybe a), [(Integer, Maybe a)])] := set (node, multiset node) def colors : [Integer] := between 1 5 def graphData : [((Integer, Maybe Integer), [(Integer, Maybe Integer)])] := [((1, Nothing), [(2, Nothing)]), ((2, Nothing), [(1, Nothing)])] def main (graphData: [((Integer, Maybe Integer), [(Integer, Maybe Integer)])]) : [((Integer, Maybe Integer), [(Integer, Maybe Integer)])] := match (colors, graphData) as (set integer, graph) with | ($c :: _, (($id, nothing), !((_, just #c) :: _)) :: _) -> main (assignColor id c graphData) | ( _ , ( ($id, nothing) , ($nid_1, just $c_1) :: ($nid_2, just $c_2) :: ( $nid_3 , just $c_3 ) :: ($nid_4, just $c_4) :: ( $nid_5 , just $c_5 ) :: [] ) :: _ ) -> undefined | _ -> graphData def assignColor (id: Integer) (c: Integer) (graphData: [((Integer, Maybe Integer), [(Integer, Maybe Integer)])]) : [((Integer, Maybe Integer), [(Integer, Maybe Integer)])] := map (\(nodeData, neighbors) -> (rewriteNode id c nodeData, map (\n -> rewriteNode id c n) neighbors)) graphData def rewriteNode (id: Integer) (c: Integer) (n: (Integer, Maybe Integer)) : (Integer, Maybe Integer) := match n as node with | (#id, nothing) -> (id, Just c) | _ -> n rewriteNode 1 5 (1, Nothing) assignColor 1 5 graphData main graphData