diff --git a/_build/_digests b/_build/_digests index ee097aa..5873aee 100644 --- a/_build/_digests +++ b/_build/_digests @@ -1,42 +1,42 @@ -"Rule: ocaml: ml & cmi -> cmx & o (%=src/display )": "\027\"r\253b.\004\234\141\ba\206\238\025\242r" "Rule: ocaml dependencies mli (%=src/gfile )": "7\182\192g\020\238\188\b\211\164{\014\157\135\011\003" +"Rule: ocaml: ml & cmi -> cmx & o (%=src/display )": "\239\213\229\211j!\190#\027U\183\135\175^\143<" "Resource: /home/alejeune/Documents/4ir/S1/Ocaml/FordFulkersonLeChameau/src/tools.mli": "9\173\222\177]e\245\229\131\151\020fsu\133@" -"Rule: ocaml dependencies ml (%=src/ftest )": "\022\160\161\193C\022\254\133j\146\196\000-~(\161" "Rule: ocaml: ml & cmi -> cmx & o (%=src/gfile )": "\236O\148Y\157m\028\183\166?\231a\231\187u\132" -"Rule: ocaml dependencies mli (%=src/display )": "+\178\012\248)#\197\218\144\1935\220\193\190\212\183" -"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/ftest.ml": "\204\235D\031\004O\173\136R\148y\171\207]&g" +"Rule: ocaml dependencies ml (%=src/ftest )": "\129\231\129\216(|Io\133\186\180\221\250\\\208s" +"Rule: ocaml dependencies mli (%=src/display )": "\231~k=1\249%\182S0\233D\212\252\223\161" +"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/ftest.ml": "\134j\0044\254:\143\174\205\170s\173Q\171\183\185" "Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/fordFulkerson.ml": "qra\159@\212u\200\192\132V9-\127\2022" +"Rule: ocaml: mli -> cmi (%=src/display )": "\165\163&C\247\02392\222\141}\166\237\209\226\196" "Rule: ocaml: mli -> cmi (%=src/graph )": ")2\159\205\136\031\251\145\0263\01878\001\b\134" -"Rule: ocaml: mli -> cmi (%=src/display )": "\020\015~%\135\196\153\152}\154\244v\253$N\164" "Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/graph.mli": "\253S\031\015\162|\210x\252\n \227\001{\133e" -"Rule: ocaml: ml & cmi -> cmx & o (%=src/fordFulkerson )": "\158P\156*\236\171\2120>1Z\179\149\240\201." "Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/tools.ml": "\185\244\209\136L\1577;\191J\171\162M\135xa" +"Rule: ocaml: ml & cmi -> cmx & o (%=src/fordFulkerson )": "NH\210[_\240)6\144(\177'?\001\2204" +"Rule: ocaml: cmx* & o* -> native (%=src/ftest )": "\190\238\178*\217\183\208\002\243m\177K\227T\138*" "Rule: ocaml: mli -> cmi (%=src/tools )": "\239.\206\1667\139\246~\227$\235l\012\210\208;" -"Rule: ocaml: cmx* & o* -> native (%=src/ftest )": "O\\\249\200\251,\018\028\206cr\144\204\180\181\214" -"Rule: ocaml: ml & cmi -> cmx & o (%=src/ftest )": "8u\155\140\162\183(4F\239\206\198\150\176\162\227" -"Rule: ocaml: mli -> cmi (%=src/fordFulkerson )": "\206\016hD\235I\220+\252\2129\195G\179\151g" +"Rule: ocaml: mli -> cmi (%=src/fordFulkerson )": "v\184\208\237V\182T\138\168\207\20258\221\233s" +"Rule: ocaml: ml & cmi -> cmx & o (%=src/ftest )": "S\179.\031\214@{\006P\197\221\"\003\t\173u" "Resource: /home/alejeune/Documents/4ir/S1/Ocaml/FordFulkersonLeChameau/src/graph.ml": "\005\175.\2458\176E\202]\255\235=9\015\000\237" "Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/graph.ml": "\005\175.\2458\176E\202]\255\235=9\015\000\237" "Rule: ocaml: mli -> cmi (%=src/gfile )": "\015\211&r\030l{}\183\187\236\2266\022\129\191" "Resource: /home/alejeune/Documents/4ir/S1/Ocaml/FordFulkersonLeChameau/src/graph.mli": "\031\217\135\022\208\254\154\148\252)\210\130\174\215X\031" "Resource: /home/alejeune/Documents/4ir/S1/Ocaml/FordFulkersonLeChameau/src/gfile.mli": "\203\249\163Ct\234\0067d}\142\011m8T`" -"Rule: ocaml dependencies ml (%=src/tools )": "\228\210\133\187`\193\179>\031\016\197\147\221\006j\017" "Resource: /home/alejeune/Documents/4ir/S1/Ocaml/FordFulkersonLeChameau/src/tools.ml": "~[\186\208\199\129\006\030\012\196\245\183'\163\211&" +"Rule: ocaml dependencies ml (%=src/tools )": "\228\210\133\187`\193\179>\031\016\197\147\221\006j\017" "Resource: /home/alejeune/Documents/4ir/S1/Ocaml/FordFulkersonLeChameau/src/ftest.ml": "~\190 \235\142\210\r\222\253\136>\194\180\207\183\168" -"Rule: ocaml: ml -> cmo & cmi (%=src/ftest )": "aTb\021\214\239K\186C,\231\n\012T'\136" -"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/fordFulkerson.mli": "_;(\155\176\"\225\011\230\191\031M\168\250\219\170" +"Rule: ocaml: ml -> cmo & cmi (%=src/ftest )": "^\163\159\019\141kEw\168\171,\156\252=X\006" "Rule: ocaml dependencies mli (%=src/fordFulkerson )": "\022\200\166Dz0\003\233z\198y\144S\162\2034" -"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/display.mli": "\129\140,\157Z\158D\177\144\227\139t\029Y\253\019" +"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/fordFulkerson.mli": "_;(\155\176\"\225\011\230\191\031M\168\250\219\170" +"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/display.mli": "\1933\002\200+\198\166\181\251\020[Kl\1395\244" "Rule: ocaml: ml & cmi -> cmx & o (%=src/tools )": "z\158\235\155v\003\214Q\150\t\224\"\026\246(\158" -"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/gfile.ml": "\1966\177\141\185,fpl\1987gT\128b\028" -"Resource: /home/alejeune/Documents/4ir/S1/Ocaml/FordFulkersonLeChameau/src/gfile.ml": "\1966\177\141\185,fpl\1987gT\128b\028" "Rule: ocaml dependencies ml (%=src/fordFulkerson )": "P\128\241\162\216\228\240\163<\168\241\235\129v\231\185" +"Resource: /home/alejeune/Documents/4ir/S1/Ocaml/FordFulkersonLeChameau/src/gfile.ml": "\1966\177\141\185,fpl\1987gT\128b\028" +"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/gfile.ml": "\1966\177\141\185,fpl\1987gT\128b\028" "Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/tools.mli": "\025v\144\241\237\241\b\248\197tD\012\171\216\202\148" "Rule: ocaml: ml & cmi -> cmx & o (%=src/graph )": "\190\tV\232\254i\031+\141\154\168\219\155n\156C" "Rule: ocaml dependencies ml (%=src/graph )": "\137kk#\140\236\011\255?\132T\225M\018\169\224" -"Rule: ocaml dependencies ml (%=src/display )": "\162K\\\156\237a\012\132\237\169\243\248\212Sb\221" "Rule: ocaml dependencies mli (%=src/graph )": "\012\213_n\023=\207kZ+\251(^M\2028" +"Rule: ocaml dependencies ml (%=src/display )": "\150I\199\147\226\208\148\192\184y\253\190\201\006>\168" "Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/gfile.mli": "\203\249\163Ct\234\0067d}\142\011m8T`" -"Rule: ocaml dependencies mli (%=src/tools )": "\151\181\0055\199\150&\017\021_\215\015\215\018\027+" "Rule: ocaml dependencies ml (%=src/gfile )": "U4(<\t=rQ\240c\0278\231N\1949" -"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/display.ml": "y\135\165\238\138M)N\224\237\005 \027+d\t" +"Rule: ocaml dependencies mli (%=src/tools )": "\151\181\0055\199\150&\017\021_\215\015\215\018\027+" +"Resource: /home/chepycou/Documents/cours/4-IR/functionalProgramming/Projet/repoGit/ocaml-maxflow-project/src/display.ml": "\253\183m\179\227\189\240\189Z\198>\208jt\007#" diff --git a/_build/_log b/_build/_log index ea3e92a..c8b7f60 100644 --- a/_build/_log +++ b/_build/_log @@ -1,8 +1,8 @@ ### Starting build. # Target: src/ftest.ml.depends, tags: { extension:ml, file:src/ftest.ml, include, ocaml, ocamldep, quiet, traverse } -/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/ftest.ml > src/ftest.ml.depends # cached +/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/ftest.ml > src/ftest.ml.depends # Target: src/display.mli.depends, tags: { extension:mli, file:src/display.mli, include, ocaml, ocamldep, quiet, traverse } -/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/display.mli > src/display.mli.depends +/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/display.mli > src/display.mli.depends # cached # Target: src/gfile.mli.depends, tags: { extension:mli, file:src/gfile.mli, include, ocaml, ocamldep, quiet, traverse } /home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/gfile.mli > src/gfile.mli.depends # cached # Target: src/graph.mli.depends, tags: { extension:mli, file:src/graph.mli, include, ocaml, ocamldep, quiet, traverse } @@ -11,23 +11,40 @@ /home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/graph.cmi src/graph.mli # cached # Target: src/gfile.cmi, tags: { byte, compile, extension:mli, file:src/gfile.mli, include, interf, ocaml, quiet, traverse } /home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/gfile.cmi src/gfile.mli # cached +# Target: src/display.cmi, tags: { byte, compile, extension:mli, file:src/display.mli, include, interf, ocaml, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/display.cmi src/display.mli # cached # Target: src/fordFulkerson.mli.depends, tags: { extension:mli, file:src/fordFulkerson.mli, include, ocaml, ocamldep, quiet, traverse } /home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/fordFulkerson.mli > src/fordFulkerson.mli.depends # cached -# Target: src/display.cmi, tags: { byte, compile, extension:mli, file:src/display.mli, include, interf, ocaml, quiet, traverse } -/home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/display.cmi src/display.mli # Target: src/tools.mli.depends, tags: { extension:mli, file:src/tools.mli, include, ocaml, ocamldep, quiet, traverse } /home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/tools.mli > src/tools.mli.depends # cached # Target: src/tools.cmi, tags: { byte, compile, extension:mli, file:src/tools.mli, include, interf, ocaml, quiet, traverse } /home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/tools.cmi src/tools.mli # cached # Target: src/fordFulkerson.cmi, tags: { byte, compile, extension:mli, file:src/fordFulkerson.mli, include, interf, ocaml, quiet, traverse } -/home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/fordFulkerson.cmi src/fordFulkerson.mli +/home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/fordFulkerson.cmi src/fordFulkerson.mli # cached # Target: src/ftest.cmo, tags: { byte, compile, extension:cmo, extension:ml, file:src/ftest.cmo, file:src/ftest.ml, implem, include, ocaml, quiet, traverse } /home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/ftest.cmo src/ftest.ml -+ /home/chepycou/.opam/4.14.0/bin/ocamlc.opt -c -I src -o src/ftest.cmo src/ftest.ml -File "src/ftest.ml", line 40, characters 43-50: -40 | let () = exportDifference graphFinal outfile in - ^^^^^^^ -Error: This expression has type string but an expression was expected of type - int Graph.graph -Command exited with code 2. -# Compilation unsuccessful. +# Target: src/display.ml.depends, tags: { extension:ml, file:src/display.ml, include, ocaml, ocamldep, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/display.ml > src/display.ml.depends # cached +# Target: src/gfile.ml.depends, tags: { extension:ml, file:src/gfile.ml, include, ocaml, ocamldep, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/gfile.ml > src/gfile.ml.depends # cached +# Target: src/graph.ml.depends, tags: { extension:ml, file:src/graph.ml, include, ocaml, ocamldep, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/graph.ml > src/graph.ml.depends # cached +# Target: src/graph.cmx, tags: { compile, extension:cmx, extension:ml, file:src/graph.cmx, file:src/graph.ml, implem, include, native, ocaml, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamlopt.opt -c -I src -o src/graph.cmx src/graph.ml # cached +# Target: src/gfile.cmx, tags: { compile, extension:cmx, extension:ml, file:src/gfile.cmx, file:src/gfile.ml, implem, include, native, ocaml, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamlopt.opt -c -I src -o src/gfile.cmx src/gfile.ml # cached +# Target: src/display.cmx, tags: { compile, extension:cmx, extension:ml, file:src/display.cmx, file:src/display.ml, implem, include, native, ocaml, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamlopt.opt -c -I src -o src/display.cmx src/display.ml # cached +# Target: src/fordFulkerson.ml.depends, tags: { extension:ml, file:src/fordFulkerson.ml, include, ocaml, ocamldep, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/fordFulkerson.ml > src/fordFulkerson.ml.depends # cached +# Target: src/tools.ml.depends, tags: { extension:ml, file:src/tools.ml, include, ocaml, ocamldep, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamldep.opt -modules src/tools.ml > src/tools.ml.depends # cached +# Target: src/tools.cmx, tags: { compile, extension:cmx, extension:ml, file:src/tools.cmx, file:src/tools.ml, implem, include, native, ocaml, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamlopt.opt -c -I src -o src/tools.cmx src/tools.ml # cached +# Target: src/fordFulkerson.cmx, tags: { compile, extension:cmx, extension:ml, file:src/fordFulkerson.cmx, file:src/fordFulkerson.ml, implem, include, native, ocaml, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamlopt.opt -c -I src -o src/fordFulkerson.cmx src/fordFulkerson.ml # cached +# Target: src/ftest.cmx, tags: { compile, extension:cmx, extension:ml, file:src/ftest.cmx, file:src/ftest.ml, implem, include, native, ocaml, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamlopt.opt -c -I src -o src/ftest.cmx src/ftest.ml +# Target: src/ftest.native, tags: { dont_link_with, extension:native, file:src/ftest.native, include, link, native, ocaml, program, quiet, traverse } +/home/chepycou/.opam/4.14.0/bin/ocamlopt.opt -I src src/graph.cmx src/gfile.cmx src/display.cmx src/tools.cmx src/fordFulkerson.cmx src/ftest.cmx -o src/ftest.native +# Compilation successful. diff --git a/_build/src/ftest.cmi b/_build/src/ftest.cmi index 2ae8452..270f902 100644 Binary files a/_build/src/ftest.cmi and b/_build/src/ftest.cmi differ diff --git a/_build/src/ftest.cmx b/_build/src/ftest.cmx index 7e4fbaa..ed07c14 100644 Binary files a/_build/src/ftest.cmx and b/_build/src/ftest.cmx differ diff --git a/_build/src/ftest.ml b/_build/src/ftest.ml index d0f99b4..99e21bb 100644 --- a/_build/src/ftest.ml +++ b/_build/src/ftest.ml @@ -33,12 +33,13 @@ let graphInt = gmap graph int_of_string in - let graphSolved = main graphInt 0 5 in + let graphSolved = main graphInt 0 3 in - let graphFinal = gmap graphSolved string_of_int in - let () = exportDifference graphFinal outfile in + let () = exportDifference graphInt graphSolved outfile in () + + (* Rewrite the graph that has been read. let () = write_file outfile graphDot in () diff --git a/_build/src/ftest.native b/_build/src/ftest.native index 71e92b0..58859f9 100755 Binary files a/_build/src/ftest.native and b/_build/src/ftest.native differ diff --git a/_build/src/ftest.o b/_build/src/ftest.o index d7158e9..298a4c4 100644 Binary files a/_build/src/ftest.o and b/_build/src/ftest.o differ diff --git a/outfile b/outfile index 446624c..1881213 100644 --- a/outfile +++ b/outfile @@ -1,29 +1,25 @@ - digraph finite_state_machine { + digraph finite_state_machine { - fontname="Helvetica,Arial,sans-serif" + fontname="Helvetica,Arial,sans-serif" - node [fontname="Helvetica,Arial,sans-serif"] + node [fontname="Helvetica,Arial,sans-serif"] - edge [fontname="Helvetica,Arial,sans-serif"] + edge [fontname="Helvetica,Arial,sans-serif"] - rankdir=LR; + rankdir=LR; - node [shape = circle]; + node [shape = circle]; - - 5 -> 1 [label = "17"]; - 5 -> 4 [label = "8"]; - 1 -> 5 [label = "4"]; - 1 -> 3 [label = "10"]; - 1 -> 0 [label = "7"]; - 1 -> 4 [label = "1"]; - 3 -> 1 [label = "1"]; - 3 -> 0 [label = "10"]; - 3 -> 2 [label = "2"]; - 3 -> 4 [label = "5"]; - 2 -> 0 [label = "8"]; - 2 -> 4 [label = "4"]; - 4 -> 2 [label = "8"]; - 4 -> 5 [label = "6"]; + + 4 -> 5 [label = "0/14"]; + 1 -> 5 [label = "0/21"]; + 1 -> 4 [label = "0/1"]; + 3 -> 1 [label = "0/11"]; + 3 -> 2 [label = "0/2"]; + 3 -> 4 [label = "0/5"]; + 2 -> 4 [label = "0/12"]; + 0 -> 1 [label = "0/7"]; + 0 -> 3 [label = "10/10"]; + 0 -> 2 [label = "0/8"]; } \ No newline at end of file diff --git a/src/display.ml b/src/display.ml index 189c7a8..ae058d3 100644 --- a/src/display.ml +++ b/src/display.ml @@ -5,7 +5,10 @@ open Gfile let exportBase g path = let str = e_fold g - (fun x id1 id2 label -> x ^ "\n " ^ (string_of_int id1) ^ " -> " ^ (string_of_int id2) ^ " [label = \"" ^ label ^"\"];" ) + (fun x id1 id2 label -> x ^ "\n " + ^ (string_of_int id1) ^ " -> " + ^ (string_of_int id2) ^ " [label = \"" + ^ (string_of_int label) ^ "\"];" ) "" in @@ -40,7 +43,11 @@ let exportDifference gStart gEnd path = in let str = e_fold gStart - (fun x id1 id2 label -> x ^ "\n " ^ (string_of_int id1) ^ " -> " ^ (string_of_int id2) ^ " [label = \"" ^ string_of_int (findUsedCapacity gEnd id1 id2 (int_of_string label)) ^ "/" ^ label ^"\"];" ) + (fun x id1 id2 label -> x ^ "\n " + ^ (string_of_int id1) ^ " -> " + ^ (string_of_int id2) ^ " [label = \"" + ^ string_of_int (findUsedCapacity gEnd id1 id2 label) ^ "/" + ^ (string_of_int label) ^"\"];" ) "" in diff --git a/src/display.mli b/src/display.mli index 46fc305..1a6f0f5 100644 --- a/src/display.mli +++ b/src/display.mli @@ -1,4 +1,4 @@ open Graph open Gfile -val exportBase: string graph -> path -> unit -val exportDifference: string graph -> int graph -> path -> unit \ No newline at end of file +val exportBase: int graph -> path -> unit +val exportDifference: int graph -> int graph -> path -> unit \ No newline at end of file diff --git a/src/ftest.ml b/src/ftest.ml index 4b051e4..99e21bb 100644 --- a/src/ftest.ml +++ b/src/ftest.ml @@ -33,13 +33,10 @@ let graphInt = gmap graph int_of_string in - let graphSolved = main graphInt 0 5 in - - let graphFinal = gmap graphSolved string_of_int in + let graphSolved = main graphInt 0 3 in - (*TODO : gérer les strings / non-strings ==> tout display à partir de type INT ça sera plus simple *) - let () = exportDifference graphFinal outfile in + let () = exportDifference graphInt graphSolved outfile in () diff --git a/test.svg b/test.svg index 5271bbe..313cc9d 100644 --- a/test.svg +++ b/test.svg @@ -4,144 +4,116 @@ - - + + finite_state_machine - - + + +4 + +4 + + + 5 - -5 + +5 + + + +4->5 + + +0/14 - -1 - -1 - - - -5->1 - - -17 - - -4 - -4 - - - -5->4 - - -8 - - - -1->5 - - -4 +1 + +1 - + 1->4 - - -1 + + +0/1 + + + +1->5 + + +0/21 3 - -3 - - - -1->3 - - -10 - - - -0 - -0 - - - -1->0 - - -7 - - - -4->5 - - -6 - - - -2 - -2 - - - -4->2 - - -8 - - - -3->1 - - -1 + +3 - + 3->4 - - -5 + + +0/5 - - -3->0 - - -10 + + +3->1 + + +0/11 + + + +2 + +2 - + 3->2 - - -2 + + +0/2 - + 2->4 - - -4 + + +0/12 - - -2->0 - - -8 + + +0 + +0 + + + +0->1 + + +0/7 + + + +0->3 + + +10/10 + + + +0->2 + + +0/8