1
0
This commit is contained in:
2025-10-10 02:12:44 +02:00
commit dac3abf431
212 changed files with 475579 additions and 0 deletions

26
PI5/.classpath Normal file
View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry combineaccessrules="false" kind="src" path="/ParteComun">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry combineaccessrules="false" kind="src" path="/Grafos">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry combineaccessrules="false" kind="src" path="/DatosCompartidos">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry combineaccessrules="false" kind="src" path="/Solve">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>

17
PI5/.project Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>PI5</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

Binary file not shown.

View File

@@ -0,0 +1 @@
3,5,7,9,12,13,15,17,19:36

View File

@@ -0,0 +1 @@
2,5,8,9,21,23,25,27,29:16

View File

@@ -0,0 +1 @@
3,5,7,9,21,23,25,27,29:15

View File

@@ -0,0 +1,4 @@
{1,2,3}:2.5
{2,4}:4.8
{3,4}:3.7
{4,5}:1.9

View File

@@ -0,0 +1,8 @@
{3,4,17,18,20}:3
{1,5,10}:2
{6,7,8,12,15}:3
{1,2,5,9}:1
{11,17,18,19}:2
{16,19,20}:1
{2,3,15}:5
{10,11,13,14}:2

View File

@@ -0,0 +1,20 @@
Alumno_01: 1,2,3,4,5
Alumno_02: 1,2,3,4,5
Alumno_03: 0,1,2,3,5
Alumno_04: 0,3,2,2,5
Alumno_05: 5,4,3,2,1
Alumno_06: 5,4,3,2,1
Alumno_07: 5,3,2,1,0
Alumno_08: 5,2,4,1,0
Alumno_09: 1,5,3,2,0
Alumno_10: 0,5,4,3,1
Alumno_11: 0,5,1,1,2
Alumno_12: 1,5,2,5,3
Alumno_13: 2,2,5,4,4
Alumno_14: 3,0,5,0,1
Alumno_15: 5,4,5,0,0
Alumno_16: 0,1,5,4,2
Alumno_17: 1,2,1,5,3
Alumno_18: 3,2,0,5,1
Alumno_19: 4,3,2,5,0
Alumno_20: 1,4,1,5,2

View File

@@ -0,0 +1,8 @@
Alumno_01: 1,2,4,5
Alumno_02: 1,2,5,0
Alumno_03: 0,5,2,3
Alumno_04: 5,0,2,3
Alumno_05: 2,3,0,5
Alumno_06: 3,0,5,1
Alumno_07: 1,5,0,2
Alumno_08: 5,3,2,0

View File

@@ -0,0 +1,20 @@
Alumno_01: 1,2,3,5,0
Alumno_02: 1,2,3,5,0
Alumno_03: 1,2,3,5,0
Alumno_04: 1,2,3,5,0
Alumno_05: 5,4,3,2,1
Alumno_06: 5,4,3,2,1
Alumno_07: 5,4,3,2,1
Alumno_08: 5,4,3,2,1
Alumno_09: 1,0,5,4,0
Alumno_10: 1,0,5,4,0
Alumno_11: 1,0,5,4,0
Alumno_12: 1,0,5,4,0
Alumno_13: 0,5,1,4,2
Alumno_14: 0,5,1,4,2
Alumno_15: 0,5,1,4,2
Alumno_16: 0,5,1,4,2
Alumno_17: 3,2,1,0,5
Alumno_18: 3,2,1,0,5
Alumno_19: 3,2,1,0,5
Alumno_20: 3,2,1,0,5

View File

@@ -0,0 +1,9 @@
// HUERTOS
H0: metrosdisponibles=4;
H1: metrosdisponibles=6;
// VARIEDADES
V0 -> metrosrequeridos=2; incomp=V2,V4,V3;
V1 -> metrosrequeridos=4; incomp=V2,V4;
V2 -> metrosrequeridos=3; incomp=V0,V1,V4;
V3 -> metrosrequeridos=1; incomp=V0;
V4 -> metrosrequeridos=6; incomp=V0,V1,V2,V3;

View File

@@ -0,0 +1,11 @@
// HUERTOS
H0: metrosdisponibles=3;
H1: metrosdisponibles=4;
H2: metrosdisponibles=5;
// VARIEDADES
V0 -> metrosrequeridos=4; incomp=V3,V1,V4;
V1 -> metrosrequeridos=2; incomp=V0,V3,V5;
V2 -> metrosrequeridos=3; incomp=V5,V3;
V3 -> metrosrequeridos=1; incomp=V0,V1,V2,V4;
V4 -> metrosrequeridos=6; incomp=V0,V5,V3;
V5 -> metrosrequeridos=2; incomp=V1,V2,V4;

View File

@@ -0,0 +1,15 @@
// HUERTOS
H0: metrosdisponibles=10;
H1: metrosdisponibles=5;
H2: metrosdisponibles=2;
H3: metrosdisponibles=8;
// VARIEDADES
V0 -> metrosrequeridos=6; incomp=V1,V2,V3,V4,V6;
V1 -> metrosrequeridos=4; incomp=V8,V6,V5,V0,V2,V4,V7;
V2 -> metrosrequeridos=3; incomp=V0,V1,V6,V7,V3,V5,V8;
V3 -> metrosrequeridos=1; incomp=V6,V0,V7,V2,V4,V5;
V4 -> metrosrequeridos=6; incomp=V0,V6,V1,V3,V8;
V5 -> metrosrequeridos=5; incomp=V3,V2,V1,V6,V8;
V6 -> metrosrequeridos=2; incomp=V0,V8,V5,V3,V1,V2,V4,V7;
V7 -> metrosrequeridos=5; incomp=V8,V1,V6,V2,V3;
V8 -> metrosrequeridos=2; incomp=V4,V2,V5,V1,V7;

View File

@@ -0,0 +1,7 @@
Presupuesto = 150
//Id_prod:Precio:Categoria:Valoracion
0:10:0:5
1:150:0:4
2:150:1:4
3:100:2:2
4:120:2:5

View File

@@ -0,0 +1,9 @@
Presupuesto = 100
//Id_prod:Precio:Categoria:Valoracion
0:75:3:5
1:10:2:4
2:15:1:2
3:50:0:2
4:80:1:5
5:95:2:5
6:25:3:4

View File

@@ -0,0 +1,12 @@
Presupuesto = 10
//Id_prod:Precio:Categoria:Valoracion
0:5:0:2
1:4:2:1
2:3:1:3
3:5:3:1
4:5:2:1
5:8:4:1
6:8:1:2
7:7:0:5
8:6:2:4
9:10:1:4

View File

@@ -0,0 +1,9 @@
// DESTINOS
D0: demandaminima=6;
D1: demandaminima=3;
D2: demandaminima=8;
D3: demandaminima=10;
D4: demandaminima=5;
// PRODUCTOS Id_producto -> unidades=integer;coste_almacenamiento=(destino:coste)
P0 -> uds=5; coste_almacenamiento=(0:1),(1:50),(2:10),(3:15),(4:10);
P1 -> uds=100; coste_almacenamiento=(0:4),(1:3),(2:3),(3:2),(4:1);

View File

@@ -0,0 +1,12 @@
// DESTINOS
D0: demandaminima=1;
D1: demandaminima=3;
D2: demandaminima=2;
D3: demandaminima=6;
D4: demandaminima=4;
D5: demandaminima=8;
D6: demandaminima=2;
// PRODUCTOS Id_producto -> unidades=integer;coste_almacenamiento=(destino:coste)
P0 -> uds=6; coste_almacenamiento=(0:1),(1:1),(2:80),(3:50),(4:10),(5:8),(6:1);
P1 -> uds=12; coste_almacenamiento=(0:25),(1:3),(2:1),(3:1),(4:1),(5:5),(6:20);
P2 -> uds=8; coste_almacenamiento=(0:10),(1:3),(2:8),(3:25),(4:15),(5:1),(6:3);

View File

@@ -0,0 +1,15 @@
// DESTINOS
D0: demandaminima=3;
D1: demandaminima=1;
D2: demandaminima=8;
D3: demandaminima=5;
D4: demandaminima=1;
D5: demandaminima=3;
D6: demandaminima=1;
D7: demandaminima=10;
D8: demandaminima=2;
D9: demandaminima=6;
// PRODUCTOS Id_producto -> unidades=integer;coste_almacenamiento=(destino:coste)
P0 -> uds=12; coste_almacenamiento=(0:1),(1:7),(2:1),(3:1),(4:10),(5:8),(6:15),(7:9),(8:1),(9:1);
P1 -> uds=15; coste_almacenamiento=(0:25),(1:3),(2:8),(3:1),(4:1),(5:1),(6:1),(7:1),(8:11),(9:1);
P2 -> uds=13; coste_almacenamiento=(0:1),(1:1),(2:1),(3:25),(4:15),(5:1),(6:30),(7:10),(8:7),(9:1);

View File

@@ -0,0 +1,7 @@
// PERSONAS
P0 -> edad=5; idiomas=(esp),(por); nacionalidad=esp; afinidades=(1:1),(2:5),(3:1),(4:0),(5:1);
P1 -> edad=100; idiomas=(esp),(fra); nacionalidad=fra; afinidades=(0:1),(2:0),(3:5),(4:1),(5:2);
P2 -> edad=9; idiomas=(esp),(ing); nacionalidad=eeuu; afinidades=(0:5),(1:0),(3:1),(4:0),(5:5);
P3 -> edad=99; idiomas=(esp),(ale); nacionalidad=esp; afinidades=(0:1),(1:5),(2:1),(4:2),(5:2);
P4 -> edad=75; idiomas=(esp),(por),(fra),(ale); nacionalidad=ale; afinidades=(0:0),(1:1),(2:0),(3:2),(5:5);
P5 -> edad=78; idiomas=(fra),(ale); nacionalidad=fra; afinidades=(0:1),(1:2),(2:5),(3:2),(4:5);

View File

@@ -0,0 +1,9 @@
// PERSONAS
P0 -> edad=5; idiomas=(esp),(por); nacionalidad=esp; afinidades=(1:5),(2:5),(3:5),(4:5),(5:5),(6:5),(7:1);
P1 -> edad=100; idiomas=(esp),(fra); nacionalidad=fra; afinidades=(0:5),(2:5),(3:5),(4:0),(5:5),(6:0),(7:5);
P2 -> edad=9; idiomas=(ing),(esp); nacionalidad=ing; afinidades=(0:5),(1:5),(3:5),(4:0),(5:5),(6:0),(7:5);
P3 -> edad=99; idiomas=(esp),(ing); nacionalidad=esp; afinidades=(0:5),(1:5),(2:5),(4:5),(5:5),(6:1),(7:0);
P4 -> edad=8; idiomas=(esp); nacionalidad=esp; afinidades=(0:5),(1:0),(2:0),(3:5),(5:5),(6:5),(7:5);
P5 -> edad=6; idiomas=(por); nacionalidad=por; afinidades=(0:5),(1:5),(2:5),(3:5),(4:5),(6:5),(7:5);
P6 -> edad=97; idiomas=(ing),(esp); nacionalidad=ing; afinidades=(0:5),(1:0),(2:0),(3:1),(4:5),(5:5),(7:5);
P7 -> edad=98; idiomas=(fra); nacionalidad=esp; afinidades=(0:1),(1:5),(2:5),(3:0),(4:5),(5:5),(6:5);

View File

@@ -0,0 +1,11 @@
// PERSONAS
P0 -> edad=6; idiomas=(fra),(por); nacionalidad=fra; afinidades=(1:1),(2:5),(3:1),(4:5),(5:5),(6:5),(7:1),(8:1),(9:4);
P1 -> edad=33; idiomas=(esp),(fra); nacionalidad=fra; afinidades=(0:1),(2:0),(3:5),(4:0),(5:5),(6:0),(7:5),(8:1),(9:4);
P2 -> edad=9; idiomas=(ing); nacionalidad=ing; afinidades=(0:5),(1:0),(3:1),(4:5),(5:5),(6:0),(7:5),(8:1),(9:4);
P3 -> edad=33; idiomas=(esp),(ing); nacionalidad=esp; afinidades=(0:1),(1:5),(2:1),(4:1),(5:5),(6:1),(7:0),(8:5),(9:4);
P4 -> edad=8; idiomas=(esp),(ing); nacionalidad=esp; afinidades=(0:5),(1:0),(2:5),(3:1),(5:5),(6:5),(7:5),(8:1),(9:4);
P5 -> edad=4; idiomas=(por); nacionalidad=por; afinidades=(0:5),(1:5),(2:5),(3:5),(4:5),(6:5),(7:5),(8:1),(9:4);
P6 -> edad=33; idiomas=(ing),(esp); nacionalidad=ing; afinidades=(0:5),(1:0),(2:0),(3:1),(4:5),(5:5),(7:5),(8:1),(9:4);
P7 -> edad=33; idiomas=(fra), (esp); nacionalidad=esp; afinidades=(0:1),(1:5),(2:5),(3:0),(4:5),(5:5),(6:5),(8:1),(9:4);
P8 -> edad=33; idiomas=(ale), (ing); nacionalidad=ale; afinidades=(0:1),(1:1),(2:1),(3:5),(4:1),(5:1),(6:1),(7:1),(9:4);
P9 -> edad=31; idiomas=(jap), (ale), (ing), (esp); nacionalidad=fin; afinidades=(0:4),(1:4),(2:4),(3:4),(4:4),(5:4),(6:4),(7:4),(8:4)

35
PI5/generated/ej1_f1.dot Normal file
View File

@@ -0,0 +1,35 @@
strict digraph G {
1 [ color="black" label="(1,[[], [0]],[4, 4])" ];
2 [ color="black" label="(2,[[0], [1]],[2, 2])" ];
3 [ color="black" label="(0,[[], []],[4, 6])" ];
4 [ color="black" label="(2,[[], [0]],[4, 4])" ];
5 [ color="black" label="(3,[[0], [1]],[2, 2])" ];
6 [ color="black" label="(1,[[], []],[4, 6])" ];
7 [ color="black" label="(3,[[2], [0, 1]],[1, 0])" ];
8 [ color="black" label="(4,[[2], [0, 1]],[1, 0])" ];
9 [ color="black" label="(1,[[0], []],[2, 6])" ];
10 [ color="black" label="(5,[[2], [0, 1]],[1, 0])" ];
11 [ color="black" label="(2,[[0], []],[2, 6])" ];
12 [ color="black" label="(2,[[1], [0]],[0, 4])" ];
13 [ color="black" label="(3,[[1], [0]],[0, 4])" ];
14 [ color="black" label="(4,[[2, 3], [0, 1]],[0, 0])" ];
15 [ color="black" label="(5,[[2, 3], [0, 1]],[0, 0])" ];
16 [ color="black" label="(2,[[], [0, 1]],[4, 0])" ];
17 [ color="black" label="(3,[[], [0, 1]],[4, 0])" ];
3 -> 1 [ color="red" label="1" ];
9 -> 2 [ label="1" ];
1 -> 4 [ label="-1" ];
2 -> 5 [ label="-1" ];
3 -> 6 [ label="-1" ];
16 -> 7 [ color="red" label="0" ];
7 -> 8 [ label="-1" ];
3 -> 9 [ label="0" ];
8 -> 10 [ label="-1" ];
9 -> 11 [ label="-1" ];
1 -> 12 [ label="0" ];
12 -> 13 [ label="-1" ];
7 -> 14 [ color="red" label="0" ];
14 -> 15 [ color="red" label="-1" ];
1 -> 16 [ color="red" label="1" ];
16 -> 17 [ label="-1" ];
}

61
PI5/generated/ej1_f2.dot Normal file
View File

@@ -0,0 +1,61 @@
strict digraph G {
1 [ color="black" label="(3,[[], [0], [1]],[3, 0, 3])" ];
2 [ color="black" label="(3,[[1], [0], []],[1, 0, 5])" ];
3 [ color="black" label="(2,[[1], [0], []],[1, 0, 5])" ];
4 [ color="black" label="(2,[[], [0], [1]],[3, 0, 3])" ];
5 [ color="black" label="(4,[[], [0], [1, 2]],[3, 0, 0])" ];
6 [ color="black" label="(4,[[1], [0], [2]],[1, 0, 2])" ];
7 [ color="black" label="(4,[[2], [0], [1]],[0, 0, 3])" ];
8 [ color="black" label="(5,[[], [0], [1, 2]],[3, 0, 0])" ];
9 [ color="black" label="(3,[[1], [0], [2]],[1, 0, 2])" ];
10 [ color="black" label="(3,[[2], [0], [1]],[0, 0, 3])" ];
11 [ color="black" label="(3,[[], [0], [1, 2]],[3, 0, 0])" ];
12 [ color="black" label="(3,[[1], [], [0]],[1, 4, 1])" ];
13 [ color="black" label="(2,[[], [0], []],[3, 0, 5])" ];
14 [ color="black" label="(1,[[], [0], []],[3, 0, 5])" ];
15 [ color="black" label="(3,[[], [1], [0]],[3, 2, 1])" ];
16 [ color="black" label="(5,[[1], [2], [0]],[1, 1, 1])" ];
17 [ color="black" label="(4,[[1], [2], [0]],[1, 1, 1])" ];
18 [ color="black" label="(6,[[3, 5], [0], [1, 2]],[0, 0, 0])" ];
19 [ color="black" label="(0,[[], [], []],[3, 4, 5])" ];
20 [ color="black" label="(3,[[1], [2], [0]],[1, 1, 1])" ];
21 [ color="black" label="(1,[[], [], []],[3, 4, 5])" ];
22 [ color="black" label="(2,[[], [1], [0]],[3, 2, 1])" ];
23 [ color="black" label="(2,[[], [], [0]],[3, 4, 1])" ];
24 [ color="black" label="(4,[[2], [1], [0]],[0, 2, 1])" ];
25 [ color="black" label="(3,[[2], [1], [0]],[0, 2, 1])" ];
26 [ color="black" label="(1,[[], [], [0]],[3, 4, 1])" ];
27 [ color="black" label="(4,[[3], [0], [1, 2]],[2, 0, 0])" ];
28 [ color="black" label="(2,[[1], [], [0]],[1, 4, 1])" ];
29 [ color="black" label="(5,[[3], [0], [1, 2]],[2, 0, 0])" ];
30 [ color="black" label="(6,[[3], [0], [1, 2]],[2, 0, 0])" ];
4 -> 1 [ label="-1" ];
3 -> 2 [ label="-1" ];
14 -> 3 [ label="0" ];
14 -> 4 [ color="red" label="2" ];
11 -> 5 [ label="-1" ];
9 -> 6 [ label="-1" ];
10 -> 7 [ label="-1" ];
5 -> 8 [ label="-1" ];
3 -> 9 [ label="2" ];
4 -> 10 [ label="0" ];
4 -> 11 [ color="red" label="2" ];
28 -> 12 [ label="-1" ];
14 -> 13 [ label="-1" ];
19 -> 14 [ color="red" label="1" ];
22 -> 15 [ label="-1" ];
17 -> 16 [ label="-1" ];
20 -> 17 [ label="-1" ];
29 -> 18 [ color="red" label="0" ];
28 -> 20 [ label="1" ];
19 -> 21 [ label="-1" ];
26 -> 22 [ label="1" ];
26 -> 23 [ label="-1" ];
25 -> 24 [ label="-1" ];
22 -> 25 [ label="0" ];
19 -> 26 [ label="2" ];
11 -> 27 [ color="red" label="0" ];
26 -> 28 [ label="0" ];
27 -> 29 [ color="red" label="-1" ];
29 -> 30 [ label="-1" ];
}

749
PI5/generated/ej1_f3.dot Normal file
View File

@@ -0,0 +1,749 @@
strict digraph G {
1 [ color="black" label="(7,[[5], [1, 3], [6], [2]],[5, 0, 0, 5])" ];
2 [ color="black" label="(4,[[0], [], [], [1]],[4, 5, 2, 4])" ];
3 [ color="black" label="(4,[[2], [], [], [1]],[7, 5, 2, 4])" ];
4 [ color="black" label="(8,[[2, 4], [5], [6], [1]],[1, 0, 0, 4])" ];
5 [ color="black" label="(7,[[2, 4], [], [3], [1]],[1, 5, 1, 4])" ];
6 [ color="black" label="(6,[[5], [1, 3], [], [2]],[5, 0, 2, 5])" ];
7 [ color="black" label="(7,[[2, 4], [5], [], [1]],[1, 0, 2, 4])" ];
8 [ color="black" label="(8,[[4], [1, 3], [6], [2]],[4, 0, 0, 5])" ];
9 [ color="black" label="(5,[[4], [1], [3], [0]],[4, 1, 1, 2])" ];
10 [ color="black" label="(4,[[1], [2], [], [3]],[6, 2, 2, 7])" ];
11 [ color="black" label="(5,[[2, 4], [1, 3], [], []],[1, 0, 2, 8])" ];
12 [ color="black" label="(6,[[4], [2], [3], [1]],[4, 2, 1, 4])" ];
13 [ color="black" label="(6,[[4], [1], [3], [2]],[4, 1, 1, 5])" ];
14 [ color="black" label="(8,[[5, 7], [1, 3], [6], [2]],[0, 0, 0, 5])" ];
15 [ color="black" label="(4,[[], [], [], [0]],[10, 5, 2, 2])" ];
16 [ color="black" label="(6,[[2], [1, 3], [], [0]],[7, 0, 2, 2])" ];
17 [ color="black" label="(7,[[4], [1, 3], [], [2]],[4, 0, 2, 5])" ];
18 [ color="black" label="(7,[[2, 4], [6], [], [1, 3]],[1, 3, 2, 3])" ];
19 [ color="black" label="(6,[[4], [1, 3], [], [0]],[4, 0, 2, 2])" ];
20 [ color="black" label="(5,[[2, 4], [1, 3], [], [0]],[1, 0, 2, 2])" ];
21 [ color="black" label="(4,[[], [2], [], [1, 3]],[10, 2, 2, 3])" ];
22 [ color="black" label="(6,[[2], [], [], [1, 3]],[7, 5, 2, 3])" ];
23 [ color="black" label="(6,[[0], [2], [3], [1]],[4, 2, 1, 4])" ];
24 [ color="black" label="(6,[[0], [1], [3], [2]],[4, 1, 1, 5])" ];
25 [ color="black" label="(4,[[0], [], [], [2]],[4, 5, 2, 5])" ];
26 [ color="black" label="(6,[[0], [1, 3], [], []],[4, 0, 2, 8])" ];
27 [ color="black" label="(8,[[2], [1, 3], [6], [0]],[7, 0, 0, 2])" ];
28 [ color="black" label="(4,[[2], [], [], [0]],[7, 5, 2, 2])" ];
29 [ color="black" label="(7,[[0], [1], [3], [4]],[4, 1, 1, 2])" ];
30 [ color="black" label="(7,[[0], [1, 3], [], [2]],[4, 0, 2, 5])" ];
31 [ color="black" label="(6,[[2], [1], [3], [0]],[7, 1, 1, 2])" ];
32 [ color="black" label="(5,[[0], [], [], [1, 3]],[4, 5, 2, 3])" ];
33 [ color="black" label="(6,[[2, 4], [], [3], [0]],[1, 5, 1, 2])" ];
34 [ color="black" label="(3,[[0], [], [], []],[4, 5, 2, 8])" ];
35 [ color="black" label="(5,[[0], [1], [3], []],[4, 1, 1, 8])" ];
36 [ color="black" label="(8,[[0], [1, 3], [6], [2]],[4, 0, 0, 5])" ];
37 [ color="black" label="(6,[[2, 4], [1], [3], [5]],[1, 1, 1, 3])" ];
38 [ color="black" label="(8,[[2, 4], [1, 3], [6], [5]],[1, 0, 0, 3])" ];
39 [ color="black" label="(6,[[4], [2], [3], [0]],[4, 2, 1, 2])" ];
40 [ color="black" label="(5,[[1, 3], [], [], [0]],[5, 5, 2, 2])" ];
41 [ color="black" label="(9,[[2, 4], [5], [6], [1, 3]],[1, 0, 0, 3])" ];
42 [ color="black" label="(5,[[1], [], [], [2]],[6, 5, 2, 5])" ];
43 [ color="black" label="(5,[[3], [], [], [0]],[9, 5, 2, 2])" ];
44 [ color="black" label="(6,[[1, 3], [], [], [2]],[5, 5, 2, 5])" ];
45 [ color="black" label="(4,[[1], [], [], [0]],[6, 5, 2, 2])" ];
46 [ color="black" label="(6,[[1], [5], [3], [2]],[6, 0, 1, 5])" ];
47 [ color="black" label="(7,[[2, 4], [1, 3], [], [5]],[1, 0, 2, 3])" ];
48 [ color="black" label="(5,[[1, 3], [2], [], [4]],[5, 2, 2, 2])" ];
49 [ color="black" label="(8,[[2, 4], [5], [], [1, 3]],[1, 0, 2, 3])" ];
50 [ color="black" label="(2,[[0], [1], [], []],[4, 1, 2, 8])" ];
51 [ color="black" label="(5,[[0], [], [], [1]],[4, 5, 2, 4])" ];
52 [ color="black" label="(5,[[2], [], [], [1]],[7, 5, 2, 4])" ];
53 [ color="black" label="(3,[[0], [1], [], [2]],[4, 1, 2, 5])" ];
54 [ color="black" label="(3,[[0], [2], [], [1]],[4, 2, 2, 4])" ];
55 [ color="black" label="(6,[[2], [5], [3], [1]],[7, 0, 1, 4])" ];
56 [ color="black" label="(4,[[0], [2], [], [3]],[4, 2, 2, 7])" ];
57 [ color="black" label="(3,[[1], [2], [], [0]],[6, 2, 2, 2])" ];
58 [ color="black" label="(7,[[2, 4], [5], [6], [1]],[1, 0, 0, 4])" ];
59 [ color="black" label="(6,[[2, 4], [], [3], [1]],[1, 5, 1, 4])" ];
60 [ color="black" label="(8,[[2, 4], [3], [6], [1]],[1, 4, 0, 4])" ];
61 [ color="black" label="(5,[[], [2], [], [1, 3]],[10, 2, 2, 3])" ];
62 [ color="black" label="(3,[[], [2], [], [0]],[10, 2, 2, 2])" ];
63 [ color="black" label="(9,[[2, 4], [1, 3], [6], [0, 8]],[1, 0, 0, 0])" ];
64 [ color="black" label="(7,[[4], [2], [3], [1]],[4, 2, 1, 4])" ];
65 [ color="black" label="(4,[[1], [3], [], [2]],[6, 4, 2, 5])" ];
66 [ color="black" label="(9,[[5, 7], [1, 3], [6], [2]],[0, 0, 0, 5])" ];
67 [ color="black" label="(5,[[1], [2], [], [3]],[6, 2, 2, 7])" ];
68 [ color="black" label="(6,[[4], [1], [3], [0]],[4, 1, 1, 2])" ];
69 [ color="black" label="(7,[[2, 4], [3], [], [1]],[1, 4, 2, 4])" ];
70 [ color="black" label="(4,[[0], [2], [], [1, 3]],[4, 2, 2, 3])" ];
71 [ color="black" label="(7,[[2], [1, 3], [], [0]],[7, 0, 2, 2])" ];
72 [ color="black" label="(6,[[2, 4], [5], [], [1]],[1, 0, 2, 4])" ];
73 [ color="black" label="(6,[[0], [], [], [1, 3]],[4, 5, 2, 3])" ];
74 [ color="black" label="(4,[[2], [1], [], [3]],[7, 1, 2, 7])" ];
75 [ color="black" label="(6,[[0], [1], [3], []],[4, 1, 1, 8])" ];
76 [ color="black" label="(8,[[1, 3], [5], [6], [0]],[5, 0, 0, 2])" ];
77 [ color="black" label="(5,[[2, 4], [], [3], [0]],[1, 5, 1, 2])" ];
78 [ color="black" label="(4,[[3], [2], [], [1]],[9, 2, 2, 4])" ];
79 [ color="black" label="(7,[[0], [1], [3], [2]],[4, 1, 1, 5])" ];
80 [ color="black" label="(4,[[3], [1], [], [2]],[9, 1, 2, 5])" ];
81 [ color="black" label="(3,[[1], [2], [], []],[6, 2, 2, 8])" ];
82 [ color="black" label="(3,[[], [2], [], [1]],[10, 2, 2, 4])" ];
83 [ color="black" label="(6,[[2, 4], [1], [], [0]],[1, 1, 2, 2])" ];
84 [ color="black" label="(7,[[1], [5], [3], [2]],[6, 0, 1, 5])" ];
85 [ color="black" label="(6,[[2, 4], [3], [], [0]],[1, 4, 2, 2])" ];
86 [ color="black" label="(7,[[2, 4], [1, 3], [6], [5]],[1, 0, 0, 3])" ];
87 [ color="black" label="(7,[[4], [2], [3], [0]],[4, 2, 1, 2])" ];
88 [ color="black" label="(6,[[1], [5], [3], [0]],[6, 0, 1, 2])" ];
89 [ color="black" label="(5,[[1], [], [], [0]],[6, 5, 2, 2])" ];
90 [ color="black" label="(4,[[1, 3], [2], [], []],[5, 2, 2, 8])" ];
91 [ color="black" label="(8,[[2, 4], [5], [6], [1, 3]],[1, 0, 0, 3])" ];
92 [ color="black" label="(6,[[1, 3], [], [], [0]],[5, 5, 2, 2])" ];
93 [ color="black" label="(2,[[], [1], [], []],[10, 1, 2, 8])" ];
94 [ color="black" label="(6,[[2, 4], [1, 3], [], [5]],[1, 0, 2, 3])" ];
95 [ color="black" label="(4,[[1, 3], [2], [], [0]],[5, 2, 2, 2])" ];
96 [ color="black" label="(3,[[], [1], [], [2]],[10, 1, 2, 5])" ];
97 [ color="black" label="(7,[[2, 4], [5], [], [1, 3]],[1, 0, 2, 3])" ];
98 [ color="black" label="(2,[[], [1], [], [0]],[10, 1, 2, 2])" ];
99 [ color="black" label="(6,[[1, 3], [2], [], [4]],[5, 2, 2, 2])" ];
100 [ color="black" label="(3,[[0], [1], [], []],[4, 1, 2, 8])" ];
101 [ color="black" label="(4,[[0], [1], [], [2]],[4, 1, 2, 5])" ];
102 [ color="black" label="(4,[[0], [2], [], [1]],[4, 2, 2, 4])" ];
103 [ color="black" label="(4,[[0], [3], [], [2]],[4, 4, 2, 5])" ];
104 [ color="black" label="(5,[[0], [2], [], [3]],[4, 2, 2, 7])" ];
105 [ color="black" label="(3,[[2], [1], [], []],[7, 1, 2, 8])" ];
106 [ color="black" label="(7,[[2], [5], [3], [1]],[7, 0, 1, 4])" ];
107 [ color="black" label="(4,[[1], [2], [], [0]],[6, 2, 2, 2])" ];
108 [ color="black" label="(4,[[3], [2], [], [0]],[9, 2, 2, 2])" ];
109 [ color="black" label="(5,[[2, 4], [], [3], [1]],[1, 5, 1, 4])" ];
110 [ color="black" label="(7,[[2, 4], [3], [6], [1]],[1, 4, 0, 4])" ];
111 [ color="black" label="(8,[[2, 4], [1], [6], [3]],[1, 1, 0, 7])" ];
112 [ color="black" label="(5,[[3], [1], [], [2]],[9, 1, 2, 5])" ];
113 [ color="black" label="(6,[[], [2], [], [1, 3]],[10, 2, 2, 3])" ];
114 [ color="black" label="(4,[[], [2], [], [0]],[10, 2, 2, 2])" ];
115 [ color="black" label="(5,[[3], [2], [], [1]],[9, 2, 2, 4])" ];
116 [ color="black" label="(6,[[2, 4], [3], [], [1]],[1, 4, 2, 4])" ];
117 [ color="black" label="(4,[[1], [3], [], [0]],[6, 4, 2, 2])" ];
118 [ color="black" label="(8,[[2, 4], [6], [3], [1]],[1, 3, 1, 4])" ];
119 [ color="black" label="(7,[[2, 4], [1], [], [3]],[1, 1, 2, 7])" ];
120 [ color="black" label="(7,[[4], [1], [3], [0]],[4, 1, 1, 2])" ];
121 [ color="black" label="(5,[[1], [3], [], [2]],[6, 4, 2, 5])" ];
122 [ color="black" label="(6,[[1], [2], [], [3]],[6, 2, 2, 7])" ];
123 [ color="black" label="(4,[[1], [], [3], [2]],[6, 5, 1, 5])" ];
124 [ color="black" label="(6,[[4], [5], [3], [0]],[4, 0, 1, 2])" ];
125 [ color="black" label="(5,[[0], [2], [], [1, 3]],[4, 2, 2, 3])" ];
126 [ color="black" label="(5,[[4], [2], [], [1, 3]],[4, 2, 2, 3])" ];
127 [ color="black" label="(3,[[0], [2], [], []],[4, 2, 2, 8])" ];
128 [ color="black" label="(5,[[2], [1], [], [3]],[7, 1, 2, 7])" ];
129 [ color="black" label="(4,[[2], [3], [], [1]],[7, 4, 2, 4])" ];
130 [ color="black" label="(4,[[0], [1], [], [3]],[4, 1, 2, 7])" ];
131 [ color="black" label="(7,[[1, 3], [5], [6], [0]],[5, 0, 0, 2])" ];
132 [ color="black" label="(8,[[1, 3], [5], [6], [2]],[5, 0, 0, 5])" ];
133 [ color="black" label="(4,[[3], [1], [], [0]],[9, 1, 2, 2])" ];
134 [ color="black" label="(4,[[1], [2], [], []],[6, 2, 2, 8])" ];
135 [ color="black" label="(5,[[2, 4], [1], [], [0]],[1, 1, 2, 2])" ];
136 [ color="black" label="(5,[[2, 4], [3], [], [0]],[1, 4, 2, 2])" ];
137 [ color="black" label="(4,[[], [1], [], [2]],[10, 1, 2, 5])" ];
138 [ color="black" label="(4,[[], [2], [], [1]],[10, 2, 2, 4])" ];
139 [ color="black" label="(5,[[1, 3], [2], [], []],[5, 2, 2, 8])" ];
140 [ color="black" label="(7,[[2, 4], [5], [6], [1, 3]],[1, 0, 0, 3])" ];
141 [ color="black" label="(7,[[1], [5], [3], [0]],[6, 0, 1, 2])" ];
142 [ color="black" label="(3,[[], [1], [], []],[10, 1, 2, 8])" ];
143 [ color="black" label="(6,[[2, 4], [5], [], [1, 3]],[1, 0, 2, 3])" ];
144 [ color="black" label="(5,[[1, 3], [2], [], [0]],[5, 2, 2, 2])" ];
145 [ color="black" label="(3,[[2], [1], [], [0]],[7, 1, 2, 2])" ];
146 [ color="black" label="(3,[[], [1], [], [0]],[10, 1, 2, 2])" ];
147 [ color="black" label="(8,[[5], [2], [6], [1, 3]],[5, 2, 0, 3])" ];
148 [ color="black" label="(4,[[2], [3], [], [0]],[7, 4, 2, 2])" ];
149 [ color="black" label="(4,[[0], [1], [], []],[4, 1, 2, 8])" ];
150 [ color="black" label="(4,[[], [], [3], [0]],[10, 5, 1, 2])" ];
151 [ color="black" label="(5,[[0], [3], [], [2]],[4, 4, 2, 5])" ];
152 [ color="black" label="(5,[[0], [2], [], [1]],[4, 2, 2, 4])" ];
153 [ color="black" label="(4,[[2], [1], [], []],[7, 1, 2, 8])" ];
154 [ color="black" label="(5,[[0], [1], [], [2]],[4, 1, 2, 5])" ];
155 [ color="black" label="(7,[[5], [2], [], [1, 3]],[5, 2, 2, 3])" ];
156 [ color="black" label="(5,[[3], [2], [], [0]],[9, 2, 2, 2])" ];
157 [ color="black" label="(4,[[0], [], [3], [2]],[4, 5, 1, 5])" ];
158 [ color="black" label="(7,[[2, 4], [1], [6], [3]],[1, 1, 0, 7])" ];
159 [ color="black" label="(6,[[3], [1], [], [2]],[9, 1, 2, 5])" ];
160 [ color="black" label="(7,[[4], [2], [6], [1, 3]],[4, 2, 0, 3])" ];
161 [ color="black" label="(6,[[3], [2], [], [1]],[9, 2, 2, 4])" ];
162 [ color="black" label="(5,[[], [2], [], [0]],[10, 2, 2, 2])" ];
163 [ color="black" label="(5,[[1], [3], [], [0]],[6, 4, 2, 2])" ];
164 [ color="black" label="(7,[[2, 4], [6], [3], [1]],[1, 3, 1, 4])" ];
165 [ color="black" label="(6,[[2, 4], [1], [], [3]],[1, 1, 2, 7])" ];
166 [ color="black" label="(5,[[2, 4], [3], [], [1]],[1, 4, 2, 4])" ];
167 [ color="black" label="(6,[[1], [3], [], [2]],[6, 4, 2, 5])" ];
168 [ color="black" label="(5,[[1], [], [3], [2]],[6, 5, 1, 5])" ];
169 [ color="black" label="(7,[[4], [5], [3], [0]],[4, 0, 1, 2])" ];
170 [ color="black" label="(6,[[0], [2], [], [1, 3]],[4, 2, 2, 3])" ];
171 [ color="black" label="(4,[[1], [], [3], [0]],[6, 5, 1, 2])" ];
172 [ color="black" label="(6,[[4], [2], [], [1, 3]],[4, 2, 2, 3])" ];
173 [ color="black" label="(5,[[2], [3], [], [1]],[7, 4, 2, 4])" ];
174 [ color="black" label="(6,[[2], [1], [], [3]],[7, 1, 2, 7])" ];
175 [ color="black" label="(4,[[0], [2], [], []],[4, 2, 2, 8])" ];
176 [ color="black" label="(4,[[0], [3], [], [1]],[4, 4, 2, 4])" ];
177 [ color="black" label="(5,[[0], [1], [], [3]],[4, 1, 2, 7])" ];
178 [ color="black" label="(7,[[1, 3], [5], [6], [2]],[5, 0, 0, 5])" ];
179 [ color="black" label="(4,[[2], [], [3], [1]],[7, 5, 1, 4])" ];
180 [ color="black" label="(5,[[3], [1], [], [0]],[9, 1, 2, 2])" ];
181 [ color="black" label="(4,[[], [1], [], [0]],[10, 1, 2, 2])" ];
182 [ color="black" label="(4,[[], [3], [], [0]],[10, 4, 2, 2])" ];
183 [ color="black" label="(5,[[1], [2], [], [0]],[6, 2, 2, 2])" ];
184 [ color="black" label="(5,[[], [2], [], [1]],[10, 2, 2, 4])" ];
185 [ color="black" label="(8,[[2, 4], [5], [3], [1]],[1, 0, 1, 4])" ];
186 [ color="black" label="(9,[[2, 4], [7], [6], [1, 3]],[1, 0, 0, 3])" ];
187 [ color="black" label="(5,[[0], [1], [], [4]],[4, 1, 2, 2])" ];
188 [ color="black" label="(5,[[4], [2], [], [1]],[4, 2, 2, 4])" ];
189 [ color="black" label="(6,[[1, 3], [2], [], [0]],[5, 2, 2, 2])" ];
190 [ color="black" label="(4,[[2], [1], [], [0]],[7, 1, 2, 2])" ];
191 [ color="black" label="(7,[[5], [2], [6], [1, 3]],[5, 2, 0, 3])" ];
192 [ color="black" label="(5,[[2], [1], [], [0]],[7, 1, 2, 2])" ];
193 [ color="black" label="(5,[[2], [3], [], [0]],[7, 4, 2, 2])" ];
194 [ color="black" label="(5,[[0], [1], [], []],[4, 1, 2, 8])" ];
195 [ color="black" label="(5,[[], [], [3], [0]],[10, 5, 1, 2])" ];
196 [ color="black" label="(7,[[0], [5], [6], [1, 3]],[4, 0, 0, 3])" ];
197 [ color="black" label="(6,[[0], [1], [], [2]],[4, 1, 2, 5])" ];
198 [ color="black" label="(7,[[2], [5], [6], [1, 3]],[7, 0, 0, 3])" ];
199 [ color="black" label="(8,[[2, 4], [1], [3], [0]],[1, 1, 1, 2])" ];
200 [ color="black" label="(4,[[2], [], [3], [0]],[7, 5, 1, 2])" ];
201 [ color="black" label="(5,[[0], [], [3], [2]],[4, 5, 1, 5])" ];
202 [ color="black" label="(6,[[5], [2], [], [1, 3]],[5, 2, 2, 3])" ];
203 [ color="black" label="(7,[[2, 4], [5], [3], [0]],[1, 0, 1, 2])" ];
204 [ color="black" label="(8,[[4], [2], [6], [1, 3]],[4, 2, 0, 3])" ];
205 [ color="black" label="(5,[[2, 4], [1], [], [3]],[1, 1, 2, 7])" ];
206 [ color="black" label="(5,[[1], [2], [3], [4]],[6, 2, 1, 2])" ];
207 [ color="black" label="(8,[[5, 7], [2], [6], [1, 3]],[0, 2, 0, 3])" ];
208 [ color="black" label="(6,[[1], [3], [], [0]],[6, 4, 2, 2])" ];
209 [ color="black" label="(6,[[1], [], [3], [2]],[6, 5, 1, 5])" ];
210 [ color="black" label="(5,[[1], [], [3], [0]],[6, 5, 1, 2])" ];
211 [ color="black" label="(7,[[4], [2], [], [1, 3]],[4, 2, 2, 3])" ];
212 [ color="black" label="(5,[[4], [2], [], [0]],[4, 2, 2, 2])" ];
213 [ color="black" label="(4,[[], [1, 3], [], [2]],[10, 0, 2, 5])" ];
214 [ color="black" label="(6,[[1, 3], [5], [], [2]],[5, 0, 2, 5])" ];
215 [ color="black" label="(6,[[2], [3], [], [1]],[7, 4, 2, 4])" ];
216 [ color="black" label="(6,[[0], [1], [], [3]],[4, 1, 2, 7])" ];
217 [ color="black" label="(5,[[0], [3], [], [1]],[4, 4, 2, 4])" ];
218 [ color="black" label="(0,[[], [], [], []],[10, 5, 2, 8])" ];
219 [ color="black" label="(5,[[2], [], [3], [1]],[7, 5, 1, 4])" ];
220 [ color="black" label="(6,[[2, 4], [], [], [1]],[1, 5, 2, 4])" ];
221 [ color="black" label="(4,[[0], [], [3], [1]],[4, 5, 1, 4])" ];
222 [ color="black" label="(8,[[2, 4], [7], [6], [1, 3]],[1, 0, 0, 3])" ];
223 [ color="black" label="(5,[[], [3], [], [0]],[10, 4, 2, 2])" ];
224 [ color="black" label="(6,[[1], [2], [], [0]],[6, 2, 2, 2])" ];
225 [ color="black" label="(7,[[2, 4], [5], [3], [1]],[1, 0, 1, 4])" ];
226 [ color="black" label="(5,[[4], [3], [], [0]],[4, 4, 2, 2])" ];
227 [ color="black" label="(6,[[4], [2], [], [1]],[4, 2, 2, 4])" ];
228 [ color="black" label="(6,[[0], [1], [], [4]],[4, 1, 2, 2])" ];
229 [ color="black" label="(6,[[2], [5], [], [1, 3]],[7, 0, 2, 3])" ];
230 [ color="black" label="(6,[[2], [1], [], [0]],[7, 1, 2, 2])" ];
231 [ color="black" label="(8,[[0], [5], [6], [1, 3]],[4, 0, 0, 3])" ];
232 [ color="black" label="(5,[[0], [2], [3], [4]],[4, 2, 1, 2])" ];
233 [ color="black" label="(7,[[0], [1, 3], [6], [5]],[4, 0, 0, 3])" ];
234 [ color="black" label="(8,[[2], [5], [6], [1, 3]],[7, 0, 0, 3])" ];
235 [ color="black" label="(7,[[2, 4], [1], [3], [0]],[1, 1, 1, 2])" ];
236 [ color="black" label="(5,[[2], [], [3], [0]],[7, 5, 1, 2])" ];
237 [ color="black" label="(9,[[2, 4], [1, 3], [6], [0]],[1, 0, 0, 2])" ];
238 [ color="black" label="(8,[[2, 4], [], [6], [1, 3]],[1, 5, 0, 3])" ];
239 [ color="black" label="(6,[[2, 4], [5], [3], [0]],[1, 0, 1, 2])" ];
240 [ color="black" label="(5,[[], [1, 3], [], [2]],[10, 0, 2, 5])" ];
241 [ color="black" label="(6,[[1], [2], [3], [4]],[6, 2, 1, 2])" ];
242 [ color="black" label="(7,[[2, 4], [], [], [1, 3]],[1, 5, 2, 3])" ];
243 [ color="black" label="(4,[[1], [2], [3], [0]],[6, 2, 1, 2])" ];
244 [ color="black" label="(4,[[], [1], [3], [2]],[10, 1, 1, 5])" ];
245 [ color="black" label="(4,[[], [2], [3], [1]],[10, 2, 1, 4])" ];
246 [ color="black" label="(9,[[5, 7], [2], [6], [1, 3]],[0, 2, 0, 3])" ];
247 [ color="black" label="(6,[[4], [2], [], [0]],[4, 2, 2, 2])" ];
248 [ color="black" label="(6,[[1], [], [3], [0]],[6, 5, 1, 2])" ];
249 [ color="black" label="(1,[[], [], [], [0]],[10, 5, 2, 2])" ];
250 [ color="black" label="(4,[[0], [1, 3], [], [2]],[4, 0, 2, 5])" ];
251 [ color="black" label="(5,[[2], [1, 3], [], [4]],[7, 0, 2, 2])" ];
252 [ color="black" label="(4,[[1], [2], [3], []],[6, 2, 1, 8])" ];
253 [ color="black" label="(7,[[1, 3], [5], [], [2]],[5, 0, 2, 5])" ];
254 [ color="black" label="(4,[[], [1, 3], [], [0]],[10, 0, 2, 2])" ];
255 [ color="black" label="(5,[[0], [1, 3], [], [4]],[4, 0, 2, 2])" ];
256 [ color="black" label="(6,[[1, 3], [5], [], [0]],[5, 0, 2, 2])" ];
257 [ color="black" label="(5,[[2], [1], [3], [4]],[7, 1, 1, 2])" ];
258 [ color="black" label="(1,[[], [], [], []],[10, 5, 2, 8])" ];
259 [ color="black" label="(4,[[2], [1, 3], [], []],[7, 0, 2, 8])" ];
260 [ color="black" label="(7,[[5], [2], [3], [0]],[5, 2, 1, 2])" ];
261 [ color="black" label="(5,[[2, 4], [], [], [1]],[1, 5, 2, 4])" ];
262 [ color="black" label="(6,[[2], [], [3], [1]],[7, 5, 1, 4])" ];
263 [ color="black" label="(5,[[0], [], [3], [1]],[4, 5, 1, 4])" ];
264 [ color="black" label="(6,[[2, 4], [5], [3], [1]],[1, 0, 1, 4])" ];
265 [ color="black" label="(5,[[4], [], [3], [0]],[4, 5, 1, 2])" ];
266 [ color="black" label="(6,[[4], [3], [], [0]],[4, 4, 2, 2])" ];
267 [ color="black" label="(6,[[0], [5], [], [1, 3]],[4, 0, 2, 3])" ];
268 [ color="black" label="(7,[[2], [5], [], [1, 3]],[7, 0, 2, 3])" ];
269 [ color="black" label="(2,[[0], [], [], [1]],[4, 5, 2, 4])" ];
270 [ color="black" label="(7,[[5], [2], [3], [1]],[5, 2, 1, 4])" ];
271 [ color="black" label="(7,[[5], [1], [3], [2]],[5, 1, 1, 5])" ];
272 [ color="black" label="(8,[[0], [1, 3], [6], [5]],[4, 0, 0, 3])" ];
273 [ color="black" label="(6,[[0], [2], [3], [4]],[4, 2, 1, 2])" ];
274 [ color="black" label="(6,[[0], [1], [3], [5]],[4, 1, 1, 3])" ];
275 [ color="black" label="(8,[[2, 4], [1, 3], [6], [0]],[1, 0, 0, 2])" ];
276 [ color="black" label="(6,[[2, 4], [1], [3], []],[1, 1, 1, 8])" ];
277 [ color="black" label="(7,[[2, 4], [], [6], [1, 3]],[1, 5, 0, 3])" ];
278 [ color="black" label="(4,[[0], [2], [3], []],[4, 2, 1, 8])" ];
279 [ color="black" label="(5,[[1], [2], [3], [0]],[6, 2, 1, 2])" ];
280 [ color="black" label="(6,[[], [1, 3], [], [2]],[10, 0, 2, 5])" ];
281 [ color="black" label="(7,[[2, 4], [1, 3], [], [0]],[1, 0, 2, 2])" ];
282 [ color="black" label="(6,[[2, 4], [], [], [1, 3]],[1, 5, 2, 3])" ];
283 [ color="black" label="(4,[[], [1], [3], [0]],[10, 1, 1, 2])" ];
284 [ color="black" label="(6,[[2, 4], [1], [3], [0]],[1, 1, 1, 2])" ];
285 [ color="black" label="(5,[[0], [1, 3], [], [2]],[4, 0, 2, 5])" ];
286 [ color="black" label="(2,[[], [], [], [0]],[10, 5, 2, 2])" ];
287 [ color="black" label="(6,[[0], [1, 3], [], [4]],[4, 0, 2, 2])" ];
288 [ color="black" label="(6,[[2], [1, 3], [], [4]],[7, 0, 2, 2])" ];
289 [ color="black" label="(5,[[4], [1, 3], [], [2]],[4, 0, 2, 5])" ];
290 [ color="black" label="(5,[[], [1, 3], [], [0]],[10, 0, 2, 2])" ];
291 [ color="black" label="(5,[[1], [2], [3], []],[6, 2, 1, 8])" ];
292 [ color="black" label="(7,[[1, 3], [5], [], [0]],[5, 0, 2, 2])" ];
293 [ color="black" label="(4,[[2], [1, 3], [], [0]],[7, 0, 2, 2])" ];
294 [ color="black" label="(4,[[0], [1], [3], [2]],[4, 1, 1, 5])" ];
295 [ color="black" label="(4,[[0], [2], [3], [1]],[4, 2, 1, 4])" ];
296 [ color="black" label="(4,[[2], [1], [3], [0]],[7, 1, 1, 2])" ];
297 [ color="black" label="(6,[[2], [1], [3], [4]],[7, 1, 1, 2])" ];
298 [ color="black" label="(4,[[2], [], [], [1, 3]],[7, 5, 2, 3])" ];
299 [ color="black" label="(2,[[], [], [], []],[10, 5, 2, 8])" ];
300 [ color="black" label="(4,[[0], [1, 3], [], []],[4, 0, 2, 8])" ];
301 [ color="black" label="(5,[[0], [1], [3], [4]],[4, 1, 1, 2])" ];
302 [ color="black" label="(7,[[0], [1, 3], [6], [4]],[4, 0, 0, 2])" ];
303 [ color="black" label="(5,[[2], [1, 3], [], []],[7, 0, 2, 8])" ];
304 [ color="black" label="(6,[[5], [2], [3], [0]],[5, 2, 1, 2])" ];
305 [ color="black" label="(5,[[], [1], [3], [2]],[10, 1, 1, 5])" ];
306 [ color="black" label="(5,[[], [2], [3], [1]],[10, 2, 1, 4])" ];
307 [ color="black" label="(4,[[2], [1], [3], []],[7, 1, 1, 8])" ];
308 [ color="black" label="(1,[[0], [], [], []],[4, 5, 2, 8])" ];
309 [ color="black" label="(2,[[1], [], [], [0]],[6, 5, 2, 2])" ];
310 [ color="black" label="(6,[[4], [], [3], [0]],[4, 5, 1, 2])" ];
311 [ color="black" label="(4,[[1, 3], [], [], [2]],[5, 5, 2, 5])" ];
312 [ color="black" label="(4,[[], [2], [3], [0]],[10, 2, 1, 2])" ];
313 [ color="black" label="(3,[[1], [], [], [2]],[6, 5, 2, 5])" ];
314 [ color="black" label="(2,[[], [], [], [1]],[10, 5, 2, 4])" ];
315 [ color="black" label="(2,[[1], [], [], []],[6, 5, 2, 8])" ];
316 [ color="black" label="(6,[[0], [1, 3], [], [5]],[4, 0, 2, 3])" ];
317 [ color="black" label="(7,[[0], [5], [], [1, 3]],[4, 0, 2, 3])" ];
318 [ color="black" label="(8,[[5], [1, 3], [6], [2]],[5, 0, 0, 5])" ];
319 [ color="black" label="(3,[[0], [], [], [1]],[4, 5, 2, 4])" ];
320 [ color="black" label="(3,[[2], [], [], [1]],[7, 5, 2, 4])" ];
321 [ color="black" label="(7,[[0], [1], [3], [5]],[4, 1, 1, 3])" ];
322 [ color="black" label="(6,[[5], [2], [3], [1]],[5, 2, 1, 4])" ];
323 [ color="black" label="(6,[[5], [1], [3], [2]],[5, 1, 1, 5])" ];
324 [ color="black" label="(6,[[], [2], [3], [0]],[10, 2, 1, 2])" ];
325 [ color="black" label="(7,[[2, 4], [1, 3], [6], [0]],[1, 0, 0, 2])" ];
326 [ color="black" label="(7,[[5], [1, 3], [], [2]],[5, 0, 2, 5])" ];
327 [ color="black" label="(5,[[2, 4], [1], [3], []],[1, 1, 1, 8])" ];
328 [ color="black" label="(5,[[0], [2], [3], []],[4, 2, 1, 8])" ];
329 [ color="black" label="(6,[[1], [2], [3], [0]],[6, 2, 1, 2])" ];
330 [ color="black" label="(7,[[4], [1, 3], [6], [2]],[4, 0, 0, 5])" ];
331 [ color="black" label="(6,[[2, 4], [1, 3], [], []],[1, 0, 2, 8])" ];
332 [ color="black" label="(5,[[2, 4], [], [], [1, 3]],[1, 5, 2, 3])" ];
333 [ color="black" label="(5,[[4], [2], [3], [1]],[4, 2, 1, 4])" ];
334 [ color="black" label="(5,[[2, 4], [1], [3], [0]],[1, 1, 1, 2])" ];
335 [ color="black" label="(5,[[], [1], [3], [0]],[10, 1, 1, 2])" ];
336 [ color="black" label="(5,[[4], [1], [3], [2]],[4, 1, 1, 5])" ];
337 [ color="black" label="(5,[[2], [1, 3], [], [0]],[7, 0, 2, 2])" ];
338 [ color="black" label="(6,[[0], [1, 3], [], [2]],[4, 0, 2, 5])" ];
339 [ color="black" label="(3,[[], [], [], [0]],[10, 5, 2, 2])" ];
340 [ color="black" label="(6,[[4], [1, 3], [], [2]],[4, 0, 2, 5])" ];
341 [ color="black" label="(7,[[0], [1, 3], [], [4]],[4, 0, 2, 2])" ];
342 [ color="black" label="(8,[[2, 4], [6], [], [1, 3]],[1, 3, 2, 3])" ];
343 [ color="black" label="(6,[[2, 4], [1, 3], [], [0]],[1, 0, 2, 2])" ];
344 [ color="black" label="(5,[[4], [1, 3], [], [0]],[4, 0, 2, 2])" ];
345 [ color="black" label="(5,[[2], [], [], [1, 3]],[7, 5, 2, 3])" ];
346 [ color="black" label="(7,[[2], [1], [3], [4]],[7, 1, 1, 2])" ];
347 [ color="black" label="(3,[[2], [], [], [0]],[7, 5, 2, 2])" ];
348 [ color="black" label="(3,[[0], [], [], [2]],[4, 5, 2, 5])" ];
349 [ color="black" label="(8,[[0], [1, 3], [6], [4]],[4, 0, 0, 2])" ];
350 [ color="black" label="(7,[[2], [1, 3], [6], [0]],[7, 0, 0, 2])" ];
351 [ color="black" label="(5,[[0], [1], [3], [2]],[4, 1, 1, 5])" ];
352 [ color="black" label="(5,[[0], [2], [3], [1]],[4, 2, 1, 4])" ];
353 [ color="black" label="(5,[[0], [1, 3], [], []],[4, 0, 2, 8])" ];
354 [ color="black" label="(5,[[2], [1], [3], [0]],[7, 1, 1, 2])" ];
355 [ color="black" label="(4,[[0], [], [], [1, 3]],[4, 5, 2, 3])" ];
356 [ color="black" label="(6,[[0], [1], [3], [4]],[4, 1, 1, 2])" ];
357 [ color="black" label="(5,[[2], [1], [3], []],[7, 1, 1, 8])" ];
358 [ color="black" label="(6,[[], [2], [3], [1]],[10, 2, 1, 4])" ];
359 [ color="black" label="(6,[[], [1], [3], [2]],[10, 1, 1, 5])" ];
360 [ color="black" label="(2,[[0], [], [], []],[4, 5, 2, 8])" ];
361 [ color="black" label="(7,[[0], [1, 3], [6], [2]],[4, 0, 0, 5])" ];
362 [ color="black" label="(4,[[0], [1], [3], []],[4, 1, 1, 8])" ];
363 [ color="black" label="(3,[[1], [], [], [0]],[6, 5, 2, 2])" ];
364 [ color="black" label="(4,[[3], [], [], [0]],[9, 5, 2, 2])" ];
365 [ color="black" label="(7,[[2, 4], [1], [3], [5]],[1, 1, 1, 3])" ];
366 [ color="black" label="(4,[[1, 3], [], [], [0]],[5, 5, 2, 2])" ];
367 [ color="black" label="(4,[[1], [], [], [2]],[6, 5, 2, 5])" ];
368 [ color="black" label="(5,[[1, 3], [], [], [2]],[5, 5, 2, 5])" ];
369 [ color="black" label="(5,[[4], [2], [3], [0]],[4, 2, 1, 2])" ];
370 [ color="black" label="(5,[[], [2], [3], [0]],[10, 2, 1, 2])" ];
371 [ color="black" label="(3,[[], [], [], [1]],[10, 5, 2, 4])" ];
372 [ color="black" label="(3,[[1], [], [], []],[6, 5, 2, 8])" ];
373 [ color="black" label="(8,[[2, 4], [1, 3], [], [5]],[1, 0, 2, 3])" ];
374 [ color="black" label="(7,[[0], [1, 3], [], [5]],[4, 0, 2, 3])" ];
6 -> 1 [ label="2" ];
319 -> 2 [ label="-1" ];
320 -> 3 [ label="-1" ];
58 -> 4 [ label="-1" ];
59 -> 5 [ label="-1" ];
240 -> 6 [ label="0" ];
72 -> 7 [ label="-1" ];
330 -> 8 [ label="-1" ];
283 -> 9 [ label="0" ];
81 -> 10 [ label="3" ];
259 -> 11 [ label="0" ];
333 -> 12 [ label="-1" ];
336 -> 13 [ label="-1" ];
1 -> 14 [ label="0" ];
339 -> 15 [ label="-1" ];
337 -> 16 [ label="-1" ];
340 -> 17 [ label="-1" ];
282 -> 18 [ label="1" ];
344 -> 19 [ label="-1" ];
293 -> 20 [ color="red" label="0" ];
82 -> 21 [ label="3" ];
345 -> 22 [ label="-1" ];
352 -> 23 [ label="-1" ];
351 -> 24 [ label="-1" ];
348 -> 25 [ label="-1" ];
353 -> 26 [ label="-1" ];
350 -> 27 [ label="-1" ];
347 -> 28 [ label="-1" ];
356 -> 29 [ label="-1" ];
338 -> 30 [ label="-1" ];
354 -> 31 [ label="-1" ];
355 -> 32 [ label="-1" ];
77 -> 33 [ label="-1" ];
360 -> 34 [ label="-1" ];
362 -> 35 [ label="-1" ];
361 -> 36 [ label="-1" ];
327 -> 37 [ label="3" ];
86 -> 38 [ label="-1" ];
369 -> 39 [ label="-1" ];
366 -> 40 [ label="-1" ];
91 -> 41 [ label="-1" ];
367 -> 42 [ label="-1" ];
364 -> 43 [ label="-1" ];
368 -> 44 [ label="-1" ];
363 -> 45 [ label="-1" ];
168 -> 46 [ label="1" ];
94 -> 47 [ label="-1" ];
90 -> 48 [ label="3" ];
97 -> 49 [ label="-1" ];
308 -> 50 [ label="1" ];
2 -> 51 [ label="-1" ];
3 -> 52 [ label="-1" ];
50 -> 53 [ label="3" ];
269 -> 54 [ label="1" ];
219 -> 55 [ label="1" ];
127 -> 56 [ label="3" ];
309 -> 57 [ label="1" ];
72 -> 58 [ label="2" ];
109 -> 59 [ label="-1" ];
110 -> 60 [ label="-1" ];
21 -> 61 [ label="-1" ];
286 -> 62 [ label="1" ];
275 -> 63 [ color="red" label="3" ];
12 -> 64 [ label="-1" ];
313 -> 65 [ label="1" ];
14 -> 66 [ label="-1" ];
10 -> 67 [ label="-1" ];
9 -> 68 [ label="-1" ];
116 -> 69 [ label="-1" ];
54 -> 70 [ label="3" ];
16 -> 71 [ label="-1" ];
261 -> 72 [ label="1" ];
32 -> 73 [ label="-1" ];
105 -> 74 [ label="3" ];
35 -> 75 [ label="-1" ];
131 -> 76 [ label="-1" ];
200 -> 77 [ label="0" ];
82 -> 78 [ label="0" ];
24 -> 79 [ label="-1" ];
96 -> 80 [ label="0" ];
315 -> 81 [ label="1" ];
314 -> 82 [ label="1" ];
135 -> 83 [ label="-1" ];
46 -> 84 [ label="-1" ];
136 -> 85 [ label="-1" ];
94 -> 86 [ label="2" ];
39 -> 87 [ label="-1" ];
210 -> 88 [ label="1" ];
45 -> 89 [ label="-1" ];
81 -> 90 [ label="0" ];
140 -> 91 [ label="-1" ];
40 -> 92 [ label="-1" ];
258 -> 93 [ label="1" ];
11 -> 94 [ label="3" ];
57 -> 95 [ label="0" ];
93 -> 96 [ label="3" ];
143 -> 97 [ label="-1" ];
249 -> 98 [ color="red" label="1" ];
48 -> 99 [ label="-1" ];
50 -> 100 [ label="-1" ];
53 -> 101 [ label="-1" ];
54 -> 102 [ label="-1" ];
348 -> 103 [ label="1" ];
56 -> 104 [ label="-1" ];
93 -> 105 [ label="0" ];
55 -> 106 [ label="-1" ];
57 -> 107 [ label="-1" ];
62 -> 108 [ label="0" ];
179 -> 109 [ label="0" ];
116 -> 110 [ label="2" ];
158 -> 111 [ label="-1" ];
80 -> 112 [ label="-1" ];
61 -> 113 [ label="-1" ];
62 -> 114 [ label="-1" ];
78 -> 115 [ label="-1" ];
166 -> 116 [ label="-1" ];
363 -> 117 [ label="1" ];
164 -> 118 [ label="-1" ];
165 -> 119 [ label="-1" ];
68 -> 120 [ label="-1" ];
65 -> 121 [ label="-1" ];
67 -> 122 [ label="-1" ];
313 -> 123 [ label="2" ];
265 -> 124 [ label="1" ];
70 -> 125 [ label="-1" ];
21 -> 126 [ label="0" ];
360 -> 127 [ label="1" ];
74 -> 128 [ label="-1" ];
320 -> 129 [ label="1" ];
100 -> 130 [ label="3" ];
256 -> 131 [ label="2" ];
178 -> 132 [ label="-1" ];
146 -> 133 [ label="0" ];
81 -> 134 [ label="-1" ];
190 -> 135 [ label="0" ];
148 -> 136 [ label="0" ];
96 -> 137 [ label="-1" ];
82 -> 138 [ label="-1" ];
90 -> 139 [ label="-1" ];
143 -> 140 [ label="2" ];
88 -> 141 [ label="-1" ];
93 -> 142 [ label="-1" ];
332 -> 143 [ label="1" ];
95 -> 144 [ label="-1" ];
98 -> 145 [ color="red" label="0" ];
98 -> 146 [ label="-1" ];
191 -> 147 [ label="-1" ];
347 -> 148 [ label="1" ];
100 -> 149 [ label="-1" ];
339 -> 150 [ label="2" ];
103 -> 151 [ label="-1" ];
102 -> 152 [ label="-1" ];
105 -> 153 [ label="-1" ];
101 -> 154 [ label="-1" ];
202 -> 155 [ label="-1" ];
108 -> 156 [ label="-1" ];
348 -> 157 [ label="2" ];
165 -> 158 [ label="2" ];
112 -> 159 [ label="-1" ];
172 -> 160 [ label="2" ];
115 -> 161 [ label="-1" ];
114 -> 162 [ label="-1" ];
117 -> 163 [ label="-1" ];
59 -> 164 [ label="1" ];
205 -> 165 [ label="-1" ];
129 -> 166 [ label="0" ];
121 -> 167 [ label="-1" ];
123 -> 168 [ label="-1" ];
124 -> 169 [ label="-1" ];
125 -> 170 [ label="-1" ];
363 -> 171 [ label="2" ];
126 -> 172 [ label="-1" ];
129 -> 173 [ label="-1" ];
128 -> 174 [ label="-1" ];
127 -> 175 [ label="-1" ];
319 -> 176 [ label="1" ];
130 -> 177 [ label="-1" ];
214 -> 178 [ label="2" ];
320 -> 179 [ label="2" ];
133 -> 180 [ label="-1" ];
146 -> 181 [ label="-1" ];
339 -> 182 [ label="1" ];
107 -> 183 [ label="-1" ];
138 -> 184 [ label="-1" ];
225 -> 185 [ label="-1" ];
222 -> 186 [ label="-1" ];
149 -> 187 [ label="3" ];
138 -> 188 [ label="0" ];
144 -> 189 [ label="-1" ];
145 -> 190 [ label="-1" ];
202 -> 191 [ label="2" ];
190 -> 192 [ label="-1" ];
148 -> 193 [ label="-1" ];
149 -> 194 [ label="-1" ];
150 -> 195 [ label="-1" ];
267 -> 196 [ label="2" ];
154 -> 197 [ label="-1" ];
229 -> 198 [ label="2" ];
235 -> 199 [ label="-1" ];
347 -> 200 [ label="2" ];
157 -> 201 [ label="-1" ];
61 -> 202 [ label="0" ];
239 -> 203 [ label="-1" ];
160 -> 204 [ label="-1" ];
74 -> 205 [ label="0" ];
252 -> 206 [ label="3" ];
191 -> 207 [ label="0" ];
163 -> 208 [ label="-1" ];
168 -> 209 [ label="-1" ];
171 -> 210 [ label="-1" ];
172 -> 211 [ label="-1" ];
114 -> 212 [ label="0" ];
96 -> 213 [ label="1" ];
368 -> 214 [ label="1" ];
173 -> 215 [ label="-1" ];
177 -> 216 [ label="-1" ];
176 -> 217 [ label="-1" ];
179 -> 219 [ label="-1" ];
261 -> 220 [ label="-1" ];
319 -> 221 [ label="2" ];
277 -> 222 [ label="1" ];
182 -> 223 [ label="-1" ];
183 -> 224 [ label="-1" ];
264 -> 225 [ label="-1" ];
182 -> 226 [ label="0" ];
188 -> 227 [ label="-1" ];
187 -> 228 [ label="-1" ];
345 -> 229 [ label="1" ];
192 -> 230 [ label="-1" ];
196 -> 231 [ label="-1" ];
278 -> 232 [ label="3" ];
316 -> 233 [ label="2" ];
198 -> 234 [ label="-1" ];
284 -> 235 [ label="-1" ];
200 -> 236 [ label="-1" ];
275 -> 237 [ label="-1" ];
277 -> 238 [ label="-1" ];
77 -> 239 [ label="1" ];
213 -> 240 [ label="-1" ];
206 -> 241 [ label="-1" ];
282 -> 242 [ label="-1" ];
57 -> 243 [ label="2" ];
96 -> 244 [ label="2" ];
82 -> 245 [ label="2" ];
207 -> 246 [ label="-1" ];
212 -> 247 [ label="-1" ];
210 -> 248 [ label="-1" ];
218 -> 249 [ color="red" label="3" ];
53 -> 250 [ label="1" ];
259 -> 251 [ label="3" ];
81 -> 252 [ label="2" ];
214 -> 253 [ label="-1" ];
146 -> 254 [ label="1" ];
300 -> 255 [ label="3" ];
40 -> 256 [ label="1" ];
307 -> 257 [ label="3" ];
218 -> 258 [ label="-1" ];
105 -> 259 [ label="1" ];
304 -> 260 [ label="-1" ];
3 -> 261 [ label="0" ];
219 -> 262 [ label="-1" ];
221 -> 263 [ label="-1" ];
109 -> 264 [ label="1" ];
150 -> 265 [ label="0" ];
226 -> 266 [ label="-1" ];
32 -> 267 [ label="1" ];
229 -> 268 [ label="-1" ];
308 -> 269 [ label="3" ];
322 -> 270 [ label="-1" ];
323 -> 271 [ label="-1" ];
233 -> 272 [ label="-1" ];
232 -> 273 [ label="-1" ];
35 -> 274 [ label="3" ];
325 -> 275 [ color="red" label="-1" ];
327 -> 276 [ label="-1" ];
282 -> 277 [ label="2" ];
127 -> 278 [ label="2" ];
243 -> 279 [ label="-1" ];
240 -> 280 [ label="-1" ];
343 -> 281 [ label="-1" ];
332 -> 282 [ label="-1" ];
146 -> 283 [ label="2" ];
334 -> 284 [ label="-1" ];
250 -> 285 [ label="-1" ];
249 -> 286 [ label="-1" ];
255 -> 287 [ label="-1" ];
251 -> 288 [ label="-1" ];
213 -> 289 [ label="0" ];
254 -> 290 [ label="-1" ];
252 -> 291 [ label="-1" ];
256 -> 292 [ label="-1" ];
145 -> 293 [ color="red" label="1" ];
53 -> 294 [ label="2" ];
54 -> 295 [ label="2" ];
145 -> 296 [ label="2" ];
257 -> 297 [ label="-1" ];
320 -> 298 [ label="3" ];
258 -> 299 [ label="-1" ];
100 -> 300 [ label="1" ];
362 -> 301 [ label="3" ];
287 -> 302 [ label="2" ];
259 -> 303 [ label="-1" ];
370 -> 304 [ label="0" ];
244 -> 305 [ label="-1" ];
245 -> 306 [ label="-1" ];
105 -> 307 [ label="2" ];
218 -> 308 [ label="0" ];
249 -> 309 [ label="0" ];
265 -> 310 [ label="-1" ];
313 -> 311 [ label="0" ];
62 -> 312 [ label="2" ];
315 -> 313 [ label="3" ];
258 -> 314 [ label="3" ];
258 -> 315 [ label="0" ];
353 -> 316 [ label="3" ];
267 -> 317 [ label="-1" ];
1 -> 318 [ label="-1" ];
269 -> 319 [ label="-1" ];
314 -> 320 [ label="0" ];
274 -> 321 [ label="-1" ];
306 -> 322 [ label="0" ];
305 -> 323 [ label="0" ];
370 -> 324 [ label="-1" ];
343 -> 325 [ color="red" label="2" ];
6 -> 326 [ label="-1" ];
307 -> 327 [ label="0" ];
278 -> 328 [ label="-1" ];
279 -> 329 [ label="-1" ];
340 -> 330 [ label="2" ];
11 -> 331 [ label="-1" ];
298 -> 332 [ label="0" ];
245 -> 333 [ label="0" ];
296 -> 334 [ label="0" ];
283 -> 335 [ label="-1" ];
244 -> 336 [ label="0" ];
293 -> 337 [ label="-1" ];
285 -> 338 [ label="-1" ];
286 -> 339 [ label="-1" ];
289 -> 340 [ label="-1" ];
287 -> 341 [ label="-1" ];
18 -> 342 [ label="-1" ];
20 -> 343 [ color="red" label="-1" ];
254 -> 344 [ label="0" ];
298 -> 345 [ label="-1" ];
297 -> 346 [ label="-1" ];
286 -> 347 [ label="0" ];
360 -> 348 [ label="3" ];
302 -> 349 [ label="-1" ];
16 -> 350 [ label="2" ];
294 -> 351 [ label="-1" ];
295 -> 352 [ label="-1" ];
300 -> 353 [ label="-1" ];
296 -> 354 [ label="-1" ];
319 -> 355 [ label="3" ];
301 -> 356 [ label="-1" ];
307 -> 357 [ label="-1" ];
306 -> 358 [ label="-1" ];
305 -> 359 [ label="-1" ];
308 -> 360 [ label="-1" ];
338 -> 361 [ label="2" ];
100 -> 362 [ label="2" ];
309 -> 363 [ label="-1" ];
339 -> 364 [ label="0" ];
37 -> 365 [ label="-1" ];
363 -> 366 [ label="0" ];
313 -> 367 [ label="-1" ];
311 -> 368 [ label="-1" ];
312 -> 369 [ label="0" ];
312 -> 370 [ label="-1" ];
314 -> 371 [ label="-1" ];
315 -> 372 [ label="-1" ];
47 -> 373 [ label="-1" ];
316 -> 374 [ label="-1" ];
}

19
PI5/generated/ej2_f1.dot Normal file
View File

@@ -0,0 +1,19 @@
strict digraph G {
1 [ color="black" label="(5, [], [140, 0, 50], 2)" ];
2 [ color="black" label="(3, [1, 2], [140, 150, 150], 2)" ];
3 [ color="black" label="(1, [0, 1, 2], [150, 150, 150], 0)" ];
4 [ color="black" label="(2, [1, 2], [140, 150, 150], 2)" ];
5 [ color="black" label="(1, [1, 2], [140, 150, 150], 2)" ];
6 [ color="black" label="(0, [0, 1, 2], [150, 150, 150], 0)" ];
7 [ color="black" label="(3, [2], [140, 0, 150], 3)" ];
8 [ color="black" label="(4, [], [140, 0, 50], 2)" ];
9 [ color="black" label="(4, [2], [140, 0, 150], 3)" ];
8 -> 1 [ color="red" label="0" ];
4 -> 2 [ label="0" ];
6 -> 3 [ label="0" ];
5 -> 4 [ color="red" label="0" ];
6 -> 5 [ color="red" label="1" ];
4 -> 7 [ color="red" label="1" ];
7 -> 8 [ color="red" label="1" ];
7 -> 9 [ label="0" ];
}

187
PI5/generated/ej2_f2.dot Normal file
View File

@@ -0,0 +1,187 @@
strict digraph G {
1 [ color="black" label="(4, [2, 3], [50, 85, 100, 100], -2)" ];
2 [ color="black" label="(5, [], [50, 85, 90, 25], 1)" ];
3 [ color="black" label="(2, [0, 1, 2, 3], [100, 100, 100, 100], 0)" ];
4 [ color="black" label="(6, [1, 3], [50, 100, 90, 100], 0)" ];
5 [ color="black" label="(3, [0, 1], [100, 100, 90, 25], 3)" ];
6 [ color="black" label="(3, [0, 1, 2], [100, 100, 100, 25], 2)" ];
7 [ color="black" label="(5, [2], [50, 20, 100, 25], 3)" ];
8 [ color="black" label="(6, [1, 2, 3], [50, 100, 100, 100], -1)" ];
9 [ color="black" label="(6, [0, 1], [100, 100, 5, 25], 4)" ];
10 [ color="black" label="(4, [3], [50, 85, 90, 100], -1)" ];
11 [ color="black" label="(5, [0, 1, 3], [100, 100, 90, 100], 1)" ];
12 [ color="black" label="(6, [1], [50, 100, 5, 25], 3)" ];
13 [ color="black" label="(6, [0, 3], [100, 20, 5, 100], 4)" ];
14 [ color="black" label="(6, [0, 1], [100, 100, 90, 25], 3)" ];
15 [ color="black" label="(4, [0, 3], [100, 85, 90, 100], 0)" ];
16 [ color="black" label="(6, [3], [50, 20, 5, 100], 3)" ];
17 [ color="black" label="(6, [2], [50, 85, 100, 25], 0)" ];
18 [ color="black" label="(3, [0, 1, 2, 3], [100, 100, 100, 100], 0)" ];
19 [ color="black" label="(6, [3], [50, 85, 5, 100], 0)" ];
20 [ color="black" label="(4, [], [50, 85, 90, 25], 1)" ];
21 [ color="black" label="(4, [0, 1], [100, 100, 90, 25], 3)" ];
22 [ color="black" label="(6, [0, 3], [100, 20, 90, 100], 3)" ];
23 [ color="black" label="(6, [0, 1, 3], [100, 100, 5, 100], 2)" ];
24 [ color="black" label="(4, [0, 2], [100, 85, 100, 25], 1)" ];
25 [ color="black" label="(6, [1, 3], [50, 100, 5, 100], 1)" ];
26 [ color="black" label="(4, [1], [50, 100, 90, 25], 2)" ];
27 [ color="black" label="(5, [0], [100, 85, 90, 25], 2)" ];
28 [ color="black" label="(4, [0, 1, 2], [100, 100, 100, 25], 2)" ];
29 [ color="black" label="(4, [0, 2, 3], [100, 85, 100, 100], -1)" ];
30 [ color="black" label="(3, [0, 2, 3], [100, 85, 100, 100], -1)" ];
31 [ color="black" label="(6, [3], [50, 20, 90, 100], 2)" ];
32 [ color="black" label="(7, [1], [50, 100, 5, 25], 3)" ];
33 [ color="black" label="(4, [0], [100, 85, 90, 25], 2)" ];
34 [ color="black" label="(6, [0, 3], [100, 85, 5, 100], 1)" ];
35 [ color="black" label="(6, [0, 2, 3], [100, 20, 100, 100], 2)" ];
36 [ color="black" label="(6, [0, 1, 3], [100, 100, 90, 100], 1)" ];
37 [ color="black" label="(5, [0, 2], [100, 85, 100, 25], 1)" ];
38 [ color="black" label="(6, [0, 1, 2, 3], [100, 100, 100, 100], 0)" ];
39 [ color="black" label="(6, [0], [100, 20, 5, 25], 6)" ];
40 [ color="black" label="(5, [2], [50, 85, 100, 25], 0)" ];
41 [ color="black" label="(3, [0, 3], [100, 85, 90, 100], 0)" ];
42 [ color="black" label="(2, [0, 1, 3], [100, 100, 90, 100], 1)" ];
43 [ color="black" label="(4, [1, 2], [50, 100, 100, 25], 1)" ];
44 [ color="black" label="(6, [2, 3], [50, 20, 100, 100], 1)" ];
45 [ color="black" label="(0, [0, 1, 2, 3], [100, 100, 100, 100], 0)" ];
46 [ color="black" label="(5, [0, 3], [100, 85, 90, 100], 0)" ];
47 [ color="black" label="(5, [0, 3], [100, 20, 90, 100], 3)" ];
48 [ color="black" label="(4, [1, 3], [50, 100, 90, 100], 0)" ];
49 [ color="black" label="(3, [0, 2], [100, 85, 100, 25], 1)" ];
50 [ color="black" label="(4, [0, 1, 2, 3], [100, 100, 100, 100], 0)" ];
51 [ color="black" label="(4, [1, 2, 3], [50, 100, 100, 100], -1)" ];
52 [ color="black" label="(6, [0], [100, 85, 5, 25], 3)" ];
53 [ color="black" label="(6, [], [50, 20, 5, 25], 5)" ];
54 [ color="black" label="(5, [1], [50, 100, 90, 25], 2)" ];
55 [ color="black" label="(1, [0, 1, 2], [100, 100, 100, 25], 2)" ];
56 [ color="black" label="(6, [0], [100, 85, 90, 25], 2)" ];
57 [ color="black" label="(6, [0], [100, 20, 90, 25], 5)" ];
58 [ color="black" label="(5, [0, 1, 2], [100, 100, 100, 25], 2)" ];
59 [ color="black" label="(5, [0, 2, 3], [100, 85, 100, 100], -1)" ];
60 [ color="black" label="(3, [0], [100, 85, 90, 25], 2)" ];
61 [ color="black" label="(5, [1, 2], [50, 100, 100, 25], 1)" ];
62 [ color="black" label="(3, [0, 1, 3], [100, 100, 90, 100], 1)" ];
63 [ color="black" label="(5, [3], [50, 20, 90, 100], 2)" ];
64 [ color="black" label="(5, [0, 2, 3], [100, 20, 100, 100], 2)" ];
65 [ color="black" label="(6, [0, 2], [100, 85, 100, 25], 1)" ];
66 [ color="black" label="(6, [], [50, 85, 90, 25], 1)" ];
67 [ color="black" label="(6, [0, 2], [100, 20, 100, 25], 4)" ];
68 [ color="black" label="(4, [2], [50, 85, 100, 25], 0)" ];
69 [ color="black" label="(5, [2, 3], [50, 20, 100, 100], 1)" ];
70 [ color="black" label="(7, [], [50, 85, 5, 25], 2)" ];
71 [ color="black" label="(6, [], [50, 20, 90, 25], 4)" ];
72 [ color="black" label="(1, [0, 1, 2, 3], [100, 100, 100, 100], 0)" ];
73 [ color="black" label="(6, [0, 3], [100, 85, 90, 100], 0)" ];
74 [ color="black" label="(5, [1, 3], [50, 100, 90, 100], 0)" ];
75 [ color="black" label="(5, [2, 3], [50, 85, 100, 100], -2)" ];
76 [ color="black" label="(6, [2], [50, 20, 100, 25], 3)" ];
77 [ color="black" label="(2, [0, 1], [100, 100, 90, 25], 3)" ];
78 [ color="black" label="(5, [0, 1, 2, 3], [100, 100, 100, 100], 0)" ];
79 [ color="black" label="(2, [0, 1, 2], [100, 100, 100, 25], 2)" ];
80 [ color="black" label="(5, [1, 2, 3], [50, 100, 100, 100], -1)" ];
81 [ color="black" label="(6, [0, 2, 3], [100, 85, 100, 100], -1)" ];
82 [ color="black" label="(6, [1], [50, 100, 90, 25], 2)" ];
83 [ color="black" label="(6, [3], [50, 85, 90, 100], -1)" ];
84 [ color="black" label="(6, [0, 1, 2], [100, 100, 100, 25], 2)" ];
85 [ color="black" label="(4, [0, 1, 3], [100, 100, 90, 100], 1)" ];
86 [ color="black" label="(5, [3], [50, 85, 90, 100], -1)" ];
87 [ color="black" label="(6, [1, 2], [50, 100, 100, 25], 1)" ];
88 [ color="black" label="(5, [0], [100, 20, 90, 25], 5)" ];
89 [ color="black" label="(5, [0, 1], [100, 100, 90, 25], 3)" ];
90 [ color="black" label="(5, [0, 2], [100, 20, 100, 25], 4)" ];
91 [ color="black" label="(6, [2, 3], [50, 85, 100, 100], -2)" ];
92 [ color="black" label="(6, [], [50, 85, 5, 25], 2)" ];
93 [ color="black" label="(5, [], [50, 20, 90, 25], 4)" ];
30 -> 1 [ label="1" ];
20 -> 2 [ label="0" ];
72 -> 3 [ label="0" ];
74 -> 4 [ label="0" ];
77 -> 5 [ label="0" ];
79 -> 6 [ label="0" ];
43 -> 7 [ label="1" ];
80 -> 8 [ label="0" ];
58 -> 9 [ label="1" ];
41 -> 10 [ label="1" ];
85 -> 11 [ label="0" ];
61 -> 12 [ label="1" ];
64 -> 13 [ label="1" ];
89 -> 14 [ label="0" ];
41 -> 15 [ label="0" ];
69 -> 16 [ label="1" ];
40 -> 17 [ label="0" ];
3 -> 18 [ label="0" ];
75 -> 19 [ label="1" ];
60 -> 20 [ label="1" ];
5 -> 21 [ label="0" ];
47 -> 22 [ label="0" ];
78 -> 23 [ label="1" ];
49 -> 24 [ label="0" ];
80 -> 25 [ label="1" ];
5 -> 26 [ label="1" ];
33 -> 27 [ label="0" ];
6 -> 28 [ label="0" ];
30 -> 29 [ label="0" ];
3 -> 30 [ label="1" ];
63 -> 31 [ label="0" ];
12 -> 32 [ label="0" ];
60 -> 33 [ label="0" ];
59 -> 34 [ label="1" ];
64 -> 35 [ label="0" ];
11 -> 36 [ label="0" ];
24 -> 37 [ label="0" ];
78 -> 38 [ label="0" ];
90 -> 39 [ label="1" ];
68 -> 40 [ color="red" label="0" ];
42 -> 41 [ label="1" ];
72 -> 42 [ label="1" ];
6 -> 43 [ label="1" ];
69 -> 44 [ label="0" ];
15 -> 46 [ label="0" ];
85 -> 47 [ label="1" ];
62 -> 48 [ label="1" ];
79 -> 49 [ color="red" label="1" ];
18 -> 50 [ label="0" ];
18 -> 51 [ label="1" ];
37 -> 52 [ label="1" ];
7 -> 53 [ label="1" ];
26 -> 54 [ label="0" ];
45 -> 55 [ color="red" label="1" ];
27 -> 56 [ label="0" ];
88 -> 57 [ label="0" ];
28 -> 58 [ label="0" ];
29 -> 59 [ label="0" ];
77 -> 60 [ label="1" ];
43 -> 61 [ label="0" ];
42 -> 62 [ label="0" ];
48 -> 63 [ label="1" ];
50 -> 64 [ label="1" ];
37 -> 65 [ label="0" ];
2 -> 66 [ label="0" ];
90 -> 67 [ label="0" ];
49 -> 68 [ color="red" label="1" ];
51 -> 69 [ label="1" ];
92 -> 70 [ color="red" label="0" ];
93 -> 71 [ label="0" ];
45 -> 72 [ label="0" ];
46 -> 73 [ label="0" ];
48 -> 74 [ label="0" ];
1 -> 75 [ label="0" ];
7 -> 76 [ label="0" ];
55 -> 77 [ label="1" ];
50 -> 78 [ label="0" ];
55 -> 79 [ color="red" label="0" ];
51 -> 80 [ label="0" ];
59 -> 81 [ label="0" ];
54 -> 82 [ label="0" ];
86 -> 83 [ label="0" ];
58 -> 84 [ label="0" ];
62 -> 85 [ label="0" ];
10 -> 86 [ label="0" ];
61 -> 87 [ label="0" ];
21 -> 88 [ label="1" ];
21 -> 89 [ label="0" ];
28 -> 90 [ label="1" ];
75 -> 91 [ label="0" ];
40 -> 92 [ color="red" label="1" ];
26 -> 93 [ label="1" ];
}

951
PI5/generated/ej2_f3.dot Normal file
View File

@@ -0,0 +1,951 @@
strict digraph G {
1 [ color="black" label="(3, [0, 3, 4], [10, 7, 6, 10, 10], -2)" ];
2 [ color="black" label="(6, [0, 2, 4], [10, 7, 10, 5, 10], -2)" ];
3 [ color="black" label="(6, [0, 2], [10, 7, 10, 5, 2], -4)" ];
4 [ color="black" label="(9, [4], [5, 2, 5, 5, 10], -6)" ];
5 [ color="black" label="(10, [1, 3, 4], [3, 10, 5, 10, 10], 0)" ];
6 [ color="black" label="(9, [], [5, 2, 5, 5, 2], -8)" ];
7 [ color="black" label="(10, [1, 3], [3, 10, 5, 10, 2], -2)" ];
8 [ color="black" label="(10, [4], [5, 2, 4, 5, 10], -3)" ];
9 [ color="black" label="(9, [0, 2], [10, 2, 10, 5, 2], -5)" ];
10 [ color="black" label="(10, [], [5, 2, 4, 5, 2], -5)" ];
11 [ color="black" label="(9, [0, 2, 4], [10, 2, 10, 5, 10], -3)" ];
12 [ color="black" label="(2, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
13 [ color="black" label="(6, [], [5, 7, 5, 5, 2], -7)" ];
14 [ color="black" label="(6, [4], [5, 7, 5, 5, 10], -5)" ];
15 [ color="black" label="(10, [2], [3, 2, 10, 5, 2], -3)" ];
16 [ color="black" label="(10, [2, 4], [3, 2, 10, 5, 10], -1)" ];
17 [ color="black" label="(6, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
18 [ color="black" label="(6, [0, 1, 2, 3], [10, 10, 10, 10, 2], -2)" ];
19 [ color="black" label="(6, [1, 3, 4], [5, 10, 5, 10, 10], -3)" ];
20 [ color="black" label="(6, [1, 3], [5, 10, 5, 10, 2], -5)" ];
21 [ color="black" label="(5, [4], [5, 7, 5, 5, 10], -5)" ];
22 [ color="black" label="(8, [0, 3, 4], [10, 2, 5, 10, 10], -3)" ];
23 [ color="black" label="(8, [0, 3], [10, 2, 5, 10, 2], -5)" ];
24 [ color="black" label="(9, [0, 3, 4], [10, 2, 4, 10, 10], 0)" ];
25 [ color="black" label="(9, [0, 3], [10, 2, 4, 10, 2], -2)" ];
26 [ color="black" label="(8, [1, 2, 4], [5, 10, 10, 5, 10], -3)" ];
27 [ color="black" label="(10, [0, 1, 3], [10, 10, 5, 10, 2], -4)" ];
28 [ color="black" label="(10, [0, 1, 3, 4], [10, 10, 5, 10, 10], -2)" ];
29 [ color="black" label="(10, [0, 4], [10, 0, 4, 5, 10], 0)" ];
30 [ color="black" label="(8, [1, 2], [5, 10, 10, 5, 2], -5)" ];
31 [ color="black" label="(10, [0], [10, 0, 4, 5, 2], -2)" ];
32 [ color="black" label="(9, [], [3, 7, 6, 5, 2], -4)" ];
33 [ color="black" label="(10, [], [3, 7, 5, 5, 2], -4)" ];
34 [ color="black" label="(9, [4], [3, 7, 6, 5, 10], -2)" ];
35 [ color="black" label="(10, [4], [3, 7, 5, 5, 10], -2)" ];
36 [ color="black" label="(7, [2, 3, 4], [5, 7, 10, 10, 10], -1)" ];
37 [ color="black" label="(7, [2, 3], [5, 7, 10, 10, 2], -3)" ];
38 [ color="black" label="(5, [0, 2, 4], [10, 7, 10, 5, 10], -2)" ];
39 [ color="black" label="(10, [0], [10, 7, 4, 5, 2], -3)" ];
40 [ color="black" label="(10, [0, 4], [10, 7, 4, 5, 10], -1)" ];
41 [ color="black" label="(8, [0], [10, 7, 6, 5, 2], -6)" ];
42 [ color="black" label="(9, [0], [10, 7, 5, 5, 2], -6)" ];
43 [ color="black" label="(8, [0, 4], [10, 7, 6, 5, 10], -4)" ];
44 [ color="black" label="(9, [0, 4], [10, 7, 5, 5, 10], -4)" ];
45 [ color="black" label="(10, [4], [5, 2, 5, 5, 10], -6)" ];
46 [ color="black" label="(10, [0, 2], [10, 2, 10, 5, 2], -5)" ];
47 [ color="black" label="(10, [3], [3, 2, 4, 10, 2], 0)" ];
48 [ color="black" label="(10, [], [5, 2, 5, 5, 2], -8)" ];
49 [ color="black" label="(5, [0, 1, 4], [10, 10, 5, 5, 10], -4)" ];
50 [ color="black" label="(10, [3, 4], [3, 2, 4, 10, 10], 2)" ];
51 [ color="black" label="(3, [1, 3, 4], [5, 10, 6, 10, 10], -3)" ];
52 [ color="black" label="(9, [3], [3, 2, 5, 10, 2], -3)" ];
53 [ color="black" label="(9, [3, 4], [3, 2, 5, 10, 10], -1)" ];
54 [ color="black" label="(10, [0, 2, 4], [10, 2, 10, 5, 10], -3)" ];
55 [ color="black" label="(3, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
56 [ color="black" label="(6, [2, 3, 4], [5, 7, 10, 10, 10], -1)" ];
57 [ color="black" label="(6, [2, 3], [5, 7, 10, 10, 2], -3)" ];
58 [ color="black" label="(10, [0, 4], [10, 7, 6, 5, 10], -4)" ];
59 [ color="black" label="(10, [0], [10, 7, 6, 5, 2], -6)" ];
60 [ color="black" label="(8, [0, 1, 3, 4], [10, 10, 5, 10, 10], -2)" ];
61 [ color="black" label="(9, [0, 1, 3, 4], [10, 10, 4, 10, 10], 1)" ];
62 [ color="black" label="(8, [0, 1, 3], [10, 10, 5, 10, 2], -4)" ];
63 [ color="black" label="(9, [0, 1, 3], [10, 10, 4, 10, 2], -1)" ];
64 [ color="black" label="(7, [1, 3, 4], [5, 10, 5, 10, 10], -3)" ];
65 [ color="black" label="(10, [3], [3, 2, 5, 10, 2], -3)" ];
66 [ color="black" label="(10, [3, 4], [3, 2, 5, 10, 10], -1)" ];
67 [ color="black" label="(10, [3, 4], [5, 7, 5, 10, 10], -3)" ];
68 [ color="black" label="(7, [1, 3], [5, 10, 5, 10, 2], -5)" ];
69 [ color="black" label="(10, [0, 1, 2, 4], [10, 10, 10, 5, 10], -2)" ];
70 [ color="black" label="(10, [3], [5, 7, 5, 10, 2], -5)" ];
71 [ color="black" label="(10, [0, 1, 2], [10, 10, 10, 5, 2], -4)" ];
72 [ color="black" label="(9, [0, 3], [10, 2, 5, 10, 2], -5)" ];
73 [ color="black" label="(10, [0, 3, 4], [10, 2, 4, 10, 10], 0)" ];
74 [ color="black" label="(7, [0, 2, 4], [10, 7, 10, 5, 10], -2)" ];
75 [ color="black" label="(10, [0, 3], [10, 2, 4, 10, 2], -2)" ];
76 [ color="black" label="(7, [0, 2], [10, 7, 10, 5, 2], -4)" ];
77 [ color="black" label="(9, [1, 2], [5, 10, 10, 5, 2], -5)" ];
78 [ color="black" label="(9, [1, 2, 4], [5, 10, 10, 5, 10], -3)" ];
79 [ color="black" label="(9, [0, 3, 4], [10, 2, 5, 10, 10], -3)" ];
80 [ color="black" label="(8, [2], [3, 7, 10, 5, 2], -2)" ];
81 [ color="black" label="(8, [4], [5, 2, 5, 5, 10], -6)" ];
82 [ color="black" label="(9, [1, 3, 4], [3, 10, 5, 10, 10], 0)" ];
83 [ color="black" label="(8, [2, 4], [3, 7, 10, 5, 10], 0)" ];
84 [ color="black" label="(8, [], [5, 2, 5, 5, 2], -8)" ];
85 [ color="black" label="(9, [1, 3], [3, 10, 5, 10, 2], -2)" ];
86 [ color="black" label="(9, [4], [5, 2, 4, 5, 10], -3)" ];
87 [ color="black" label="(10, [1, 3, 4], [3, 10, 4, 10, 10], 3)" ];
88 [ color="black" label="(9, [], [5, 2, 4, 5, 2], -5)" ];
89 [ color="black" label="(10, [1, 3], [3, 10, 4, 10, 2], 1)" ];
90 [ color="black" label="(10, [2, 3], [5, 2, 10, 10, 2], -4)" ];
91 [ color="black" label="(10, [2, 3, 4], [5, 2, 10, 10, 10], -2)" ];
92 [ color="black" label="(10, [3], [5, 7, 4, 10, 2], -2)" ];
93 [ color="black" label="(10, [3, 4], [5, 7, 4, 10, 10], 0)" ];
94 [ color="black" label="(9, [3], [5, 7, 5, 10, 2], -5)" ];
95 [ color="black" label="(9, [3, 4], [5, 7, 5, 10, 10], -3)" ];
96 [ color="black" label="(5, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
97 [ color="black" label="(2, [1, 3, 4], [5, 10, 6, 10, 10], -3)" ];
98 [ color="black" label="(4, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
99 [ color="black" label="(4, [0, 3, 4], [10, 7, 6, 10, 10], -2)" ];
100 [ color="black" label="(5, [0, 3, 4], [10, 7, 5, 10, 10], -2)" ];
101 [ color="black" label="(9, [0, 4], [10, 7, 6, 5, 10], -4)" ];
102 [ color="black" label="(10, [0, 4], [10, 7, 5, 5, 10], -4)" ];
103 [ color="black" label="(9, [0], [10, 7, 6, 5, 2], -6)" ];
104 [ color="black" label="(10, [0], [10, 7, 5, 5, 2], -6)" ];
105 [ color="black" label="(9, [0, 1, 3], [10, 10, 5, 10, 2], -4)" ];
106 [ color="black" label="(9, [0, 1, 3, 4], [10, 10, 5, 10, 10], -2)" ];
107 [ color="black" label="(10, [0, 1, 3], [10, 10, 4, 10, 2], -1)" ];
108 [ color="black" label="(10, [0, 1, 3, 4], [10, 10, 4, 10, 10], 1)" ];
109 [ color="black" label="(10, [], [3, 7, 6, 5, 2], -4)" ];
110 [ color="black" label="(10, [4], [3, 7, 6, 5, 10], -2)" ];
111 [ color="black" label="(8, [1, 3, 4], [5, 10, 5, 10, 10], -3)" ];
112 [ color="black" label="(8, [2, 3, 4], [5, 2, 10, 10, 10], -2)" ];
113 [ color="black" label="(9, [1, 3, 4], [5, 10, 4, 10, 10], 0)" ];
114 [ color="black" label="(8, [1, 3], [5, 10, 5, 10, 2], -5)" ];
115 [ color="black" label="(9, [1, 3], [5, 10, 4, 10, 2], -2)" ];
116 [ color="black" label="(3, [0, 2, 3, 4], [10, 7, 10, 10, 10], 0)" ];
117 [ color="black" label="(8, [2, 3], [5, 2, 10, 10, 2], -4)" ];
118 [ color="black" label="(10, [0, 3], [10, 2, 5, 10, 2], -5)" ];
119 [ color="black" label="(8, [3, 4], [3, 7, 5, 10, 10], 0)" ];
120 [ color="black" label="(10, [2], [5, 7, 10, 5, 2], -5)" ];
121 [ color="black" label="(10, [1, 2, 4], [5, 10, 10, 5, 10], -3)" ];
122 [ color="black" label="(10, [2, 4], [5, 7, 10, 5, 10], -3)" ];
123 [ color="black" label="(10, [1, 2], [5, 10, 10, 5, 2], -5)" ];
124 [ color="black" label="(10, [0, 3, 4], [10, 2, 5, 10, 10], -3)" ];
125 [ color="black" label="(9, [1, 2, 3], [3, 10, 10, 10, 2], 0)" ];
126 [ color="black" label="(9, [1, 2, 3, 4], [3, 10, 10, 10, 10], 2)" ];
127 [ color="black" label="(5, [2, 3, 4], [5, 7, 10, 10, 10], -1)" ];
128 [ color="black" label="(6, [0, 3], [10, 7, 6, 10, 2], -4)" ];
129 [ color="black" label="(7, [0, 3], [10, 7, 5, 10, 2], -4)" ];
130 [ color="black" label="(6, [0, 3, 4], [10, 7, 6, 10, 10], -2)" ];
131 [ color="black" label="(7, [0, 3, 4], [10, 7, 5, 10, 10], -2)" ];
132 [ color="black" label="(9, [1], [3, 10, 4, 5, 2], -1)" ];
133 [ color="black" label="(9, [1, 4], [3, 10, 4, 5, 10], 1)" ];
134 [ color="black" label="(8, [1], [3, 10, 5, 5, 2], -4)" ];
135 [ color="black" label="(8, [1, 4], [3, 10, 5, 5, 10], -2)" ];
136 [ color="black" label="(10, [2, 4], [5, 0, 10, 5, 10], -2)" ];
137 [ color="black" label="(7, [0, 1, 4], [10, 10, 5, 5, 10], -4)" ];
138 [ color="black" label="(7, [0, 1], [10, 10, 5, 5, 2], -6)" ];
139 [ color="black" label="(10, [2], [5, 0, 10, 5, 2], -4)" ];
140 [ color="black" label="(5, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
141 [ color="black" label="(9, [2, 4], [3, 7, 10, 5, 10], 0)" ];
142 [ color="black" label="(6, [0, 3], [10, 7, 5, 10, 2], -4)" ];
143 [ color="black" label="(9, [2], [3, 7, 10, 5, 2], -2)" ];
144 [ color="black" label="(5, [0, 3, 4], [10, 7, 6, 10, 10], -2)" ];
145 [ color="black" label="(6, [0, 3, 4], [10, 7, 5, 10, 10], -2)" ];
146 [ color="black" label="(7, [0, 2, 3], [10, 2, 10, 10, 2], -3)" ];
147 [ color="black" label="(4, [2, 3, 4], [5, 7, 10, 10, 10], -1)" ];
148 [ color="black" label="(8, [0, 2, 4], [10, 7, 10, 5, 10], -2)" ];
149 [ color="black" label="(7, [0, 2, 3, 4], [10, 2, 10, 10, 10], -1)" ];
150 [ color="black" label="(8, [0, 2], [10, 7, 10, 5, 2], -4)" ];
151 [ color="black" label="(10, [3, 4], [3, 0, 4, 10, 10], 4)" ];
152 [ color="black" label="(9, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
153 [ color="black" label="(9, [0, 1, 2, 3], [10, 10, 10, 10, 2], -2)" ];
154 [ color="black" label="(10, [3], [3, 0, 4, 10, 2], 2)" ];
155 [ color="black" label="(7, [4], [5, 2, 5, 5, 10], -6)" ];
156 [ color="black" label="(7, [], [5, 2, 5, 5, 2], -8)" ];
157 [ color="black" label="(9, [1, 3], [5, 10, 5, 10, 2], -5)" ];
158 [ color="black" label="(9, [1, 3, 4], [5, 10, 5, 10, 10], -3)" ];
159 [ color="black" label="(9, [2, 3, 4], [5, 2, 10, 10, 10], -2)" ];
160 [ color="black" label="(10, [1, 3, 4], [5, 10, 4, 10, 10], 0)" ];
161 [ color="black" label="(10, [1, 3], [5, 10, 4, 10, 2], -2)" ];
162 [ color="black" label="(9, [2, 3], [5, 2, 10, 10, 2], -4)" ];
163 [ color="black" label="(9, [3], [5, 7, 4, 10, 2], -2)" ];
164 [ color="black" label="(9, [3, 4], [5, 7, 4, 10, 10], 0)" ];
165 [ color="black" label="(8, [3], [5, 7, 5, 10, 2], -5)" ];
166 [ color="black" label="(8, [3, 4], [5, 7, 5, 10, 10], -3)" ];
167 [ color="black" label="(8, [2, 3, 4], [3, 2, 10, 10, 10], 1)" ];
168 [ color="black" label="(8, [2, 3], [3, 2, 10, 10, 2], -1)" ];
169 [ color="black" label="(4, [0, 1, 2, 4], [10, 10, 10, 5, 10], -2)" ];
170 [ color="black" label="(10, [1, 2, 3], [3, 10, 10, 10, 2], 0)" ];
171 [ color="black" label="(10, [1, 2, 3, 4], [3, 10, 10, 10, 10], 2)" ];
172 [ color="black" label="(10, [3], [5, 0, 5, 10, 2], -4)" ];
173 [ color="black" label="(9, [0, 3], [10, 7, 4, 10, 2], -1)" ];
174 [ color="black" label="(9, [0, 3, 4], [10, 7, 4, 10, 10], 1)" ];
175 [ color="black" label="(7, [0, 3], [10, 7, 6, 10, 2], -4)" ];
176 [ color="black" label="(10, [3, 4], [5, 0, 5, 10, 10], -2)" ];
177 [ color="black" label="(8, [0, 3], [10, 7, 5, 10, 2], -4)" ];
178 [ color="black" label="(7, [0, 3, 4], [10, 7, 6, 10, 10], -2)" ];
179 [ color="black" label="(8, [0, 3, 4], [10, 7, 5, 10, 10], -2)" ];
180 [ color="black" label="(10, [0, 2], [10, 7, 10, 5, 2], -4)" ];
181 [ color="black" label="(7, [3], [5, 7, 5, 10, 2], -5)" ];
182 [ color="black" label="(10, [0, 2, 4], [10, 7, 10, 5, 10], -2)" ];
183 [ color="black" label="(8, [3], [3, 7, 6, 10, 2], -2)" ];
184 [ color="black" label="(7, [3, 4], [5, 7, 5, 10, 10], -3)" ];
185 [ color="black" label="(9, [3], [3, 7, 5, 10, 2], -2)" ];
186 [ color="black" label="(10, [3], [3, 7, 4, 10, 2], 1)" ];
187 [ color="black" label="(10, [3, 4], [3, 7, 4, 10, 10], 3)" ];
188 [ color="black" label="(9, [2, 3], [3, 2, 10, 10, 2], -1)" ];
189 [ color="black" label="(7, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
190 [ color="black" label="(7, [0, 1, 2, 3], [10, 10, 10, 10, 2], -2)" ];
191 [ color="black" label="(6, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
192 [ color="black" label="(9, [2, 3, 4], [3, 2, 10, 10, 10], 1)" ];
193 [ color="black" label="(6, [1, 2, 3], [5, 10, 10, 10, 2], -3)" ];
194 [ color="black" label="(7, [2, 3], [5, 2, 10, 10, 2], -4)" ];
195 [ color="black" label="(7, [2, 3, 4], [5, 2, 10, 10, 10], -2)" ];
196 [ color="black" label="(9, [2], [5, 7, 10, 5, 2], -5)" ];
197 [ color="black" label="(8, [0, 2, 3], [10, 2, 10, 10, 2], -3)" ];
198 [ color="black" label="(8, [3, 4], [3, 7, 6, 10, 10], 0)" ];
199 [ color="black" label="(9, [3, 4], [3, 7, 5, 10, 10], 0)" ];
200 [ color="black" label="(10, [3], [3, 0, 5, 10, 2], -1)" ];
201 [ color="black" label="(8, [0, 2, 3, 4], [10, 2, 10, 10, 10], -1)" ];
202 [ color="black" label="(9, [2, 4], [5, 7, 10, 5, 10], -3)" ];
203 [ color="black" label="(8, [1, 2, 3, 4], [3, 10, 10, 10, 10], 2)" ];
204 [ color="black" label="(10, [1, 3], [5, 10, 5, 10, 2], -5)" ];
205 [ color="black" label="(10, [3, 4], [3, 0, 5, 10, 10], 1)" ];
206 [ color="black" label="(10, [1, 3, 4], [5, 10, 5, 10, 10], -3)" ];
207 [ color="black" label="(8, [1, 2, 3], [3, 10, 10, 10, 2], 0)" ];
208 [ color="black" label="(8, [2], [5, 7, 10, 5, 2], -5)" ];
209 [ color="black" label="(8, [4], [3, 2, 5, 5, 10], -3)" ];
210 [ color="black" label="(9, [], [3, 2, 4, 5, 2], -2)" ];
211 [ color="black" label="(9, [4], [3, 2, 4, 5, 10], 0)" ];
212 [ color="black" label="(8, [2, 4], [5, 7, 10, 5, 10], -3)" ];
213 [ color="black" label="(5, [1, 4], [5, 10, 5, 5, 10], -5)" ];
214 [ color="black" label="(8, [], [3, 2, 5, 5, 2], -5)" ];
215 [ color="black" label="(6, [0, 1, 4], [10, 10, 5, 5, 10], -4)" ];
216 [ color="black" label="(6, [0, 1], [10, 10, 5, 5, 2], -6)" ];
217 [ color="black" label="(10, [2, 4], [3, 7, 10, 5, 10], 0)" ];
218 [ color="black" label="(10, [3, 4], [5, 0, 4, 10, 10], 1)" ];
219 [ color="black" label="(10, [2], [3, 7, 10, 5, 2], -2)" ];
220 [ color="black" label="(4, [0, 2, 3, 4], [10, 7, 10, 10, 10], 0)" ];
221 [ color="black" label="(9, [0, 2, 4], [10, 7, 10, 5, 10], -2)" ];
222 [ color="black" label="(3, [2, 3, 4], [5, 7, 10, 10, 10], -1)" ];
223 [ color="black" label="(9, [3], [3, 7, 4, 10, 2], 1)" ];
224 [ color="black" label="(8, [3], [3, 7, 5, 10, 2], -2)" ];
225 [ color="black" label="(10, [3], [5, 0, 4, 10, 2], -1)" ];
226 [ color="black" label="(10, [0, 3], [10, 0, 5, 10, 2], -3)" ];
227 [ color="black" label="(9, [0, 2], [10, 7, 10, 5, 2], -4)" ];
228 [ color="black" label="(9, [3, 4], [3, 7, 4, 10, 10], 3)" ];
229 [ color="black" label="(7, [0], [10, 2, 5, 5, 2], -7)" ];
230 [ color="black" label="(10, [0, 3, 4], [10, 0, 5, 10, 10], -1)" ];
231 [ color="black" label="(8, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
232 [ color="black" label="(8, [0, 1, 2, 3], [10, 10, 10, 10, 2], -2)" ];
233 [ color="black" label="(7, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
234 [ color="black" label="(7, [0, 4], [10, 2, 5, 5, 10], -5)" ];
235 [ color="black" label="(9, [3, 4], [5, 2, 5, 10, 10], -4)" ];
236 [ color="black" label="(7, [1, 2, 3], [5, 10, 10, 10, 2], -3)" ];
237 [ color="black" label="(9, [3], [5, 2, 5, 10, 2], -6)" ];
238 [ color="black" label="(10, [3, 4], [5, 2, 4, 10, 10], -1)" ];
239 [ color="black" label="(0, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
240 [ color="black" label="(10, [3], [5, 2, 4, 10, 2], -3)" ];
241 [ color="black" label="(9, [0, 2, 3], [10, 2, 10, 10, 2], -3)" ];
242 [ color="black" label="(9, [0, 2, 3, 4], [10, 2, 10, 10, 10], -1)" ];
243 [ color="black" label="(6, [0, 2, 3, 4], [10, 7, 10, 10, 10], 0)" ];
244 [ color="black" label="(3, [0, 1, 3, 4], [10, 10, 6, 10, 10], -2)" ];
245 [ color="black" label="(6, [0, 2, 3], [10, 7, 10, 10, 2], -2)" ];
246 [ color="black" label="(6, [3], [5, 7, 5, 10, 2], -5)" ];
247 [ color="black" label="(6, [3, 4], [5, 7, 5, 10, 10], -3)" ];
248 [ color="black" label="(10, [2, 3], [3, 2, 10, 10, 2], -1)" ];
249 [ color="black" label="(6, [1, 4], [5, 10, 5, 5, 10], -5)" ];
250 [ color="black" label="(6, [1], [5, 10, 5, 5, 2], -7)" ];
251 [ color="black" label="(6, [0, 1, 2], [10, 10, 10, 5, 2], -4)" ];
252 [ color="black" label="(6, [0, 1, 2, 4], [10, 10, 10, 5, 10], -2)" ];
253 [ color="black" label="(10, [2, 3, 4], [3, 2, 10, 10, 10], 1)" ];
254 [ color="black" label="(10, [0, 1, 4], [10, 10, 5, 5, 10], -4)" ];
255 [ color="black" label="(5, [3, 4], [5, 7, 5, 10, 10], -3)" ];
256 [ color="black" label="(10, [0, 3], [10, 0, 4, 10, 2], 0)" ];
257 [ color="black" label="(10, [0, 3, 4], [10, 0, 4, 10, 10], 2)" ];
258 [ color="black" label="(8, [0], [10, 2, 5, 5, 2], -7)" ];
259 [ color="black" label="(9, [3], [3, 7, 6, 10, 2], -2)" ];
260 [ color="black" label="(10, [3], [3, 7, 5, 10, 2], -2)" ];
261 [ color="black" label="(9, [0, 4], [10, 2, 4, 5, 10], -2)" ];
262 [ color="black" label="(9, [3, 4], [3, 7, 6, 10, 10], 0)" ];
263 [ color="black" label="(10, [3, 4], [3, 7, 5, 10, 10], 0)" ];
264 [ color="black" label="(9, [0], [10, 2, 4, 5, 2], -4)" ];
265 [ color="black" label="(10, [0, 1], [10, 10, 5, 5, 2], -6)" ];
266 [ color="black" label="(8, [1, 2, 3], [5, 10, 10, 10, 2], -3)" ];
267 [ color="black" label="(8, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
268 [ color="black" label="(8, [0, 4], [10, 2, 5, 5, 10], -5)" ];
269 [ color="black" label="(10, [3, 4], [5, 2, 5, 10, 10], -4)" ];
270 [ color="black" label="(10, [3], [5, 2, 5, 10, 2], -6)" ];
271 [ color="black" label="(10, [0, 3], [10, 7, 4, 10, 2], -1)" ];
272 [ color="black" label="(10, [0, 3, 4], [10, 7, 4, 10, 10], 1)" ];
273 [ color="black" label="(1, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
274 [ color="black" label="(8, [0, 3], [10, 7, 6, 10, 2], -4)" ];
275 [ color="black" label="(7, [2, 4], [5, 7, 10, 5, 10], -3)" ];
276 [ color="black" label="(9, [0, 3], [10, 7, 5, 10, 2], -4)" ];
277 [ color="black" label="(9, [4], [3, 2, 5, 5, 10], -3)" ];
278 [ color="black" label="(8, [0, 3, 4], [10, 7, 6, 10, 10], -2)" ];
279 [ color="black" label="(7, [2], [5, 7, 10, 5, 2], -5)" ];
280 [ color="black" label="(9, [0, 3, 4], [10, 7, 5, 10, 10], -2)" ];
281 [ color="black" label="(10, [0, 2, 3, 4], [10, 2, 10, 10, 10], -1)" ];
282 [ color="black" label="(10, [0, 2, 3], [10, 2, 10, 10, 2], -3)" ];
283 [ color="black" label="(10, [], [3, 2, 4, 5, 2], -2)" ];
284 [ color="black" label="(5, [0, 1, 3, 4], [10, 10, 5, 10, 10], -2)" ];
285 [ color="black" label="(10, [4], [3, 2, 4, 5, 10], 0)" ];
286 [ color="black" label="(9, [], [3, 2, 5, 5, 2], -5)" ];
287 [ color="black" label="(5, [0, 2, 3, 4], [10, 7, 10, 10, 10], 0)" ];
288 [ color="black" label="(9, [1, 4], [3, 10, 5, 5, 10], -2)" ];
289 [ color="black" label="(9, [1], [3, 10, 5, 5, 2], -4)" ];
290 [ color="black" label="(10, [1, 4], [3, 10, 4, 5, 10], 1)" ];
291 [ color="black" label="(10, [1], [3, 10, 4, 5, 2], -1)" ];
292 [ color="black" label="(10, [], [3, 2, 5, 5, 2], -5)" ];
293 [ color="black" label="(6, [2, 4], [5, 7, 10, 5, 10], -3)" ];
294 [ color="black" label="(10, [4], [3, 2, 5, 5, 10], -3)" ];
295 [ color="black" label="(6, [2], [5, 7, 10, 5, 2], -5)" ];
296 [ color="black" label="(8, [2, 3], [3, 7, 10, 10, 2], 0)" ];
297 [ color="black" label="(10, [0, 3, 4], [10, 7, 6, 10, 10], -2)" ];
298 [ color="black" label="(10, [0, 3], [10, 7, 6, 10, 2], -4)" ];
299 [ color="black" label="(7, [1, 4], [5, 10, 5, 5, 10], -5)" ];
300 [ color="black" label="(7, [1], [5, 10, 5, 5, 2], -7)" ];
301 [ color="black" label="(8, [0, 1, 4], [10, 10, 5, 5, 10], -4)" ];
302 [ color="black" label="(9, [0, 1, 4], [10, 10, 4, 5, 10], -1)" ];
303 [ color="black" label="(10, [0, 2], [10, 0, 10, 5, 2], -3)" ];
304 [ color="black" label="(8, [0, 1], [10, 10, 5, 5, 2], -6)" ];
305 [ color="black" label="(9, [0, 1], [10, 10, 4, 5, 2], -3)" ];
306 [ color="black" label="(10, [0, 2, 4], [10, 0, 10, 5, 10], -1)" ];
307 [ color="black" label="(8, [3, 4], [5, 2, 5, 10, 10], -4)" ];
308 [ color="black" label="(8, [3], [5, 2, 5, 10, 2], -6)" ];
309 [ color="black" label="(10, [], [5, 7, 5, 5, 2], -7)" ];
310 [ color="black" label="(9, [3, 4], [5, 2, 4, 10, 10], -1)" ];
311 [ color="black" label="(9, [3], [5, 2, 4, 10, 2], -3)" ];
312 [ color="black" label="(8, [2, 3, 4], [3, 7, 10, 10, 10], 2)" ];
313 [ color="black" label="(10, [0, 4], [10, 2, 4, 5, 10], -2)" ];
314 [ color="black" label="(10, [0], [10, 2, 4, 5, 2], -4)" ];
315 [ color="black" label="(10, [0, 1, 2, 3], [10, 10, 10, 10, 2], -2)" ];
316 [ color="black" label="(10, [4], [5, 7, 5, 5, 10], -5)" ];
317 [ color="black" label="(7, [0, 2, 3, 4], [10, 7, 10, 10, 10], 0)" ];
318 [ color="black" label="(2, [0, 1, 3, 4], [10, 10, 6, 10, 10], -2)" ];
319 [ color="black" label="(9, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
320 [ color="black" label="(7, [0, 2, 3], [10, 7, 10, 10, 2], -2)" ];
321 [ color="black" label="(9, [1, 2, 3], [5, 10, 10, 10, 2], -3)" ];
322 [ color="black" label="(10, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
323 [ color="black" label="(9, [0, 4], [10, 2, 5, 5, 10], -5)" ];
324 [ color="black" label="(9, [0], [10, 2, 5, 5, 2], -7)" ];
325 [ color="black" label="(10, [], [5, 7, 4, 5, 2], -4)" ];
326 [ color="black" label="(10, [4], [5, 7, 4, 5, 10], -2)" ];
327 [ color="black" label="(9, [], [5, 7, 5, 5, 2], -7)" ];
328 [ color="black" label="(10, [2, 4], [5, 2, 10, 5, 10], -4)" ];
329 [ color="black" label="(4, [1, 2, 4], [5, 10, 10, 5, 10], -3)" ];
330 [ color="black" label="(9, [4], [5, 7, 5, 5, 10], -5)" ];
331 [ color="black" label="(5, [0, 1, 2, 4], [10, 10, 10, 5, 10], -2)" ];
332 [ color="black" label="(10, [2], [5, 2, 10, 5, 2], -6)" ];
333 [ color="black" label="(10, [1], [3, 10, 5, 5, 2], -4)" ];
334 [ color="black" label="(9, [0, 1, 4], [10, 10, 5, 5, 10], -4)" ];
335 [ color="black" label="(3, [3, 4], [5, 7, 6, 10, 10], -3)" ];
336 [ color="black" label="(10, [1, 4], [3, 10, 5, 5, 10], -2)" ];
337 [ color="black" label="(10, [3], [3, 7, 6, 10, 2], -2)" ];
338 [ color="black" label="(4, [0, 4], [10, 7, 6, 5, 10], -4)" ];
339 [ color="black" label="(5, [0, 4], [10, 7, 5, 5, 10], -4)" ];
340 [ color="black" label="(10, [3, 4], [3, 7, 6, 10, 10], 0)" ];
341 [ color="black" label="(9, [0, 3, 4], [10, 7, 6, 10, 10], -2)" ];
342 [ color="black" label="(10, [0, 3, 4], [10, 7, 5, 10, 10], -2)" ];
343 [ color="black" label="(8, [1, 4], [5, 10, 5, 5, 10], -5)" ];
344 [ color="black" label="(9, [0, 3], [10, 7, 6, 10, 2], -4)" ];
345 [ color="black" label="(9, [1, 4], [5, 10, 4, 5, 10], -2)" ];
346 [ color="black" label="(10, [0, 3], [10, 7, 5, 10, 2], -4)" ];
347 [ color="black" label="(8, [1], [5, 10, 5, 5, 2], -7)" ];
348 [ color="black" label="(9, [1], [5, 10, 4, 5, 2], -4)" ];
349 [ color="black" label="(10, [0, 1, 4], [10, 10, 4, 5, 10], -1)" ];
350 [ color="black" label="(9, [0, 1], [10, 10, 5, 5, 2], -6)" ];
351 [ color="black" label="(10, [0, 1], [10, 10, 4, 5, 2], -3)" ];
352 [ color="black" label="(10, [2, 3], [5, 7, 10, 10, 2], -3)" ];
353 [ color="black" label="(10, [2, 3, 4], [5, 7, 10, 10, 10], -1)" ];
354 [ color="black" label="(9, [4], [3, 7, 4, 5, 10], 1)" ];
355 [ color="black" label="(10, [2, 3], [3, 0, 10, 10, 2], 1)" ];
356 [ color="black" label="(3, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
357 [ color="black" label="(9, [], [3, 7, 4, 5, 2], -1)" ];
358 [ color="black" label="(8, [4], [3, 7, 5, 5, 10], -2)" ];
359 [ color="black" label="(10, [2, 3, 4], [3, 0, 10, 10, 10], 3)" ];
360 [ color="black" label="(8, [2], [5, 2, 10, 5, 2], -6)" ];
361 [ color="black" label="(10, [1, 2, 3], [5, 10, 10, 10, 2], -3)" ];
362 [ color="black" label="(8, [], [3, 7, 5, 5, 2], -4)" ];
363 [ color="black" label="(8, [2, 4], [5, 2, 10, 5, 10], -4)" ];
364 [ color="black" label="(10, [0, 4], [10, 2, 5, 5, 10], -5)" ];
365 [ color="black" label="(10, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
366 [ color="black" label="(10, [0], [10, 2, 5, 5, 2], -7)" ];
367 [ color="black" label="(10, [2, 3], [5, 0, 10, 10, 2], -2)" ];
368 [ color="black" label="(10, [2, 3, 4], [5, 0, 10, 10, 10], 0)" ];
369 [ color="black" label="(5, [2, 4], [5, 7, 10, 5, 10], -3)" ];
370 [ color="black" label="(6, [0], [10, 7, 6, 5, 2], -6)" ];
371 [ color="black" label="(7, [0], [10, 7, 5, 5, 2], -6)" ];
372 [ color="black" label="(7, [0, 1, 3, 4], [10, 10, 5, 10, 10], -2)" ];
373 [ color="black" label="(6, [0, 4], [10, 7, 6, 5, 10], -4)" ];
374 [ color="black" label="(7, [0, 4], [10, 7, 5, 5, 10], -4)" ];
375 [ color="black" label="(5, [1, 2, 4], [5, 10, 10, 5, 10], -3)" ];
376 [ color="black" label="(7, [0, 1, 3], [10, 10, 5, 10, 2], -4)" ];
377 [ color="black" label="(9, [0, 1, 2, 4], [10, 10, 10, 5, 10], -2)" ];
378 [ color="black" label="(4, [2, 4], [5, 7, 10, 5, 10], -3)" ];
379 [ color="black" label="(7, [3, 4], [5, 2, 5, 10, 10], -4)" ];
380 [ color="black" label="(7, [3], [5, 2, 5, 10, 2], -6)" ];
381 [ color="black" label="(9, [2, 3, 4], [3, 7, 10, 10, 10], 2)" ];
382 [ color="black" label="(6, [0], [10, 7, 5, 5, 2], -6)" ];
383 [ color="black" label="(9, [2, 3], [3, 7, 10, 10, 2], 0)" ];
384 [ color="black" label="(5, [0, 4], [10, 7, 6, 5, 10], -4)" ];
385 [ color="black" label="(6, [0, 4], [10, 7, 5, 5, 10], -4)" ];
386 [ color="black" label="(9, [1, 3, 4], [3, 10, 4, 10, 10], 3)" ];
387 [ color="black" label="(9, [1, 4], [5, 10, 5, 5, 10], -5)" ];
388 [ color="black" label="(8, [1, 3], [3, 10, 5, 10, 2], -2)" ];
389 [ color="black" label="(7, [0, 2], [10, 2, 10, 5, 2], -5)" ];
390 [ color="black" label="(9, [1], [5, 10, 5, 5, 2], -7)" ];
391 [ color="black" label="(8, [0, 2, 3, 4], [10, 7, 10, 10, 10], 0)" ];
392 [ color="black" label="(8, [1, 3, 4], [3, 10, 5, 10, 10], 0)" ];
393 [ color="black" label="(8, [0, 2, 3], [10, 7, 10, 10, 2], -2)" ];
394 [ color="black" label="(10, [1, 4], [5, 10, 4, 5, 10], -2)" ];
395 [ color="black" label="(10, [], [3, 0, 4, 5, 2], 0)" ];
396 [ color="black" label="(10, [1], [5, 10, 4, 5, 2], -4)" ];
397 [ color="black" label="(10, [4], [3, 0, 4, 5, 10], 2)" ];
398 [ color="black" label="(7, [0, 2, 4], [10, 2, 10, 5, 10], -3)" ];
399 [ color="black" label="(9, [0, 1, 2], [10, 10, 10, 5, 2], -4)" ];
400 [ color="black" label="(9, [1, 3], [3, 10, 4, 10, 2], 1)" ];
401 [ color="black" label="(9, [], [5, 7, 4, 5, 2], -4)" ];
402 [ color="black" label="(9, [4], [5, 7, 4, 5, 10], -2)" ];
403 [ color="black" label="(8, [], [5, 7, 5, 5, 2], -7)" ];
404 [ color="black" label="(8, [4], [5, 7, 5, 5, 10], -5)" ];
405 [ color="black" label="(8, [2, 4], [3, 2, 10, 5, 10], -1)" ];
406 [ color="black" label="(10, [0, 2, 3, 4], [10, 0, 10, 10, 10], 1)" ];
407 [ color="black" label="(10, [0, 2, 3], [10, 0, 10, 10, 2], -1)" ];
408 [ color="black" label="(4, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
409 [ color="black" label="(9, [2], [5, 2, 10, 5, 2], -6)" ];
410 [ color="black" label="(8, [2], [3, 2, 10, 5, 2], -3)" ];
411 [ color="black" label="(9, [2, 4], [5, 2, 10, 5, 10], -4)" ];
412 [ color="black" label="(8, [1, 2, 4], [3, 10, 10, 5, 10], 0)" ];
413 [ color="black" label="(8, [1, 2], [3, 10, 10, 5, 2], -2)" ];
414 [ color="black" label="(9, [2, 4], [3, 2, 10, 5, 10], -1)" ];
415 [ color="black" label="(7, [], [5, 7, 5, 5, 2], -7)" ];
416 [ color="black" label="(9, [2], [3, 2, 10, 5, 2], -3)" ];
417 [ color="black" label="(7, [4], [5, 7, 5, 5, 10], -5)" ];
418 [ color="black" label="(9, [0], [10, 7, 4, 5, 2], -3)" ];
419 [ color="black" label="(9, [0, 4], [10, 7, 4, 5, 10], -1)" ];
420 [ color="black" label="(7, [0], [10, 7, 6, 5, 2], -6)" ];
421 [ color="black" label="(8, [0], [10, 7, 5, 5, 2], -6)" ];
422 [ color="black" label="(10, [0, 2, 3, 4], [10, 7, 10, 10, 10], 0)" ];
423 [ color="black" label="(7, [0, 4], [10, 7, 6, 5, 10], -4)" ];
424 [ color="black" label="(8, [0, 4], [10, 7, 5, 5, 10], -4)" ];
425 [ color="black" label="(6, [1, 2], [5, 10, 10, 5, 2], -5)" ];
426 [ color="black" label="(6, [1, 2, 4], [5, 10, 10, 5, 10], -3)" ];
427 [ color="black" label="(10, [0, 2, 3], [10, 7, 10, 10, 2], -2)" ];
428 [ color="black" label="(7, [0, 1, 2], [10, 10, 10, 5, 2], -4)" ];
429 [ color="black" label="(7, [0, 1, 2, 4], [10, 10, 10, 5, 10], -2)" ];
430 [ color="black" label="(10, [4], [5, 0, 5, 5, 10], -4)" ];
431 [ color="black" label="(10, [], [5, 0, 5, 5, 2], -6)" ];
432 [ color="black" label="(9, [2, 3, 4], [5, 7, 10, 10, 10], -1)" ];
433 [ color="black" label="(9, [2, 3], [5, 7, 10, 10, 2], -3)" ];
434 [ color="black" label="(10, [], [3, 0, 5, 5, 2], -3)" ];
435 [ color="black" label="(10, [4], [3, 0, 5, 5, 10], -1)" ];
436 [ color="black" label="(10, [1, 4], [5, 10, 5, 5, 10], -5)" ];
437 [ color="black" label="(10, [], [3, 7, 4, 5, 2], -1)" ];
438 [ color="black" label="(2, [0, 1, 2, 3, 4], [10, 10, 10, 10, 10], 0)" ];
439 [ color="black" label="(10, [1], [5, 10, 5, 5, 2], -7)" ];
440 [ color="black" label="(7, [2, 4], [5, 2, 10, 5, 10], -4)" ];
441 [ color="black" label="(8, [4], [3, 7, 6, 5, 10], -2)" ];
442 [ color="black" label="(9, [4], [3, 7, 5, 5, 10], -2)" ];
443 [ color="black" label="(10, [4], [3, 7, 4, 5, 10], 1)" ];
444 [ color="black" label="(8, [], [3, 7, 6, 5, 2], -4)" ];
445 [ color="black" label="(9, [], [3, 7, 5, 5, 2], -4)" ];
446 [ color="black" label="(8, [0, 2], [10, 2, 10, 5, 2], -5)" ];
447 [ color="black" label="(7, [2], [5, 2, 10, 5, 2], -6)" ];
448 [ color="black" label="(8, [0, 2, 4], [10, 2, 10, 5, 10], -3)" ];
449 [ color="black" label="(8, [2, 3, 4], [5, 7, 10, 10, 10], -1)" ];
450 [ color="black" label="(8, [2, 3], [5, 7, 10, 10, 2], -3)" ];
451 [ color="black" label="(1, [1, 2, 3, 4], [5, 10, 10, 10, 10], -1)" ];
452 [ color="black" label="(6, [0, 1, 3, 4], [10, 10, 5, 10, 10], -2)" ];
453 [ color="black" label="(6, [0, 1, 3], [10, 10, 5, 10, 2], -4)" ];
454 [ color="black" label="(9, [3], [3, 2, 4, 10, 2], 0)" ];
455 [ color="black" label="(9, [3, 4], [3, 2, 4, 10, 10], 2)" ];
456 [ color="black" label="(8, [3], [3, 2, 5, 10, 2], -3)" ];
457 [ color="black" label="(8, [3, 4], [3, 2, 5, 10, 10], -1)" ];
458 [ color="black" label="(5, [1, 3, 4], [5, 10, 5, 10, 10], -3)" ];
459 [ color="black" label="(9, [1, 2], [3, 10, 10, 5, 2], -2)" ];
460 [ color="black" label="(8, [0, 1, 2, 4], [10, 10, 10, 5, 10], -2)" ];
461 [ color="black" label="(7, [0, 3, 4], [10, 2, 5, 10, 10], -3)" ];
462 [ color="black" label="(7, [0, 3], [10, 2, 5, 10, 2], -5)" ];
463 [ color="black" label="(10, [2, 3, 4], [3, 7, 10, 10, 10], 2)" ];
464 [ color="black" label="(9, [1, 2, 4], [3, 10, 10, 5, 10], 0)" ];
465 [ color="black" label="(10, [2, 3], [3, 7, 10, 10, 2], 0)" ];
466 [ color="black" label="(4, [0, 2, 4], [10, 7, 10, 5, 10], -2)" ];
467 [ color="black" label="(9, [0, 2, 3], [10, 7, 10, 10, 2], -2)" ];
468 [ color="black" label="(7, [1, 2], [5, 10, 10, 5, 2], -5)" ];
469 [ color="black" label="(9, [0, 2, 3, 4], [10, 7, 10, 10, 10], 0)" ];
470 [ color="black" label="(7, [1, 2, 4], [5, 10, 10, 5, 10], -3)" ];
471 [ color="black" label="(10, [4], [5, 0, 4, 5, 10], -1)" ];
472 [ color="black" label="(10, [0, 4], [10, 0, 5, 5, 10], -3)" ];
473 [ color="black" label="(10, [], [5, 0, 4, 5, 2], -3)" ];
474 [ color="black" label="(8, [0, 1, 2], [10, 10, 10, 5, 2], -4)" ];
475 [ color="black" label="(10, [0], [10, 0, 5, 5, 2], -5)" ];
318 -> 1 [ label="1" ];
38 -> 2 [ label="0" ];
38 -> 3 [ label="1" ];
81 -> 4 [ label="0" ];
82 -> 5 [ label="0" ];
84 -> 6 [ label="0" ];
85 -> 7 [ label="0" ];
86 -> 8 [ label="0" ];
446 -> 9 [ label="0" ];
88 -> 10 [ label="0" ];
448 -> 11 [ label="0" ];
451 -> 12 [ label="0" ];
21 -> 13 [ label="1" ];
21 -> 14 [ label="0" ];
416 -> 15 [ label="0" ];
414 -> 16 [ label="0" ];
96 -> 17 [ label="0" ];
96 -> 18 [ label="1" ];
458 -> 19 [ label="0" ];
458 -> 20 [ label="1" ];
378 -> 21 [ label="1" ];
461 -> 22 [ label="0" ];
462 -> 23 [ label="0" ];
201 -> 24 [ label="1" ];
197 -> 25 [ label="1" ];
470 -> 26 [ label="0" ];
105 -> 27 [ label="0" ];
106 -> 28 [ label="0" ];
302 -> 29 [ label="1" ];
468 -> 30 [ label="0" ];
305 -> 31 [ label="1" ];
444 -> 32 [ label="0" ];
445 -> 33 [ label="0" ];
441 -> 34 [ label="0" ];
442 -> 35 [ label="0" ];
56 -> 36 [ label="0" ];
57 -> 37 [ label="0" ];
466 -> 38 [ label="0" ];
418 -> 39 [ label="0" ];
419 -> 40 [ label="0" ];
420 -> 41 [ label="0" ];
421 -> 42 [ label="0" ];
423 -> 43 [ label="0" ];
424 -> 44 [ label="0" ];
4 -> 45 [ label="0" ];
9 -> 46 [ label="0" ];
454 -> 47 [ label="0" ];
6 -> 48 [ label="0" ];
169 -> 49 [ label="1" ];
455 -> 50 [ label="0" ];
97 -> 51 [ label="0" ];
456 -> 52 [ label="0" ];
457 -> 53 [ label="0" ];
11 -> 54 [ label="0" ];
12 -> 55 [ label="0" ];
127 -> 56 [ label="0" ];
127 -> 57 [ label="1" ];
101 -> 58 [ label="0" ];
103 -> 59 [ label="0" ];
372 -> 60 [ label="0" ];
231 -> 61 [ label="1" ];
376 -> 62 [ label="0" ];
232 -> 63 [ label="1" ];
19 -> 64 [ label="0" ];
52 -> 65 [ label="0" ];
53 -> 66 [ label="0" ];
95 -> 67 [ label="0" ];
20 -> 68 [ label="0" ];
377 -> 69 [ label="0" ];
94 -> 70 [ label="0" ];
399 -> 71 [ label="0" ];
23 -> 72 [ label="0" ];
24 -> 73 [ label="0" ];
2 -> 74 [ label="0" ];
25 -> 75 [ label="0" ];
3 -> 76 [ label="0" ];
30 -> 77 [ label="0" ];
26 -> 78 [ label="0" ];
22 -> 79 [ label="0" ];
76 -> 80 [ label="1" ];
155 -> 81 [ label="0" ];
392 -> 82 [ label="0" ];
74 -> 83 [ label="1" ];
156 -> 84 [ label="0" ];
388 -> 85 [ label="0" ];
363 -> 86 [ label="1" ];
386 -> 87 [ label="0" ];
360 -> 88 [ label="1" ];
400 -> 89 [ label="0" ];
162 -> 90 [ label="0" ];
159 -> 91 [ label="0" ];
163 -> 92 [ label="0" ];
164 -> 93 [ label="0" ];
165 -> 94 [ label="0" ];
166 -> 95 [ label="0" ];
408 -> 96 [ label="0" ];
451 -> 97 [ label="1" ];
55 -> 98 [ label="0" ];
1 -> 99 [ label="0" ];
220 -> 100 [ label="1" ];
43 -> 101 [ label="0" ];
44 -> 102 [ label="0" ];
41 -> 103 [ label="0" ];
42 -> 104 [ label="0" ];
62 -> 105 [ label="0" ];
60 -> 106 [ label="0" ];
63 -> 107 [ label="0" ];
61 -> 108 [ label="0" ];
32 -> 109 [ label="0" ];
34 -> 110 [ label="0" ];
64 -> 111 [ label="0" ];
195 -> 112 [ label="0" ];
267 -> 113 [ label="1" ];
68 -> 114 [ label="0" ];
266 -> 115 [ label="1" ];
438 -> 116 [ label="1" ];
194 -> 117 [ label="0" ];
72 -> 118 [ label="0" ];
131 -> 119 [ label="1" ];
196 -> 120 [ label="0" ];
78 -> 121 [ label="0" ];
202 -> 122 [ label="0" ];
77 -> 123 [ label="0" ];
79 -> 124 [ label="0" ];
207 -> 125 [ label="0" ];
203 -> 126 [ label="0" ];
147 -> 127 [ label="0" ];
144 -> 128 [ label="1" ];
142 -> 129 [ label="0" ];
144 -> 130 [ label="0" ];
145 -> 131 [ label="0" ];
413 -> 132 [ color="red" label="1" ];
412 -> 133 [ label="1" ];
138 -> 134 [ label="1" ];
137 -> 135 [ label="1" ];
78 -> 136 [ label="1" ];
215 -> 137 [ label="0" ];
216 -> 138 [ label="0" ];
77 -> 139 [ label="1" ];
98 -> 140 [ label="0" ];
83 -> 141 [ label="0" ];
100 -> 142 [ label="1" ];
80 -> 143 [ label="0" ];
99 -> 144 [ label="0" ];
100 -> 145 [ label="0" ];
18 -> 146 [ label="1" ];
222 -> 147 [ label="0" ];
74 -> 148 [ label="0" ];
17 -> 149 [ label="1" ];
76 -> 150 [ label="0" ];
386 -> 151 [ label="1" ];
231 -> 152 [ label="0" ];
232 -> 153 [ label="0" ];
400 -> 154 [ label="1" ];
249 -> 155 [ label="1" ];
250 -> 156 [ label="1" ];
114 -> 157 [ label="0" ];
111 -> 158 [ label="0" ];
112 -> 159 [ label="0" ];
113 -> 160 [ label="0" ];
115 -> 161 [ label="0" ];
117 -> 162 [ label="0" ];
450 -> 163 [ label="1" ];
449 -> 164 [ label="1" ];
181 -> 165 [ label="0" ];
184 -> 166 [ label="0" ];
149 -> 167 [ label="1" ];
146 -> 168 [ label="1" ];
356 -> 169 [ color="red" label="1" ];
125 -> 170 [ label="0" ];
126 -> 171 [ label="0" ];
157 -> 172 [ label="1" ];
393 -> 173 [ label="1" ];
391 -> 174 [ label="1" ];
128 -> 175 [ label="0" ];
158 -> 176 [ label="1" ];
129 -> 177 [ label="0" ];
130 -> 178 [ label="0" ];
131 -> 179 [ label="0" ];
227 -> 180 [ label="0" ];
246 -> 181 [ label="0" ];
221 -> 182 [ label="0" ];
175 -> 183 [ label="1" ];
247 -> 184 [ label="0" ];
224 -> 185 [ label="0" ];
223 -> 186 [ label="0" ];
228 -> 187 [ label="0" ];
168 -> 188 [ label="0" ];
17 -> 189 [ label="0" ];
18 -> 190 [ label="0" ];
140 -> 191 [ label="0" ];
167 -> 192 [ label="0" ];
140 -> 193 [ label="1" ];
193 -> 194 [ label="1" ];
191 -> 195 [ label="1" ];
208 -> 196 [ label="0" ];
146 -> 197 [ label="0" ];
178 -> 198 [ label="1" ];
119 -> 199 [ label="0" ];
85 -> 200 [ label="1" ];
149 -> 201 [ label="0" ];
212 -> 202 [ label="0" ];
189 -> 203 [ label="1" ];
157 -> 204 [ label="0" ];
82 -> 205 [ label="1" ];
158 -> 206 [ label="0" ];
190 -> 207 [ label="1" ];
279 -> 208 [ label="0" ];
234 -> 209 [ label="1" ];
410 -> 210 [ label="1" ];
405 -> 211 [ label="1" ];
275 -> 212 [ label="0" ];
329 -> 213 [ label="1" ];
229 -> 214 [ label="1" ];
49 -> 215 [ label="0" ];
49 -> 216 [ label="1" ];
141 -> 217 [ label="0" ];
113 -> 218 [ label="1" ];
143 -> 219 [ label="0" ];
116 -> 220 [ label="0" ];
148 -> 221 [ label="0" ];
12 -> 222 [ label="1" ];
296 -> 223 [ label="1" ];
129 -> 224 [ label="1" ];
115 -> 225 [ label="1" ];
105 -> 226 [ label="1" ];
150 -> 227 [ label="0" ];
312 -> 228 [ label="1" ];
216 -> 229 [ label="1" ];
106 -> 230 [ label="1" ];
189 -> 231 [ label="0" ];
190 -> 232 [ label="0" ];
191 -> 233 [ label="0" ];
215 -> 234 [ label="1" ];
307 -> 235 [ label="0" ];
193 -> 236 [ label="0" ];
308 -> 237 [ label="0" ];
310 -> 238 [ label="0" ];
311 -> 240 [ label="0" ];
197 -> 241 [ label="0" ];
201 -> 242 [ label="0" ];
287 -> 243 [ label="0" ];
318 -> 244 [ label="0" ];
287 -> 245 [ label="1" ];
255 -> 246 [ label="1" ];
255 -> 247 [ label="0" ];
188 -> 248 [ label="0" ];
213 -> 249 [ label="0" ];
213 -> 250 [ label="1" ];
331 -> 251 [ color="red" label="1" ];
331 -> 252 [ label="0" ];
192 -> 253 [ label="0" ];
334 -> 254 [ label="0" ];
147 -> 255 [ label="1" ];
63 -> 256 [ label="1" ];
61 -> 257 [ label="1" ];
229 -> 258 [ label="0" ];
183 -> 259 [ label="0" ];
185 -> 260 [ label="0" ];
448 -> 261 [ label="1" ];
198 -> 262 [ label="0" ];
199 -> 263 [ label="0" ];
446 -> 264 [ label="1" ];
350 -> 265 [ label="0" ];
236 -> 266 [ label="0" ];
233 -> 267 [ label="0" ];
234 -> 268 [ label="0" ];
235 -> 269 [ label="0" ];
237 -> 270 [ label="0" ];
173 -> 271 [ label="0" ];
174 -> 272 [ label="0" ];
239 -> 273 [ color="red" label="0" ];
175 -> 274 [ label="0" ];
293 -> 275 [ label="0" ];
177 -> 276 [ label="0" ];
209 -> 277 [ label="0" ];
178 -> 278 [ label="0" ];
295 -> 279 [ label="0" ];
179 -> 280 [ label="0" ];
242 -> 281 [ label="0" ];
241 -> 282 [ label="0" ];
210 -> 283 [ label="0" ];
408 -> 284 [ label="1" ];
211 -> 285 [ label="0" ];
214 -> 286 [ label="0" ];
220 -> 287 [ label="0" ];
135 -> 288 [ label="0" ];
134 -> 289 [ label="0" ];
133 -> 290 [ label="0" ];
132 -> 291 [ label="0" ];
286 -> 292 [ label="0" ];
369 -> 293 [ label="0" ];
277 -> 294 [ label="0" ];
369 -> 295 [ label="1" ];
320 -> 296 [ label="1" ];
341 -> 297 [ label="0" ];
344 -> 298 [ label="0" ];
249 -> 299 [ label="0" ];
250 -> 300 [ label="0" ];
137 -> 301 [ label="0" ];
460 -> 302 [ label="1" ];
399 -> 303 [ label="1" ];
138 -> 304 [ label="0" ];
474 -> 305 [ label="1" ];
377 -> 306 [ label="1" ];
379 -> 307 [ label="0" ];
380 -> 308 [ label="0" ];
327 -> 309 [ label="0" ];
112 -> 310 [ label="1" ];
117 -> 311 [ label="1" ];
317 -> 312 [ label="1" ];
261 -> 313 [ label="0" ];
264 -> 314 [ label="0" ];
153 -> 315 [ label="0" ];
330 -> 316 [ label="0" ];
243 -> 317 [ label="0" ];
273 -> 318 [ label="1" ];
267 -> 319 [ label="0" ];
245 -> 320 [ label="0" ];
266 -> 321 [ label="0" ];
152 -> 322 [ label="0" ];
268 -> 323 [ label="0" ];
258 -> 324 [ label="0" ];
401 -> 325 [ label="0" ];
402 -> 326 [ label="0" ];
403 -> 327 [ label="0" ];
411 -> 328 [ label="0" ];
55 -> 329 [ label="1" ];
404 -> 330 [ label="0" ];
169 -> 331 [ color="red" label="0" ];
409 -> 332 [ label="0" ];
289 -> 333 [ label="0" ];
301 -> 334 [ label="0" ];
97 -> 335 [ label="1" ];
288 -> 336 [ label="0" ];
259 -> 337 [ label="0" ];
1 -> 338 [ label="1" ];
466 -> 339 [ label="1" ];
262 -> 340 [ label="0" ];
278 -> 341 [ label="0" ];
280 -> 342 [ label="0" ];
299 -> 343 [ label="0" ];
274 -> 344 [ label="0" ];
26 -> 345 [ label="1" ];
276 -> 346 [ label="0" ];
300 -> 347 [ label="0" ];
30 -> 348 [ label="1" ];
302 -> 349 [ label="0" ];
304 -> 350 [ label="0" ];
305 -> 351 [ label="0" ];
433 -> 352 [ label="0" ];
432 -> 353 [ label="0" ];
83 -> 354 [ label="1" ];
125 -> 355 [ label="1" ];
438 -> 356 [ color="red" label="0" ];
80 -> 357 [ label="1" ];
374 -> 358 [ label="1" ];
126 -> 359 [ label="1" ];
447 -> 360 [ label="0" ];
321 -> 361 [ label="0" ];
371 -> 362 [ label="1" ];
440 -> 363 [ label="0" ];
323 -> 364 [ label="0" ];
319 -> 365 [ label="0" ];
324 -> 366 [ label="0" ];
321 -> 367 [ label="1" ];
319 -> 368 [ label="1" ];
378 -> 369 [ label="0" ];
384 -> 370 [ label="1" ];
382 -> 371 [ label="0" ];
452 -> 372 [ label="0" ];
384 -> 373 [ label="0" ];
385 -> 374 [ label="0" ];
329 -> 375 [ label="0" ];
453 -> 376 [ label="0" ];
460 -> 377 [ label="0" ];
222 -> 378 [ label="1" ];
19 -> 379 [ label="1" ];
20 -> 380 [ label="1" ];
312 -> 381 [ label="0" ];
339 -> 382 [ label="1" ];
296 -> 383 [ label="0" ];
338 -> 384 [ label="0" ];
339 -> 385 [ label="0" ];
203 -> 386 [ label="1" ];
343 -> 387 [ label="0" ];
376 -> 388 [ label="1" ];
251 -> 389 [ label="1" ];
347 -> 390 [ label="0" ];
317 -> 391 [ label="0" ];
372 -> 392 [ label="1" ];
320 -> 393 [ label="0" ];
345 -> 394 [ label="0" ];
132 -> 395 [ color="red" label="1" ];
348 -> 396 [ label="0" ];
133 -> 397 [ label="1" ];
252 -> 398 [ label="1" ];
474 -> 399 [ label="0" ];
207 -> 400 [ label="1" ];
208 -> 401 [ label="1" ];
212 -> 402 [ label="1" ];
415 -> 403 [ label="0" ];
417 -> 404 [ label="0" ];
398 -> 405 [ label="1" ];
152 -> 406 [ label="1" ];
153 -> 407 [ label="1" ];
356 -> 408 [ label="0" ];
360 -> 409 [ label="0" ];
389 -> 410 [ label="1" ];
363 -> 411 [ label="0" ];
429 -> 412 [ label="1" ];
428 -> 413 [ color="red" label="1" ];
405 -> 414 [ label="0" ];
13 -> 415 [ label="0" ];
410 -> 416 [ label="0" ];
14 -> 417 [ label="0" ];
150 -> 418 [ label="1" ];
148 -> 419 [ label="1" ];
370 -> 420 [ label="0" ];
371 -> 421 [ label="0" ];
469 -> 422 [ label="0" ];
373 -> 423 [ label="0" ];
374 -> 424 [ label="0" ];
375 -> 425 [ label="1" ];
375 -> 426 [ label="0" ];
467 -> 427 [ label="0" ];
251 -> 428 [ color="red" label="0" ];
252 -> 429 [ label="0" ];
387 -> 430 [ label="1" ];
390 -> 431 [ label="1" ];
449 -> 432 [ label="0" ];
450 -> 433 [ label="0" ];
289 -> 434 [ label="1" ];
288 -> 435 [ label="1" ];
387 -> 436 [ label="0" ];
357 -> 437 [ label="0" ];
273 -> 438 [ color="red" label="0" ];
390 -> 439 [ label="0" ];
426 -> 440 [ label="1" ];
423 -> 441 [ label="1" ];
358 -> 442 [ label="0" ];
354 -> 443 [ label="0" ];
420 -> 444 [ label="1" ];
362 -> 445 [ label="0" ];
389 -> 446 [ label="0" ];
425 -> 447 [ label="1" ];
398 -> 448 [ label="0" ];
36 -> 449 [ label="0" ];
37 -> 450 [ label="0" ];
239 -> 451 [ label="1" ];
284 -> 452 [ label="0" ];
284 -> 453 [ label="1" ];
168 -> 454 [ label="1" ];
167 -> 455 [ label="1" ];
462 -> 456 [ label="1" ];
461 -> 457 [ label="1" ];
98 -> 458 [ label="1" ];
413 -> 459 [ label="0" ];
429 -> 460 [ label="0" ];
452 -> 461 [ label="1" ];
453 -> 462 [ label="1" ];
381 -> 463 [ label="0" ];
412 -> 464 [ label="0" ];
383 -> 465 [ label="0" ];
116 -> 466 [ label="1" ];
393 -> 467 [ label="0" ];
425 -> 468 [ label="0" ];
391 -> 469 [ label="0" ];
426 -> 470 [ label="0" ];
345 -> 471 [ label="1" ];
334 -> 472 [ label="1" ];
348 -> 473 [ label="1" ];
428 -> 474 [ label="0" ];
350 -> 475 [ label="1" ];
}

339
PI5/generated/ej3_f1.dot Normal file
View File

@@ -0,0 +1,339 @@
strict digraph G {
1 [ color="black" label="(9,[0, 92],[1, 3, 0, 10, 5])" ];
2 [ color="black" label="(9,[0, 97],[6, 0, 3, 10, 5])" ];
3 [ color="black" label="(5,[5, 100],[6, 3, 8, 10, 5])" ];
4 [ color="black" label="(9,[0, 100],[1, 3, 8, 10, 5])" ];
5 [ color="black" label="(8,[0, 97],[6, 0, 8, 10, 0])" ];
6 [ color="black" label="(8,[0, 89],[6, 0, 0, 10, 0])" ];
7 [ color="black" label="(5,[0, 100],[1, 3, 8, 10, 5])" ];
8 [ color="black" label="(9,[5, 100],[6, 3, 8, 10, 5])" ];
9 [ color="black" label="(9,[5, 92],[6, 3, 0, 10, 5])" ];
10 [ color="black" label="(7,[0, 100],[6, 3, 3, 10, 5])" ];
11 [ color="black" label="(6,[0, 100],[6, 3, 8, 10, 0])" ];
12 [ color="black" label="(7,[0, 97],[1, 0, 8, 10, 5])" ];
13 [ color="black" label="(1,[5, 100],[6, 3, 8, 10, 5])" ];
14 [ color="black" label="(9,[0, 89],[0, 3, 8, 0, 5])" ];
15 [ color="black" label="(9,[0, 81],[0, 3, 0, 0, 5])" ];
16 [ color="black" label="(10,[0, 92],[6, 3, 0, 10, 0])" ];
17 [ color="black" label="(9,[0, 90],[6, 3, 3, 0, 5])" ];
18 [ color="black" label="(7,[0, 99],[0, 3, 8, 10, 5])" ];
19 [ color="black" label="(10,[5, 84],[0, 3, 8, 0, 5])" ];
20 [ color="black" label="(7,[5, 97],[6, 0, 8, 10, 5])" ];
21 [ color="black" label="(9,[0, 87],[1, 0, 8, 0, 5])" ];
22 [ color="black" label="(9,[0, 79],[1, 0, 0, 0, 5])" ];
23 [ color="black" label="(9,[0, 96],[0, 0, 8, 10, 5])" ];
24 [ color="black" label="(9,[0, 88],[0, 0, 0, 10, 5])" ];
25 [ color="black" label="(10,[0, 95],[1, 3, 8, 10, 0])" ];
26 [ color="black" label="(10,[5, 91],[0, 0, 8, 10, 5])" ];
27 [ color="black" label="(10,[5, 83],[0, 0, 0, 10, 5])" ];
28 [ color="black" label="(10,[0, 87],[1, 3, 0, 10, 0])" ];
29 [ color="black" label="(10,[0, 92],[6, 0, 3, 10, 0])" ];
30 [ color="black" label="(9,[5, 87],[6, 0, 8, 0, 5])" ];
31 [ color="black" label="(9,[5, 79],[6, 0, 0, 0, 5])" ];
32 [ color="black" label="(10,[5, 95],[6, 3, 8, 10, 0])" ];
33 [ color="black" label="(10,[5, 87],[6, 3, 0, 10, 0])" ];
34 [ color="black" label="(8,[0, 97],[6, 3, 0, 10, 5])" ];
35 [ color="black" label="(6,[0, 94],[0, 3, 3, 10, 5])" ];
36 [ color="black" label="(8,[5, 94],[0, 3, 8, 10, 5])" ];
37 [ color="black" label="(4,[0, 100],[1, 3, 8, 10, 5])" ];
38 [ color="black" label="(8,[5, 86],[0, 3, 0, 10, 5])" ];
39 [ color="black" label="(10,[0, 82],[1, 0, 8, 0, 0])" ];
40 [ color="black" label="(10,[5, 76],[0, 0, 8, 0, 0])" ];
41 [ color="black" label="(10,[0, 74],[1, 0, 0, 0, 0])" ];
42 [ color="black" label="(10,[0, 100],[1, 3, 8, 10, 5])" ];
43 [ color="black" label="(10,[5, 86],[0, 0, 8, 10, 0])" ];
44 [ color="black" label="(10,[5, 78],[0, 0, 0, 10, 0])" ];
45 [ color="black" label="(10,[0, 92],[1, 3, 0, 10, 5])" ];
46 [ color="black" label="(4,[5, 100],[6, 3, 8, 10, 5])" ];
47 [ color="black" label="(7,[0, 97],[6, 0, 8, 10, 0])" ];
48 [ color="black" label="(10,[5, 82],[6, 0, 8, 0, 0])" ];
49 [ color="black" label="(10,[5, 74],[6, 0, 0, 0, 0])" ];
50 [ color="black" label="(8,[0, 97],[6, 0, 3, 10, 5])" ];
51 [ color="black" label="(6,[0, 100],[1, 3, 8, 10, 5])" ];
52 [ color="black" label="(8,[5, 100],[6, 3, 8, 10, 5])" ];
53 [ color="black" label="(8,[5, 92],[6, 3, 0, 10, 5])" ];
54 [ color="black" label="(8,[0, 97],[1, 0, 8, 10, 5])" ];
55 [ color="black" label="(8,[0, 89],[1, 0, 0, 10, 5])" ];
56 [ color="black" label="(10,[0, 86],[0, 0, 8, 0, 5])" ];
57 [ color="black" label="(6,[0, 100],[6, 3, 3, 10, 5])" ];
58 [ color="black" label="(10,[0, 78],[0, 0, 0, 0, 5])" ];
59 [ color="black" label="(5,[0, 100],[6, 3, 8, 10, 0])" ];
60 [ color="black" label="(0,[5, 100],[6, 3, 8, 10, 5])" ];
61 [ color="black" label="(10,[0, 100],[6, 3, 3, 10, 5])" ];
62 [ color="black" label="(9,[0, 100],[6, 3, 8, 10, 0])" ];
63 [ color="black" label="(10,[0, 99],[0, 3, 8, 10, 5])" ];
64 [ color="black" label="(10,[0, 91],[0, 3, 0, 10, 5])" ];
65 [ color="black" label="(9,[5, 76],[0, 3, 0, 0, 5])" ];
66 [ color="black" label="(9,[0, 87],[6, 0, 8, 0, 0])" ];
67 [ color="black" label="(9,[5, 84],[0, 3, 8, 0, 5])" ];
68 [ color="black" label="(6,[0, 99],[0, 3, 8, 10, 5])" ];
69 [ color="black" label="(8,[0, 96],[0, 0, 8, 10, 5])" ];
70 [ color="black" label="(8,[0, 88],[0, 0, 0, 10, 5])" ];
71 [ color="black" label="(10,[0, 87],[1, 0, 8, 0, 5])" ];
72 [ color="black" label="(10,[0, 79],[1, 0, 0, 0, 5])" ];
73 [ color="black" label="(10,[5, 97],[6, 0, 8, 10, 5])" ];
74 [ color="black" label="(10,[5, 89],[6, 0, 0, 10, 5])" ];
75 [ color="black" label="(9,[5, 91],[0, 0, 8, 10, 5])" ];
76 [ color="black" label="(9,[5, 83],[0, 0, 0, 10, 5])" ];
77 [ color="black" label="(10,[5, 90],[6, 3, 8, 0, 5])" ];
78 [ color="black" label="(10,[5, 82],[6, 3, 0, 0, 5])" ];
79 [ color="black" label="(2,[2, 100],[6, 0, 8, 10, 5])" ];
80 [ color="black" label="(10,[0, 84],[0, 3, 8, 0, 0])" ];
81 [ color="black" label="(10,[0, 76],[0, 3, 0, 0, 0])" ];
82 [ color="black" label="(9,[0, 87],[6, 3, 0, 0, 5])" ];
83 [ color="black" label="(1,[0, 100],[1, 3, 8, 10, 5])" ];
84 [ color="black" label="(7,[5, 94],[0, 3, 8, 10, 5])" ];
85 [ color="black" label="(10,[0, 91],[0, 0, 8, 10, 0])" ];
86 [ color="black" label="(10,[0, 83],[0, 0, 0, 10, 0])" ];
87 [ color="black" label="(7,[0, 97],[6, 0, 3, 10, 5])" ];
88 [ color="black" label="(3,[5, 100],[6, 3, 8, 10, 5])" ];
89 [ color="black" label="(7,[5, 100],[6, 3, 8, 10, 5])" ];
90 [ color="black" label="(7,[0, 100],[1, 3, 8, 10, 5])" ];
91 [ color="black" label="(8,[0, 100],[6, 3, 8, 10, 0])" ];
92 [ color="black" label="(8,[0, 92],[6, 3, 0, 10, 0])" ];
93 [ color="black" label="(9,[0, 97],[1, 0, 8, 10, 5])" ];
94 [ color="black" label="(9,[0, 89],[1, 0, 0, 10, 5])" ];
95 [ color="black" label="(9,[0, 86],[0, 0, 8, 0, 5])" ];
96 [ color="black" label="(9,[0, 78],[0, 0, 0, 0, 5])" ];
97 [ color="black" label="(5,[0, 100],[6, 3, 3, 10, 5])" ];
98 [ color="black" label="(9,[0, 100],[6, 3, 3, 10, 5])" ];
99 [ color="black" label="(9,[0, 99],[0, 3, 8, 10, 5])" ];
100 [ color="black" label="(9,[0, 91],[0, 3, 0, 10, 5])" ];
101 [ color="black" label="(9,[0, 87],[6, 0, 3, 0, 5])" ];
102 [ color="black" label="(9,[0, 82],[1, 3, 0, 0, 5])" ];
103 [ color="black" label="(10,[5, 81],[0, 0, 8, 0, 5])" ];
104 [ color="black" label="(9,[0, 90],[1, 3, 8, 0, 5])" ];
105 [ color="black" label="(7,[0, 96],[0, 0, 8, 10, 5])" ];
106 [ color="black" label="(9,[5, 97],[6, 0, 8, 10, 5])" ];
107 [ color="black" label="(9,[5, 89],[6, 0, 0, 10, 5])" ];
108 [ color="black" label="(8,[0, 94],[6, 0, 0, 10, 5])" ];
109 [ color="black" label="(8,[5, 91],[0, 0, 8, 10, 5])" ];
110 [ color="black" label="(8,[5, 83],[0, 0, 0, 10, 5])" ];
111 [ color="black" label="(10,[0, 92],[1, 0, 8, 10, 0])" ];
112 [ color="black" label="(10,[0, 84],[1, 0, 0, 10, 0])" ];
113 [ color="black" label="(9,[5, 90],[6, 3, 8, 0, 5])" ];
114 [ color="black" label="(9,[5, 82],[6, 3, 0, 0, 5])" ];
115 [ color="black" label="(10,[0, 95],[6, 3, 3, 10, 0])" ];
116 [ color="black" label="(10,[0, 97],[6, 3, 0, 10, 5])" ];
117 [ color="black" label="(10,[5, 79],[0, 3, 8, 0, 0])" ];
118 [ color="black" label="(4,[0, 100],[6, 3, 3, 10, 5])" ];
119 [ color="black" label="(10,[5, 94],[0, 3, 8, 10, 5])" ];
120 [ color="black" label="(2,[0, 100],[1, 3, 8, 10, 5])" ];
121 [ color="black" label="(10,[5, 86],[0, 3, 0, 10, 5])" ];
122 [ color="black" label="(10,[0, 85],[1, 3, 8, 0, 0])" ];
123 [ color="black" label="(6,[5, 94],[0, 3, 8, 10, 5])" ];
124 [ color="black" label="(10,[0, 77],[1, 3, 0, 0, 0])" ];
125 [ color="black" label="(10,[5, 92],[6, 0, 8, 10, 0])" ];
126 [ color="black" label="(10,[5, 84],[6, 0, 0, 10, 0])" ];
127 [ color="black" label="(6,[5, 100],[6, 3, 8, 10, 5])" ];
128 [ color="black" label="(9,[0, 97],[6, 0, 8, 10, 0])" ];
129 [ color="black" label="(10,[0, 97],[6, 0, 3, 10, 5])" ];
130 [ color="black" label="(10,[5, 100],[6, 3, 8, 10, 5])" ];
131 [ color="black" label="(10,[5, 92],[6, 3, 0, 10, 5])" ];
132 [ color="black" label="(8,[0, 100],[1, 3, 8, 10, 5])" ];
133 [ color="black" label="(8,[0, 92],[1, 3, 0, 10, 5])" ];
134 [ color="black" label="(10,[0, 97],[1, 0, 8, 10, 5])" ];
135 [ color="black" label="(10,[5, 85],[6, 3, 8, 0, 0])" ];
136 [ color="black" label="(10,[0, 89],[1, 0, 0, 10, 5])" ];
137 [ color="black" label="(10,[5, 77],[6, 3, 0, 0, 0])" ];
138 [ color="black" label="(8,[0, 100],[6, 3, 3, 10, 5])" ];
139 [ color="black" label="(7,[0, 100],[6, 3, 8, 10, 0])" ];
140 [ color="black" label="(2,[5, 100],[6, 3, 8, 10, 5])" ];
141 [ color="black" label="(10,[0, 89],[0, 3, 8, 0, 5])" ];
142 [ color="black" label="(10,[0, 81],[0, 3, 0, 0, 5])" ];
143 [ color="black" label="(9,[0, 90],[6, 3, 8, 0, 0])" ];
144 [ color="black" label="(8,[0, 99],[0, 3, 8, 10, 5])" ];
145 [ color="black" label="(8,[0, 91],[0, 3, 0, 10, 5])" ];
146 [ color="black" label="(10,[5, 89],[0, 3, 8, 10, 0])" ];
147 [ color="black" label="(8,[5, 97],[6, 0, 8, 10, 5])" ];
148 [ color="black" label="(8,[5, 89],[6, 0, 0, 10, 5])" ];
149 [ color="black" label="(10,[5, 81],[0, 3, 0, 10, 0])" ];
150 [ color="black" label="(10,[0, 90],[1, 3, 8, 0, 5])" ];
151 [ color="black" label="(9,[5, 81],[0, 0, 8, 0, 5])" ];
152 [ color="black" label="(10,[0, 82],[1, 3, 0, 0, 5])" ];
153 [ color="black" label="(9,[5, 73],[0, 0, 0, 0, 5])" ];
154 [ color="black" label="(10,[0, 96],[0, 0, 8, 10, 5])" ];
155 [ color="black" label="(10,[0, 88],[0, 0, 0, 10, 5])" ];
156 [ color="black" label="(4,[0, 100],[6, 3, 8, 5, 5])" ];
157 [ color="black" label="(10,[5, 87],[6, 0, 8, 0, 5])" ];
158 [ color="black" label="(10,[5, 79],[6, 0, 0, 0, 5])" ];
159 [ color="black" label="(7,[5, 91],[0, 0, 8, 10, 5])" ];
160 [ color="black" label="(10,[0, 81],[0, 0, 8, 0, 0])" ];
161 [ color="black" label="(10,[0, 73],[0, 0, 0, 0, 0])" ];
162 [ color="black" label="(9,[0, 97],[6, 3, 0, 10, 5])" ];
163 [ color="black" label="(10,[0, 94],[0, 3, 8, 10, 0])" ];
164 [ color="black" label="(10,[0, 86],[0, 3, 0, 10, 0])" ];
165 [ color="black" label="(3,[0, 100],[6, 3, 3, 10, 5])" ];
166 [ color="black" label="(6,[0, 94],[0, 3, 8, 10, 0])" ];
167 [ color="black" label="(9,[5, 86],[0, 3, 0, 10, 5])" ];
168 [ color="black" label="(9,[5, 94],[0, 3, 8, 10, 5])" ];
169 [ color="black" label="(3,[0, 100],[1, 3, 8, 10, 5])" ];
133 -> 1 [ label="0" ];
50 -> 2 [ label="0" ];
46 -> 3 [ label="0" ];
132 -> 4 [ label="0" ];
47 -> 5 [ label="0" ];
47 -> 6 [ label="8" ];
37 -> 7 [ color="red" label="0" ];
52 -> 8 [ label="0" ];
53 -> 9 [ label="0" ];
57 -> 10 [ label="0" ];
59 -> 11 [ label="0" ];
51 -> 12 [ label="3" ];
60 -> 13 [ label="0" ];
144 -> 14 [ label="10" ];
145 -> 15 [ label="10" ];
162 -> 16 [ label="5" ];
138 -> 17 [ label="10" ];
68 -> 18 [ label="0" ];
67 -> 19 [ label="0" ];
127 -> 20 [ label="3" ];
54 -> 21 [ label="10" ];
55 -> 22 [ label="10" ];
69 -> 23 [ label="0" ];
70 -> 24 [ label="0" ];
4 -> 25 [ label="5" ];
75 -> 26 [ label="0" ];
76 -> 27 [ label="0" ];
1 -> 28 [ label="5" ];
2 -> 29 [ label="5" ];
147 -> 30 [ label="10" ];
148 -> 31 [ label="10" ];
8 -> 32 [ label="5" ];
9 -> 33 [ label="5" ];
10 -> 34 [ label="3" ];
97 -> 35 [ label="6" ];
84 -> 36 [ label="0" ];
169 -> 37 [ color="red" label="0" ];
84 -> 38 [ label="8" ];
21 -> 39 [ label="5" ];
151 -> 40 [ label="5" ];
22 -> 41 [ label="5" ];
4 -> 42 [ label="0" ];
75 -> 43 [ label="5" ];
76 -> 44 [ label="5" ];
1 -> 45 [ label="0" ];
88 -> 46 [ label="0" ];
11 -> 47 [ label="3" ];
30 -> 48 [ label="5" ];
31 -> 49 [ label="5" ];
87 -> 50 [ label="0" ];
7 -> 51 [ label="0" ];
89 -> 52 [ label="0" ];
89 -> 53 [ label="8" ];
12 -> 54 [ label="0" ];
12 -> 55 [ label="8" ];
95 -> 56 [ label="0" ];
97 -> 57 [ label="0" ];
96 -> 58 [ label="0" ];
46 -> 59 [ label="5" ];
98 -> 61 [ label="0" ];
91 -> 62 [ label="0" ];
99 -> 63 [ label="0" ];
100 -> 64 [ label="0" ];
38 -> 65 [ label="10" ];
5 -> 66 [ label="10" ];
36 -> 67 [ label="10" ];
7 -> 68 [ color="red" label="1" ];
105 -> 69 [ label="0" ];
105 -> 70 [ color="red" label="8" ];
21 -> 71 [ label="0" ];
22 -> 72 [ label="0" ];
106 -> 73 [ label="0" ];
107 -> 74 [ label="0" ];
109 -> 75 [ label="0" ];
110 -> 76 [ label="0" ];
113 -> 77 [ label="0" ];
114 -> 78 [ label="0" ];
13 -> 79 [ label="3" ];
14 -> 80 [ label="5" ];
15 -> 81 [ label="5" ];
34 -> 82 [ label="10" ];
60 -> 83 [ color="red" label="5" ];
123 -> 84 [ label="0" ];
23 -> 85 [ label="5" ];
24 -> 86 [ label="5" ];
57 -> 87 [ label="3" ];
140 -> 88 [ label="0" ];
127 -> 89 [ label="0" ];
51 -> 90 [ label="0" ];
139 -> 91 [ label="0" ];
139 -> 92 [ label="8" ];
54 -> 93 [ label="0" ];
55 -> 94 [ label="0" ];
69 -> 95 [ label="10" ];
70 -> 96 [ color="red" label="10" ];
118 -> 97 [ label="0" ];
138 -> 98 [ label="0" ];
144 -> 99 [ label="0" ];
145 -> 100 [ label="0" ];
50 -> 101 [ label="10" ];
133 -> 102 [ label="10" ];
151 -> 103 [ label="0" ];
132 -> 104 [ label="10" ];
68 -> 105 [ color="red" label="3" ];
147 -> 106 [ label="0" ];
148 -> 107 [ label="0" ];
87 -> 108 [ label="3" ];
159 -> 109 [ label="0" ];
159 -> 110 [ label="8" ];
93 -> 111 [ label="5" ];
94 -> 112 [ label="5" ];
52 -> 113 [ label="10" ];
53 -> 114 [ label="10" ];
98 -> 115 [ label="5" ];
162 -> 116 [ label="0" ];
67 -> 117 [ label="5" ];
165 -> 118 [ label="0" ];
168 -> 119 [ label="0" ];
83 -> 120 [ color="red" label="0" ];
167 -> 121 [ label="0" ];
104 -> 122 [ label="5" ];
3 -> 123 [ label="6" ];
102 -> 124 [ label="5" ];
106 -> 125 [ label="5" ];
107 -> 126 [ label="5" ];
3 -> 127 [ label="0" ];
5 -> 128 [ label="0" ];
2 -> 129 [ label="0" ];
8 -> 130 [ label="0" ];
9 -> 131 [ label="0" ];
90 -> 132 [ label="0" ];
90 -> 133 [ label="8" ];
93 -> 134 [ label="0" ];
113 -> 135 [ label="5" ];
94 -> 136 [ label="0" ];
114 -> 137 [ label="5" ];
10 -> 138 [ label="0" ];
11 -> 139 [ label="0" ];
13 -> 140 [ label="0" ];
14 -> 141 [ label="0" ];
15 -> 142 [ label="0" ];
91 -> 143 [ label="10" ];
18 -> 144 [ label="0" ];
18 -> 145 [ label="8" ];
168 -> 146 [ label="5" ];
20 -> 147 [ label="0" ];
20 -> 148 [ label="8" ];
167 -> 149 [ label="5" ];
104 -> 150 [ label="0" ];
109 -> 151 [ label="10" ];
102 -> 152 [ label="0" ];
110 -> 153 [ label="10" ];
23 -> 154 [ label="0" ];
24 -> 155 [ label="0" ];
88 -> 156 [ label="5" ];
30 -> 157 [ label="0" ];
31 -> 158 [ label="0" ];
123 -> 159 [ label="3" ];
95 -> 160 [ label="5" ];
96 -> 161 [ color="red" label="5" ];
34 -> 162 [ label="0" ];
99 -> 163 [ label="5" ];
100 -> 164 [ label="5" ];
140 -> 165 [ label="5" ];
59 -> 166 [ label="6" ];
38 -> 167 [ label="0" ];
36 -> 168 [ label="0" ];
120 -> 169 [ color="red" label="0" ];
}

4967
PI5/generated/ej3_f2.dot Normal file

File diff suppressed because it is too large Load Diff

460313
PI5/generated/ej3_f3.dot Normal file

File diff suppressed because it is too large Load Diff

23
PI5/generated/ej4_f1.dot Normal file
View File

@@ -0,0 +1,23 @@
strict digraph G {
1 [ color="black" label="(4,[4, 5],6)" ];
2 [ color="black" label="(1,[1, 2, 3, 4, 5],0)" ];
3 [ color="black" label="(1,[0, 2, 3, 4, 5],1)" ];
4 [ color="black" label="(5,[5],4)" ];
5 [ color="black" label="(1,[0, 1, 3, 4, 5],2)" ];
6 [ color="black" label="(0,[0, 1, 2, 3, 4, 5],6)" ];
7 [ color="black" label="(3,[2, 4, 5],0)" ];
8 [ color="black" label="(2,[1, 3, 4, 5],6)" ];
9 [ color="black" label="(3,[0, 4, 5],2)" ];
10 [ color="black" label="(6,[],6)" ];
11 [ color="black" label="(2,[0, 2, 4, 5],6)" ];
7 -> 1 [ color="red" label="2" ];
6 -> 2 [ label="0" ];
6 -> 3 [ color="red" label="1" ];
1 -> 4 [ color="red" label="4" ];
6 -> 5 [ label="2" ];
11 -> 7 [ color="red" label="0" ];
2 -> 8 [ label="2" ];
11 -> 9 [ label="2" ];
4 -> 10 [ color="red" label="5" ];
3 -> 11 [ color="red" label="3" ];
}

47
PI5/generated/ej4_f2.dot Normal file
View File

@@ -0,0 +1,47 @@
strict digraph G {
1 [ color="black" label="(4,[0, 2, 4, 5],8)" ];
2 [ color="black" label="(7,[5],0)" ];
3 [ color="black" label="(1,[1, 2, 3, 4, 5, 6, 7],0)" ];
4 [ color="black" label="(6,[1, 7],8)" ];
5 [ color="black" label="(1,[0, 2, 3, 4, 5, 6, 7],1)" ];
6 [ color="black" label="(1,[0, 1, 3, 4, 5, 6, 7],2)" ];
7 [ color="black" label="(6,[0, 5],8)" ];
8 [ color="black" label="(1,[0, 1, 2, 4, 5, 6, 7],3)" ];
9 [ color="black" label="(0,[0, 1, 2, 3, 4, 5, 6, 7],8)" ];
10 [ color="black" label="(2,[1, 3, 4, 5, 6, 7],8)" ];
11 [ color="black" label="(3,[1, 2, 4, 5, 7],0)" ];
12 [ color="black" label="(8,[],8)" ];
13 [ color="black" label="(2,[0, 2, 4, 5, 6, 7],8)" ];
14 [ color="black" label="(3,[0, 2, 4, 5, 7],1)" ];
15 [ color="black" label="(2,[0, 1, 3, 5, 6, 7],8)" ];
16 [ color="black" label="(3,[0, 1, 4, 5, 7],2)" ];
17 [ color="black" label="(2,[0, 2, 3, 4, 5, 7],8)" ];
18 [ color="black" label="(2,[0, 1, 2, 4, 5, 7],8)" ];
19 [ color="black" label="(5,[1, 5, 7],0)" ];
20 [ color="black" label="(5,[0, 5, 7],1)" ];
21 [ color="black" label="(4,[1, 4, 5, 7],8)" ];
22 [ color="black" label="(4,[1, 2, 4, 7],8)" ];
23 [ color="black" label="(4,[0, 1, 5, 7],8)" ];
14 -> 1 [ label="7" ];
7 -> 2 [ color="red" label="0" ];
9 -> 3 [ label="0" ];
19 -> 4 [ label="5" ];
9 -> 5 [ label="1" ];
9 -> 6 [ label="2" ];
20 -> 7 [ color="red" label="7" ];
9 -> 8 [ color="red" label="3" ];
6 -> 10 [ label="0" ];
18 -> 11 [ label="0" ];
2 -> 12 [ color="red" label="5" ];
8 -> 13 [ label="1" ];
18 -> 14 [ label="1" ];
6 -> 15 [ label="4" ];
18 -> 16 [ color="red" label="2" ];
5 -> 17 [ label="6" ];
8 -> 18 [ color="red" label="6" ];
23 -> 19 [ label="0" ];
23 -> 20 [ color="red" label="1" ];
16 -> 21 [ label="0" ];
11 -> 22 [ label="5" ];
16 -> 23 [ color="red" label="4" ];
}

73
PI5/generated/ej4_f3.dot Normal file
View File

@@ -0,0 +1,73 @@
strict digraph G {
1 [ color="black" label="(3,[0, 2, 4, 5, 7, 8, 9],1)" ];
2 [ color="black" label="(2,[0, 2, 4, 5, 6, 7, 8, 9],10)" ];
3 [ color="black" label="(2,[0, 1, 3, 5, 6, 7, 8, 9],10)" ];
4 [ color="black" label="(9,[8],7)" ];
5 [ color="black" label="(2,[0, 2, 3, 4, 5, 6, 7, 8],10)" ];
6 [ color="black" label="(5,[1, 4, 7, 8, 9],2)" ];
7 [ color="black" label="(5,[1, 2, 7, 8, 9],4)" ];
8 [ color="black" label="(4,[1, 2, 4, 7, 8, 9],10)" ];
9 [ color="black" label="(7,[4, 8, 9],2)" ];
10 [ color="black" label="(10,[],10)" ];
11 [ color="black" label="(1,[0, 2, 3, 4, 5, 6, 7, 8, 9],1)" ];
12 [ color="black" label="(7,[4, 7, 8],2)" ];
13 [ color="black" label="(6,[1, 7, 8, 9],10)" ];
14 [ color="black" label="(7,[2, 8, 9],4)" ];
15 [ color="black" label="(6,[2, 4, 8, 9],10)" ];
16 [ color="black" label="(1,[0, 1, 2, 4, 5, 6, 7, 8, 9],3)" ];
17 [ color="black" label="(7,[2, 7, 8],4)" ];
18 [ color="black" label="(6,[2, 4, 7, 8],10)" ];
19 [ color="black" label="(3,[1, 2, 4, 5, 7, 8, 9],0)" ];
20 [ color="black" label="(8,[8, 9],10)" ];
21 [ color="black" label="(3,[0, 1, 4, 5, 7, 8, 9],2)" ];
22 [ color="black" label="(8,[7, 8],10)" ];
23 [ color="black" label="(2,[1, 2, 3, 4, 6, 7, 8, 9],10)" ];
24 [ color="black" label="(2,[0, 2, 3, 4, 5, 7, 8, 9],10)" ];
25 [ color="black" label="(3,[0, 1, 2, 5, 7, 8, 9],4)" ];
26 [ color="black" label="(2,[0, 1, 2, 4, 5, 7, 8, 9],10)" ];
27 [ color="black" label="(5,[2, 4, 7, 8, 9],1)" ];
28 [ color="black" label="(9,[9],8)" ];
29 [ color="black" label="(2,[0, 1, 2, 4, 5, 6, 7, 9],10)" ];
30 [ color="black" label="(4,[0, 1, 5, 7, 8, 9],10)" ];
31 [ color="black" label="(4,[0, 2, 4, 5, 8, 9],10)" ];
32 [ color="black" label="(1,[1, 2, 3, 4, 5, 6, 7, 8, 9],0)" ];
33 [ color="black" label="(4,[0, 2, 4, 5, 7, 8],10)" ];
34 [ color="black" label="(1,[0, 1, 3, 4, 5, 6, 7, 8, 9],2)" ];
35 [ color="black" label="(1,[0, 1, 2, 3, 5, 6, 7, 8, 9],4)" ];
36 [ color="black" label="(0,[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],10)" ];
26 -> 1 [ label="1" ];
11 -> 2 [ label="3" ];
34 -> 3 [ label="4" ];
22 -> 4 [ label="7" ];
11 -> 5 [ label="9" ];
8 -> 6 [ label="2" ];
8 -> 7 [ label="4" ];
19 -> 8 [ color="red" label="5" ];
15 -> 9 [ color="red" label="2" ];
28 -> 10 [ color="red" label="9" ];
36 -> 11 [ label="1" ];
18 -> 12 [ label="2" ];
6 -> 13 [ label="4" ];
15 -> 14 [ label="4" ];
27 -> 15 [ color="red" label="7" ];
36 -> 16 [ color="red" label="3" ];
18 -> 17 [ label="4" ];
27 -> 18 [ label="9" ];
26 -> 19 [ color="red" label="0" ];
9 -> 20 [ color="red" label="4" ];
26 -> 21 [ label="2" ];
12 -> 22 [ label="4" ];
32 -> 23 [ label="5" ];
11 -> 24 [ label="6" ];
26 -> 25 [ label="4" ];
16 -> 26 [ color="red" label="6" ];
8 -> 27 [ color="red" label="1" ];
20 -> 28 [ color="red" label="8" ];
16 -> 29 [ label="8" ];
21 -> 30 [ label="4" ];
1 -> 31 [ label="7" ];
36 -> 32 [ label="0" ];
1 -> 33 [ label="9" ];
36 -> 34 [ label="2" ];
36 -> 35 [ label="4" ];
}

View File

@@ -0,0 +1,107 @@
package adda.ej1;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.jgrapht.GraphPath;
import adda.ej1.common.DatosHuertos;
import adda.ej1.common.HuertosEdge;
import adda.ej1.common.HuertosHeuristic;
import adda.ej1.common.HuertosVertex;
import adda.ej1.common.SolucionHuertos;
import adda.util.ConsoleColors;
import adda.util.Titles;
import us.lsi.colors.GraphColors;
import us.lsi.colors.GraphColors.Color;
import us.lsi.common.String2;
import us.lsi.graphs.alg.AStar;
import us.lsi.graphs.alg.BT;
import us.lsi.graphs.alg.PDR;
import us.lsi.graphs.virtual.EGraph;
import us.lsi.graphs.virtual.EGraph.Type;
import us.lsi.path.EGraphPath.PathType;
public class TestHuertosGV {
public static void main(String[] args) {
IntStream.range(1, 4).forEach(i -> {
System.out.println(ConsoleColors.BLUE + Titles.getTitle(i)
+ ConsoleColors.RESET);
DatosHuertos.iniDatos("ficheros/ejercicios/Ejercicio1DatosEntrada"+i+".txt");
System.out.println(ConsoleColors.RED + "A ESTRELLA"
+ String2.linea() + ConsoleColors.RESET);
testAstar(i);
System.out.println(ConsoleColors.RED + "\nBACKTRACKING"
+ String2.linea() + ConsoleColors.RESET);
testBT(i);
System.out.println(ConsoleColors.RED + "\nDINAMICA"
+ String2.linea() + ConsoleColors.RESET);
testPDR(i);
});
}
private static void testAstar(int i) {
EGraph<HuertosVertex, HuertosEdge> g = EGraph.virtual(
HuertosVertex.initial(),
HuertosVertex.goal(),
PathType.Sum, Type.Max
)
.heuristic(HuertosHeuristic::heuristic)
.edgeWeight(e -> e.weight())
.build();
AStar<HuertosVertex, HuertosEdge,?> alg = AStar.of(g);
GraphPath<HuertosVertex, HuertosEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionHuertos sh = new SolucionHuertos(ls);
System.out.println(sh);
GraphColors.toDot(alg.outGraph(),
"generated/ej1_f"+i+".dot",
v -> v.toString(),
e -> e.action().toString(),
v -> GraphColors.color(Color.black),
e -> GraphColors.colorIf(Color.red, gp.getEdgeList().contains(e)));
}
private static void testBT(int i) {
EGraph<HuertosVertex, HuertosEdge> g = EGraph.virtual(
HuertosVertex.initial(),
HuertosVertex.goal(),
PathType.Sum, Type.Max
)
.heuristic(HuertosHeuristic::heuristic)
.edgeWeight(e -> e.weight())
.build();
BT<HuertosVertex, HuertosEdge,?> alg = BT.of(g);
GraphPath<HuertosVertex, HuertosEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionHuertos sh = new SolucionHuertos(ls);
System.out.println(sh);
}
private static void testPDR(int i) {
EGraph<HuertosVertex, HuertosEdge> g = EGraph.virtual(
HuertosVertex.initial(),
HuertosVertex.goal(),
PathType.Sum, Type.Max
)
.heuristic(HuertosHeuristic::heuristic)
.edgeWeight(e -> e.weight())
.build();
PDR<HuertosVertex, HuertosEdge,?> alg = PDR.of(g);
GraphPath<HuertosVertex, HuertosEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionHuertos sh = new SolucionHuertos(ls);
System.out.println(sh);
}
}

View File

@@ -0,0 +1,99 @@
package adda.ej1.common;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import us.lsi.common.Files2;
import us.lsi.common.String2;
public class DatosHuertos {
public static int N;
public static int M;
private static List<Verdura> verduras;
private static List<Huerto> huertos;
public static record Huerto(String nombre, Integer metrosDisponibles) {
public static Huerto of(String s) {
s = s.replace(";", "");
String[] partes = s.split(": metrosdisponibles=");
return new Huerto(partes[0], Integer.valueOf(partes[1]));
}
}
public static record Verdura(String nombre, Integer metrosRequeridos, List<String> incompatibles) {
public static Verdura of(String s) {
s = s.replace(" -> metrosrequeridos=", ";").replace(" incomp=", "");
String[] partes = s.split(";");
return new Verdura(partes[0], Integer.valueOf(partes[1]), Arrays.asList(partes[2].split(",")));
}
}
public static void toConsole() {
String2.toConsole(huertos, "Huertos de verdura:");
String2.toConsole(verduras, "Verduras:");
String2.toConsole(String2.linea());
}
public static void iniDatos(String fichero) {
List<String> lineas = Files2.linesFromFile(fichero);
Integer aux = lineas.indexOf("// VARIEDADES");
List<String> h = lineas.subList(1, aux);
List<String> v = lineas.subList(aux + 1, lineas.size());
huertos = new ArrayList<>();
for(String huerto : h) {
huertos.add(Huerto.of(huerto));
}
verduras = new ArrayList<>();
for(String verdura : v) {
verduras.add(Verdura.of(verdura));
}
N = verduras.size();
M = huertos.size();
// toConsole();
}
public static Verdura getVerdura(Integer i) {
return verduras.get(i);
}
public static List<Verdura> getVerduras() {
return verduras;
}
public static Huerto getHuerto(Integer j) {
return huertos.get(j);
}
public static Integer getN() {
return N;
}
public static Integer getM() {
return M;
}
public static Integer getMetrosRequeridos(Integer i) {
return verduras.get(i).metrosRequeridos();
}
public static Integer getMetrosDisponibles(Integer j) {
return huertos.get(j).metrosDisponibles();
}
// Incompatible -> 1; Compatible -> 0
public static Integer incompatible(Integer i, Integer k) {
return verduras.get(i).incompatibles().contains(verduras.get(k).nombre()) ? 1 : 0;
}
public static void main(String[] args) {
iniDatos("ficheros/ej1/Ejercicio1DatosEntrada1.txt");
}
public static List<Huerto> getHuertos() {
return huertos;
}
}

View File

@@ -0,0 +1,15 @@
package adda.ej1.common;
import us.lsi.graphs.virtual.SimpleEdgeAction;
public record HuertosEdge(
HuertosVertex source,
HuertosVertex target,
Integer action,
Double weight)
implements SimpleEdgeAction<HuertosVertex, Integer> {
public static HuertosEdge of(HuertosVertex v1, HuertosVertex v2, Integer action) {
return new HuertosEdge(v1, v2, action, action == -1 ? 0. : 1.);
}
}

View File

@@ -0,0 +1,14 @@
package adda.ej1.common;
import java.util.function.Predicate;
public class HuertosHeuristic {
public static Double heuristic(
HuertosVertex v1,
Predicate<HuertosVertex> goal,
HuertosVertex v2) {
// MAXIMO DE VERDURAS PLANTABLES DE v1.index() HASTA DatosHuertos.getN()
return (double) DatosHuertos.getN() - v1.index();
}
}

View File

@@ -0,0 +1,103 @@
package adda.ej1.common;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import adda.ej1.common.DatosHuertos.Huerto;
import us.lsi.common.Set2;
import us.lsi.graphs.virtual.VirtualVertex;
public record HuertosVertex(Integer index,
List<Set<Integer>> reparto, // reparto en cada huerto de las verduras ya plantadas
List<Integer> metrosDisponibles) // metros disponibles que quedan en cada huerto
implements VirtualVertex<HuertosVertex, HuertosEdge, Integer> {
public static HuertosVertex of(Integer index,
List<Set<Integer>> reparto, List<Integer> metrosDisponibles) {
return new HuertosVertex(index,reparto,metrosDisponibles);
}
public static HuertosVertex initial() {
return of(0,repartoInicial(),
DatosHuertos.getHuertos().stream()
.map(Huerto::metrosDisponibles)
.toList());
}
private static List<Set<Integer>> repartoInicial() {
List<Set<Integer>> res = new ArrayList<>();
IntStream.range(0, DatosHuertos.getM())
.forEach(i -> {
res.add(Set.of());
});
return res;
}
public static Predicate<HuertosVertex> goal() {
return v -> v.index == DatosHuertos.getN();
}
// X_i = en que huerto (X) se planta la verdura i -> X_0 = 1 Verdura0 en huerto 1.
// this.index es ese i
@Override
public List<Integer> actions() {
Stream<Integer> actions = IntStream.range(0, DatosHuertos.getM())
.boxed()
.filter(j -> cabe(this.index, j))
.filter(j -> compatible(this.index, j));
if(this.index < DatosHuertos.getN()) {
List<Integer> res = actions.collect(Collectors.toList());
res.add(-1);
return res;
} else {
return List.of();
}
}
private boolean cabe(Integer i, Integer j) {
return this.metrosDisponibles.get(j) >= DatosHuertos.getMetrosRequeridos(i);
}
private boolean compatible(Integer i, Integer j) {
return this.reparto.get(j).stream()
.noneMatch(k -> DatosHuertos.incompatible(i, k) == 1);
}
@Override
public HuertosVertex neighbor(Integer a) {
List<Set<Integer>> nuevoReparto = new ArrayList<>();
for(Set<Integer> s : this.reparto) {
nuevoReparto.add(Set2.copy(s));
}
List<Integer> nuevosMetrosDisponibles = new ArrayList<>(this.metrosDisponibles);
if(a == -1) {
return of(this.index + 1, nuevoReparto, nuevosMetrosDisponibles);
} else {
Set<Integer> nuevoSet = nuevoReparto.get(a);
nuevoSet.add(this.index);
nuevoReparto.set(a, nuevoSet);
nuevosMetrosDisponibles.set(a, nuevosMetrosDisponibles.get(a) -
DatosHuertos.getMetrosRequeridos(this.index));
return of(this.index + 1, nuevoReparto, nuevosMetrosDisponibles);
}
}
@Override
public HuertosEdge edge(Integer a) {
return HuertosEdge.of(this, neighbor(a), a);
}
@Override
public String toString() {
return "("+this.index+","+this.reparto+","+this.metrosDisponibles+")";
}
}

View File

@@ -0,0 +1,50 @@
package adda.ej1.common;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import adda.ej1.common.DatosHuertos.Huerto;
import adda.ej1.common.DatosHuertos.Verdura;
import us.lsi.common.Pair;
public class SolucionHuertos {
private static int index;
private static Integer distintas;
private static List<Pair<Verdura, Huerto>> solucion;
public static SolucionHuertos of_range(List<Integer> ls) {
return new SolucionHuertos(ls);
}
public SolucionHuertos() {
distintas = 0;
solucion = new ArrayList<>();
}
public SolucionHuertos(List<Integer> ls) {
index = 0;
solucion = new ArrayList<>();
ls.stream().forEach(hue -> {
if(hue != -1) {
Verdura v = DatosHuertos.getVerdura(index);
Huerto h = DatosHuertos.getHuerto(hue);
solucion.add(Pair.of(v, h));
}
index++;
});
distintas = (int) solucion.stream()
.map(p -> p.first())
.distinct().count();
}
public String toString() {
String verduras = solucion.stream()
.map(p -> p.first().nombre() + ": Huerto " + p.second().nombre().replace("H", ""))
.collect(Collectors.joining("\n ", "Reparto de verduras y huerto en el que es plantada " +
"cada una de ellas (si procede):\n ", "\n"));
return String.format("%sVariedades cultivadas: %d", verduras, distintas);
}
}

View File

@@ -0,0 +1,89 @@
package adda.ej1.common.manual;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import adda.ej1.common.DatosHuertos;
import adda.ej1.common.SolucionHuertos;
import us.lsi.common.List2;
import us.lsi.common.Map2;
public class HuertosPDR {
public static record Spm(Integer a, Integer weight) implements Comparable<Spm> {
public static Spm of(Integer a, Integer weight) {
return new Spm(a, weight);
}
@Override
public int compareTo(Spm sp) {
return this.weight.compareTo(sp.weight);
}
}
public static Map<HuertosProblem, Spm> mem;
public static Integer bestVal = Integer.MIN_VALUE;
private static SolucionHuertos sol() {
List<Integer> actions = List2.empty();
HuertosProblem prob = HuertosProblem.initial();
Spm spm = mem.get(prob);
while(spm != null && spm.a != null) {
HuertosProblem old = prob;
actions.add(spm.a);
prob = old.neighbor(spm.a);
spm = mem.get(prob);
}
return new SolucionHuertos(actions);
}
private static Double cota(Integer ac, HuertosProblem prob, Integer a) {
Integer w = a == -1 ? 0 : 1;
return ac + w + prob.neighbor(a).heuristic();
}
private static Spm pdr_search(HuertosProblem prob, Integer ac) {
Spm res = null;
boolean isTerminal = prob.index() == DatosHuertos.getN();
boolean isSolution = true;
if(mem.containsKey(prob)) {
res = mem.get(prob);
} else if(isTerminal && isSolution) {
res = Spm.of(null, 0);
mem.put(prob, res);
if(ac > bestVal) { //maximizando
bestVal = ac;
}
} else {
List<Spm> sols = List2.empty();
for(Integer a : prob.actions()) {
Double cota = cota(ac, prob, a);
if(cota <= bestVal) {
continue;
}
HuertosProblem n = prob.neighbor(a);
Integer w = a == -1 ? 0 : 1;
Spm spm = pdr_search(n, ac + w);
if(spm != null) {
Spm aux = Spm.of(a, spm.weight() + w);
sols.add(aux);
}
}
// maximizando
res = sols.stream().max(Comparator.naturalOrder()).orElse(null);
if(res != null) {
mem.put(prob, res);
}
}
return res;
}
public static SolucionHuertos search() {
mem = Map2.empty();
bestVal = Integer.MIN_VALUE; // maximizando
pdr_search(HuertosProblem.initial(),0);
return sol();
}
}

View File

@@ -0,0 +1,89 @@
package adda.ej1.common.manual;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import adda.ej1.common.DatosHuertos;
import adda.ej1.common.DatosHuertos.Huerto;
import us.lsi.common.Set2;
public record HuertosProblem(
Integer index,
List<Set<Integer>> reparto,
List<Integer> metrosDisponibles) {
public static HuertosProblem of(Integer index,
List<Set<Integer>> reparto, List<Integer> metrosDisponibles) {
return new HuertosProblem(index,reparto,metrosDisponibles);
}
public static HuertosProblem initial() {
return of(0,repartoInicial(),
DatosHuertos.getHuertos().stream()
.map(Huerto::metrosDisponibles)
.toList());
}
private static List<Set<Integer>> repartoInicial() {
List<Set<Integer>> res = new ArrayList<>();
IntStream.range(0, DatosHuertos.getM())
.forEach(i -> {
res.add(Set.of());
});
return res;
}
public List<Integer> actions() {
Stream<Integer> actions = IntStream.range(0, DatosHuertos.getM())
.boxed()
.filter(j -> cabe(this.index, j))
.filter(j -> compatible(this.index, j));
if(this.index < DatosHuertos.getN()) {
List<Integer> res = actions.collect(Collectors.toList());
res.add(-1);
return res;
} else {
return List.of();
}
}
private boolean cabe(Integer i, Integer j) {
return this.metrosDisponibles.get(j) >= DatosHuertos.getMetrosRequeridos(i);
}
private boolean compatible(Integer i, Integer j) {
return this.reparto.get(j).stream()
.noneMatch(k -> DatosHuertos.incompatible(i, k) == 1);
}
public HuertosProblem neighbor(Integer a) {
List<Set<Integer>> nuevoReparto = new ArrayList<>();
for(Set<Integer> s : this.reparto) {
nuevoReparto.add(Set2.copy(s));
}
List<Integer> nuevosMetrosDisponibles = new ArrayList<>(this.metrosDisponibles);
if(a == -1) {
return of(this.index + 1, nuevoReparto, nuevosMetrosDisponibles);
} else {
Set<Integer> nuevoSet = nuevoReparto.get(a);
nuevoSet.add(this.index);
nuevoReparto.set(a, nuevoSet);
nuevosMetrosDisponibles.set(a, nuevosMetrosDisponibles.get(a) -
DatosHuertos.getMetrosRequeridos(this.index));
return of(this.index + 1, nuevoReparto, nuevosMetrosDisponibles);
}
}
public Double heuristic() {
// MAXIMO DE VERDURAS PLANTABLES DE v1.index() HASTA DatosHuertos.getN()
return (double) DatosHuertos.getN() - this.index;
}
}

View File

@@ -0,0 +1,22 @@
package adda.ej1.common.manual;
import java.util.stream.IntStream;
import adda.ej1.common.DatosHuertos;
import adda.util.ConsoleColors;
import adda.util.Titles;
import us.lsi.common.String2;
public class TestPDR {
public static void main(String[] args) {
IntStream.range(1, 4).forEach(i -> {
System.out.println(ConsoleColors.BLUE + Titles.getTitle(i)
+ ConsoleColors.RESET);
DatosHuertos.iniDatos("ficheros/ejercicios/Ejercicio1DatosEntrada"+i+".txt");
System.out.println(ConsoleColors.RED + "\nPDR MANUAL"
+ String2.linea() + ConsoleColors.RESET);
System.out.println(HuertosPDR.search());
});
}
}

View File

@@ -0,0 +1,110 @@
package adda.ej2;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.jgrapht.GraphPath;
import adda.ej2.common.CestaEdge;
import adda.ej2.common.CestaHeuristic;
import adda.ej2.common.CestaVertex;
import adda.ej2.common.DatosCesta;
import adda.ej2.common.SolucionCesta;
import adda.util.ConsoleColors;
import adda.util.Titles;
import us.lsi.colors.GraphColors;
import us.lsi.colors.GraphColors.Color;
import us.lsi.common.String2;
import us.lsi.graphs.alg.AStar;
import us.lsi.graphs.alg.BT;
import us.lsi.graphs.alg.PDR;
import us.lsi.graphs.virtual.EGraph;
import us.lsi.graphs.virtual.EGraph.Type;
import us.lsi.path.EGraphPath.PathType;
public class TestCesta {
public static void main(String[] args) {
IntStream.range(1, 4).forEach(i -> {
System.out.println(ConsoleColors.BLUE + Titles.getTitle(i)
+ ConsoleColors.RESET);
DatosCesta.iniDatos("ficheros/ejercicios/Ejercicio2DatosEntrada"+i+".txt");
System.out.println(ConsoleColors.RED + "A ESTRELLA"
+ String2.linea() + ConsoleColors.RESET);
testAstar(i);
System.out.println(ConsoleColors.RED + "\nBACKTRACKING"
+ String2.linea() + ConsoleColors.RESET);
testBT(i);
System.out.println(ConsoleColors.RED + "\nDINAMICA"
+ String2.linea() + ConsoleColors.RESET);
testPDR(i);
});
}
private static void testAstar(int i) {
EGraph<CestaVertex, CestaEdge> g = EGraph.virtual(
CestaVertex.initial(),
CestaVertex.goal(),
PathType.Last, Type.Min
)
.goalHasSolution(CestaVertex.goalHasSolution())
.heuristic(CestaHeuristic::heuristic)
.edgeWeight(e -> e.weight())
.build();
AStar<CestaVertex, CestaEdge,?> alg = AStar.of(g);
GraphPath<CestaVertex, CestaEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionCesta sh = new SolucionCesta(ls);
System.out.println(sh);
GraphColors.toDot(alg.outGraph(),
"generated/ej2_f"+i+".dot",
v -> v.toString(),
e -> e.action().toString(),
v -> GraphColors.color(Color.black),
e -> GraphColors.colorIf(Color.red, gp.getEdgeList().contains(e)));
}
private static void testBT(int i) {
EGraph<CestaVertex, CestaEdge> g = EGraph.virtual(
CestaVertex.initial(),
CestaVertex.goal(),
PathType.Last, Type.Min
)
.goalHasSolution(CestaVertex.goalHasSolution())
.heuristic(CestaHeuristic::heuristic)
.edgeWeight(e -> e.weight())
.build();
BT<CestaVertex, CestaEdge,?> alg = BT.of(g);
GraphPath<CestaVertex, CestaEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionCesta sh = new SolucionCesta(ls);
System.out.println(sh);
}
private static void testPDR(int i) {
EGraph<CestaVertex, CestaEdge> g = EGraph.virtual(
CestaVertex.initial(),
CestaVertex.goal(),
PathType.Last, Type.Min
)
.goalHasSolution(CestaVertex.goalHasSolution())
.heuristic(CestaHeuristic::heuristic)
.edgeWeight(e -> e.weight())
.build();
PDR<CestaVertex, CestaEdge,?> alg = PDR.of(g);
GraphPath<CestaVertex, CestaEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionCesta sh = new SolucionCesta(ls);
System.out.println(sh);
}
}

View File

@@ -0,0 +1,15 @@
package adda.ej2.common;
import us.lsi.graphs.virtual.SimpleEdgeAction;
public record CestaEdge(
CestaVertex source,
CestaVertex target,
Integer action,
Double weight)
implements SimpleEdgeAction<CestaVertex, Integer> {
public static CestaEdge of(CestaVertex v1, CestaVertex v2, Integer action) {
return new CestaEdge(v1, v2, action, action * 1.0);
}
}

View File

@@ -0,0 +1,14 @@
package adda.ej2.common;
import java.util.function.Predicate;
public class CestaHeuristic {
public static Double heuristic(
CestaVertex v1,
Predicate<CestaVertex> goal,
CestaVertex v2) {
// MÍNIMO PRECIO DESDE v1.index() HASTA DatosCesta.getN()
return Math.abs((double) DatosCesta.getPrecio(v1.index() == 0 ? 0 : v1.index() - 1)
- DatosCesta.getPrecio(DatosCesta.getN() - 1));
}
}

View File

@@ -0,0 +1,134 @@
package adda.ej2.common;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import adda.ej2.common.DatosCesta.Producto;
import us.lsi.common.List2;
import us.lsi.common.Pair;
import us.lsi.common.Set2;
import us.lsi.graphs.virtual.VirtualVertex;
public record CestaVertex(
Integer index,
Set<Integer> categoriasPorCubrir,
List<Integer> presupuestoRestante,
Integer acumValoracion)
implements VirtualVertex<CestaVertex, CestaEdge, Integer> {
public static CestaVertex of(
Integer index,
Set<Integer> categoriasPorCubrir,
List<Integer> presupuestoRestante,
Integer acumValoracion) {
return new CestaVertex(index,categoriasPorCubrir,
presupuestoRestante,acumValoracion);
}
public static CestaVertex initial() {
return of(0,initValues().first(),initValues().second(),0);
}
private Integer catActual() {
return DatosCesta.getCategoria(this.index);
}
private static Pair<Set<Integer>,List<Integer>> initValues() {
Set<Integer> cpc = DatosCesta.getProductos().stream()
.map(Producto::categoria)
.collect(Collectors.toSet());
List<Integer> pr = new ArrayList<>();
IntStream.range(0, DatosCesta.getM())
.forEach(i -> pr.add(DatosCesta.getPresupuesto()));
return Pair.of(cpc, pr);
}
// index ES EL PRODUCTO i
public static Predicate<CestaVertex> goal() {
return v -> v.index() == DatosCesta.getN();
}
public static Predicate<CestaVertex> goalHasSolution() {
return v -> cubreTodas(v) && !superaPresupuesto(v) && mediaValoracionesSupera(v);
}
@Override
public List<Integer> actions() {
// Si se selecciona el producto i -> List.of(1)
// Si no se selecciona -> List.of(0)
if(this.index < DatosCesta.getN()) {
Integer cat = DatosCesta.getCategoria(this.index);
if((this.categoriasPorCubrir.size() != 0 &&
DatosCesta.getProducto(this.index)
.tieneCategoriaEn(this.categoriasPorCubrir)) &&
DatosCesta.getPresupuesto() - this.presupuestoRestante.get(cat) >= 0) {
return List.of(1,0);
} else {
return List.of(0);
}
}
return List.of();
}
private static boolean mediaValoracionesSupera(CestaVertex v) {
return v.acumValoracion >= 0;
}
private static boolean superaPresupuesto(CestaVertex v) {
boolean res = false;
for(Integer p : v.presupuestoRestante()) {
if(p > DatosCesta.getPresupuesto()) {
res = true;
}
}
return res;
}
private static boolean cubreTodas(CestaVertex v) {
return v.categoriasPorCubrir().size() == 0;
}
@Override
public CestaVertex neighbor(Integer a) {
if(a == 0) {
return of(this.index() + 1, Set2.copy(this.categoriasPorCubrir()),
List2.copy(this.presupuestoRestante()), this.acumValoracion());
} else {
Set<Integer> nuevasCategorias = Set2.copy(this.categoriasPorCubrir());
nuevasCategorias.remove(DatosCesta.getCategoria(this.index()));
List<Integer> nuevoPresupuesto = List2.copy(this.presupuestoRestante());
nuevoPresupuesto.set(this.catActual(),
nuevoPresupuesto.get(this.catActual()) -
DatosCesta.getPrecio(this.index()));
Integer nuevoAcum = this.acumValoracion();
return of(this.index() + 1, nuevasCategorias, nuevoPresupuesto,
nuevoAcum + DatosCesta.getValoracion(this.index) - 3);
}
}
@Override
public CestaEdge edge(Integer a) {
return CestaEdge.of(this, neighbor(a), a);
}
public String toString() {
return "("+this.index+", "+this.categoriasPorCubrir()+", "+
this.presupuestoRestante()+", "+this.acumValoracion()+")";
}
}

View File

@@ -0,0 +1,104 @@
package adda.ej2.common;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
import us.lsi.common.Files2;
import us.lsi.common.String2;
public class DatosCesta {
public static int N; // productos
public static int M; // categorias
public static int PRES;
private static List<Producto> productos;
private static List<Integer> categorias;
public static record Producto(Integer id, Integer precio, Integer categoria, Integer valoracion) {
public static Producto of(String s) {
List<Integer> datos = Stream.of(s.split(":"))
.map(Integer::valueOf).toList();
return new Producto(datos.get(0), datos.get(1), datos.get(2), datos.get(3));
}
public boolean tieneCategoriaEn(Collection<Integer> categorias) {
boolean res = false;
for(Integer c : categorias) {
if(this.categoria == c) {
res = true;
}
}
return res;
}
}
public static void toConsole() {
String2.toConsole("Presupuesto: %d", PRES);
String2.toConsole(productos, "Cesta de productos:");
String2.toConsole(String2.linea());
}
public static void iniDatos(String fichero) {
List<String> lineas = Files2.linesFromFile(fichero);
List<String> productosStrings = lineas.subList(2, lineas.size());
PRES = Integer.valueOf(lineas.get(0).replace("Presupuesto = ", ""));
productos = new ArrayList<>();
for(String producto : productosStrings) {
productos.add(Producto.of(producto));
}
categorias = productos.stream().map(Producto::categoria).distinct().toList();
N = productos.size();
M = (int) productos.stream()
.map(Producto::categoria)
.distinct().count();
}
public static Integer getN() {
return N;
}
public static Integer getM() {
return M;
}
public static Integer getPrecio(Integer i) {
return productos.get(i).precio();
}
public static Integer getValoracion(Integer i) {
return productos.get(i).valoracion();
}
public static Integer getCategoria(Integer i) {
return productos.get(i).categoria();
}
public static Integer tieneCategoria(Integer i, Integer j) {
return productos.get(i).categoria.equals(categorias.get(j)) ? 1 : 0;
}
public static Integer getPresupuesto() {
return PRES;
}
public static Producto getProducto(int i) {
return productos.get(i);
}
public static List<Integer> getCategorias() {
return categorias;
}
public static List<Producto> getProductos() {
return productos;
}
public static void main(String[] args) {
iniDatos("ficheros/ej2/Ejercicio2DatosEntrada1.txt");
}
}

View File

@@ -0,0 +1,37 @@
package adda.ej2.common;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class SolucionCesta {
private static Integer precioTotal;
private static List<Integer> solucion;
public static SolucionCesta of_list(List<Integer> ls) {
return new SolucionCesta(ls);
}
public SolucionCesta() {
precioTotal = 0;
solucion = new ArrayList<>();
}
public SolucionCesta(List<Integer> ls) {
solucion = new ArrayList<>();
precioTotal = 0;
for(int i = 0; i < ls.size(); i++) {
if(ls.get(i) > 0) {
precioTotal += DatosCesta.getProducto(i).precio();
solucion.add(DatosCesta.getProducto(i).id());
}
}
}
public String toString() {
String productos = solucion.stream()
.map(x -> "Producto " + x)
.collect(Collectors.joining(", ", "Productos elegidos: {", "}\n"));
return String.format("%sPrecio total de la cesta: %d", productos, precioTotal);
}
}

View File

@@ -0,0 +1,91 @@
package adda.ej2.common.manual;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import adda.ej2.common.DatosCesta;
import adda.ej2.common.SolucionCesta;
import us.lsi.common.List2;
import us.lsi.common.Map2;
public class CestaPDR {
public static record Spm(Integer a, Integer weight) implements Comparable<Spm> {
public static Spm of(Integer a, Integer weight) {
return new Spm(a, weight);
}
@Override
public int compareTo(Spm sp) {
return this.weight.compareTo(sp.weight);
}
}
public static Map<CestaProblem, Spm> mem;
public static Integer bestVal = Integer.MAX_VALUE;
public static SolucionCesta sol() {
List<Integer> actions = List2.empty();
CestaProblem prob = CestaProblem.initial();
Spm spm = mem.get(prob);
while(spm != null && spm.a != null) {
CestaProblem old = prob;
actions.add(spm.a);
prob = old.neighbor(spm.a);
spm = mem.get(prob);
}
return new SolucionCesta(actions);
}
public static Double cota(Integer ac, CestaProblem prob, Integer a) {
return ac + a + prob.neighbor(a).heuristic();
}
private static Spm pdr_search(CestaProblem prob, int ac, Map<CestaProblem, Spm> mem) {
Spm res = null;
boolean isTerminal = prob.index() == DatosCesta.getN();
boolean isSolution = prob.categoriasPorCubrir().isEmpty() &&
prob.presupuestoRestante().stream().allMatch(p -> p >= 0) &&
prob.acumValoracion() >= 0;
if(mem.containsKey(prob)) {
res = mem.get(prob);
} else if(isTerminal && isSolution) {
res = Spm.of(null, 0);
mem.put(prob, res);
if(ac < bestVal) { // minimizando
bestVal = ac;
}
} else {
List<Spm> sols = List2.empty();
for(Integer a : prob.actions()) {
Double cota = cota(ac, prob, a);
if(cota > bestVal) {
continue;
}
CestaProblem n = prob.neighbor(a);
Integer w = DatosCesta.getPrecio(prob.index()) * a;
Spm spm = pdr_search(n, ac + w, mem);
if(spm != null) {
Spm aux = Spm.of(a, spm.weight() + w);
sols.add(aux);
}
}
// minimizando
res = sols.stream().min(Comparator.naturalOrder()).orElse(null);
if(res != null) {
mem.put(prob, res);
}
}
return res;
}
public static SolucionCesta search() {
mem = Map2.empty();
bestVal = Integer.MAX_VALUE; // minimizando
pdr_search(CestaProblem.initial(), 0, mem);
return sol();
}
}

View File

@@ -0,0 +1,94 @@
package adda.ej2.common.manual;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import adda.ej2.common.DatosCesta;
import adda.ej2.common.DatosCesta.Producto;
import us.lsi.common.List2;
import us.lsi.common.Pair;
import us.lsi.common.Set2;
public record CestaProblem(
Integer index,
Set<Integer> categoriasPorCubrir,
List<Integer> presupuestoRestante,
Integer acumValoracion) {
public static CestaProblem of(
Integer index,
Set<Integer> categoriasPorCubrir,
List<Integer> presupuestoRestante,
Integer acumValoracion) {
return new CestaProblem(index,categoriasPorCubrir,
presupuestoRestante,acumValoracion);
}
public static CestaProblem initial() {
return of(0,initValues().first(),initValues().second(),0);
}
private Integer catActual() {
return DatosCesta.getCategoria(this.index);
}
private static Pair<Set<Integer>,List<Integer>> initValues() {
Set<Integer> cpc = DatosCesta.getProductos().stream()
.map(Producto::categoria)
.collect(Collectors.toSet());
List<Integer> pr = new ArrayList<>();
IntStream.range(0, DatosCesta.getM())
.forEach(i -> pr.add(DatosCesta.getPresupuesto()));
return Pair.of(cpc, pr);
}
public List<Integer> actions() {
// Si se selecciona el producto i -> List.of(1)
// Si no se selecciona -> List.of(0)
if(this.index < DatosCesta.getN()) {
Integer cat = DatosCesta.getCategoria(this.index);
if((this.categoriasPorCubrir.size() != 0 &&
DatosCesta.getProducto(this.index)
.tieneCategoriaEn(this.categoriasPorCubrir)) &&
DatosCesta.getPresupuesto() - this.presupuestoRestante.get(cat) >= 0) {
return List.of(1,0);
} else {
return List.of(0);
}
}
return List.of();
}
public CestaProblem neighbor(Integer a) {
if(a == 0) {
return of(this.index() + 1, Set2.copy(this.categoriasPorCubrir()),
List2.copy(this.presupuestoRestante()), this.acumValoracion());
} else {
Set<Integer> nuevasCategorias = Set2.copy(this.categoriasPorCubrir());
nuevasCategorias.remove(DatosCesta.getCategoria(this.index()));
List<Integer> nuevoPresupuesto = List2.copy(this.presupuestoRestante());
nuevoPresupuesto.set(this.catActual(),
nuevoPresupuesto.get(this.catActual()) -
DatosCesta.getPrecio(this.index()));
Integer nuevoAcum = this.acumValoracion();
return of(this.index() + 1, nuevasCategorias, nuevoPresupuesto,
nuevoAcum + DatosCesta.getValoracion(this.index) - 3);
}
}
public Double heuristic() {
// MÍNIMO PRECIO DESDE v1.index() HASTA DatosCesta.getN()
return Math.abs((double) DatosCesta.getPrecio(this.index() == 0 ? 0 : this.index() - 1)
- DatosCesta.getPrecio(DatosCesta.getN() - 1));
}
}

View File

@@ -0,0 +1,22 @@
package adda.ej2.common.manual;
import java.util.stream.IntStream;
import adda.ej2.common.DatosCesta;
import adda.util.ConsoleColors;
import adda.util.Titles;
import us.lsi.common.String2;
public class TestPDR {
public static void main(String[] args) {
IntStream.range(1, 4).forEach(i -> {
System.out.println(ConsoleColors.BLUE + Titles.getTitle(i)
+ ConsoleColors.RESET);
DatosCesta.iniDatos("ficheros/ejercicios/Ejercicio2DatosEntrada"+i+".txt");
System.out.println(ConsoleColors.RED + "\nPDR MANUAL"
+ String2.linea() + ConsoleColors.RESET);
System.out.println(CestaPDR.search());
});
}
}

View File

@@ -0,0 +1,110 @@
package adda.ej3;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.jgrapht.GraphPath;
import adda.ej3.common.DatosProductosTransportes;
import adda.ej3.common.ProductosTransportesEdge;
import adda.ej3.common.ProductosTransportesHeuristic;
import adda.ej3.common.ProductosTransportesVertex;
import adda.ej3.common.SolucionProductosTransportes;
import adda.util.ConsoleColors;
import adda.util.Titles;
import us.lsi.colors.GraphColors;
import us.lsi.colors.GraphColors.Color;
import us.lsi.common.String2;
import us.lsi.graphs.alg.AStar;
import us.lsi.graphs.alg.BT;
import us.lsi.graphs.alg.PDR;
import us.lsi.graphs.virtual.EGraph;
import us.lsi.graphs.virtual.EGraph.Type;
import us.lsi.path.EGraphPath.PathType;
public class TestProductosTransportes {
public static void main(String[] args) {
IntStream.range(1, 4).forEach(i -> {
System.out.println(ConsoleColors.BLUE + Titles.getTitle(i)
+ ConsoleColors.RESET);
DatosProductosTransportes.iniDatos("ficheros/ejercicios/Ejercicio3DatosEntrada"+i+".txt");
System.out.println(ConsoleColors.RED + "A ESTRELLA"
+ String2.linea() + ConsoleColors.RESET);
testAstar(i);
System.out.println(ConsoleColors.RED + "\nBACKTRACKING"
+ String2.linea() + ConsoleColors.RESET);
testBT(i);
System.out.println(ConsoleColors.RED + "\nDINAMICA"
+ String2.linea() + ConsoleColors.RESET);
testPDR(i);
});
}
private static void testAstar(int i) {
EGraph<ProductosTransportesVertex, ProductosTransportesEdge> g = EGraph.virtual(
ProductosTransportesVertex.initial(),
ProductosTransportesVertex.goal(),
PathType.Sum, Type.Min
)
.heuristic(ProductosTransportesHeuristic::heuristic)
.goalHasSolution(ProductosTransportesVertex.goalHasSolution())
.edgeWeight(e -> e.weight())
.build();
AStar<ProductosTransportesVertex, ProductosTransportesEdge,?> alg = AStar.of(g);
GraphPath<ProductosTransportesVertex, ProductosTransportesEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionProductosTransportes sh = new SolucionProductosTransportes(ls);
System.out.println(sh);
GraphColors.toDot(alg.outGraph(),
"generated/ej3_f"+i+".dot",
v -> v.toString(),
e -> e.action().toString(),
v -> GraphColors.color(Color.black),
e -> GraphColors.colorIf(Color.red, gp.getEdgeList().contains(e)));
}
private static void testBT(int i) {
EGraph<ProductosTransportesVertex, ProductosTransportesEdge> g = EGraph.virtual(
ProductosTransportesVertex.initial(),
ProductosTransportesVertex.goal(),
PathType.Sum, Type.Min
)
.heuristic(ProductosTransportesHeuristic::heuristic)
.goalHasSolution(ProductosTransportesVertex.goalHasSolution())
.edgeWeight(e -> e.weight())
.build();
BT<ProductosTransportesVertex, ProductosTransportesEdge,?> alg = BT.of(g);
GraphPath<ProductosTransportesVertex, ProductosTransportesEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionProductosTransportes sh = new SolucionProductosTransportes(ls);
System.out.println(sh);
}
private static void testPDR(int i) {
EGraph<ProductosTransportesVertex, ProductosTransportesEdge> g = EGraph.virtual(
ProductosTransportesVertex.initial(),
ProductosTransportesVertex.goal(),
PathType.Sum, Type.Min
)
.heuristic(ProductosTransportesHeuristic::heuristic)
.goalHasSolution(ProductosTransportesVertex.goalHasSolution())
.edgeWeight(e -> e.weight())
.build();
PDR<ProductosTransportesVertex, ProductosTransportesEdge,?> alg = PDR.of(g);
GraphPath<ProductosTransportesVertex, ProductosTransportesEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionProductosTransportes sh = new SolucionProductosTransportes(ls);
System.out.println(sh);
}
}

View File

@@ -0,0 +1,94 @@
package adda.ej3.common;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import us.lsi.common.Files2;
import us.lsi.common.String2;
public class DatosProductosTransportes {
public static int N; // productos
public static int M; // destinos
public static List<Destino> destinos;
public static List<Producto> productos;
public static record Destino(Integer id, Integer demanda) {
public static Destino of(String s) {
String[] partes = s.replaceAll("D(\\d+): demandaminima=(\\d+);", "$1,$2").split(",");
return new Destino(Integer.valueOf(partes[0]), Integer.valueOf(partes[1]));
}
}
public static record Producto(Integer id, Integer cantidad, List<Integer> coste) {
public static Producto of(String s) {
String[] partes = s.replace(" -> uds=", ";").replace(" coste_almacenamiento=", "").split(";");
String[] costes = partes[2].replaceAll("\\([0-9]+:", "").replace(")", "").split(",");
return new Producto(Integer.valueOf(partes[0].substring(1)), Integer.valueOf(partes[1]),
Stream.of(costes).map(Integer::valueOf).collect(Collectors.toList()));
}
}
public static void toConsole() {
String2.toConsole(destinos, "Destinos posibles:");
String2.toConsole(productos, "Productos del distribuidor:");
String2.toConsole(String2.linea());
}
public static void iniDatos(String fichero) {
List<String> lineas = Files2.linesFromFile(fichero);
Integer aux = lineas.indexOf("// PRODUCTOS Id_producto -> unidades=integer;coste_almacenamiento=(destino:coste)");
List<String> d = lineas.subList(1, aux);
List<String> p = lineas.subList(aux + 1, lineas.size());
destinos = new ArrayList<>();
for(String destino : d) {
destinos.add(Destino.of(destino));
}
productos = new ArrayList<>();
for(String producto : p) {
productos.add(Producto.of(producto));
}
N = productos.size();
M = destinos.size();
}
public static Integer getN() {
return N;
}
public static Integer getM() {
return M;
}
public static Integer getCantidad(Integer i) {
return productos.get(i).cantidad();
}
public static Integer getDemanda(Integer j) {
return destinos.get(j).demanda();
}
public static Integer getCoste(Integer i, Integer j) {
return productos.get(i).coste().get(j);
}
public static Producto getProducto(int i) {
return productos.get(i);
}
public static List<Producto> getProductos() {
return productos;
}
public static List<Destino> getDestinos() {
return destinos;
}
public static void main(String[] args) {
iniDatos("ficheros/ej3/Ejercicio3DatosEntrada1.txt");
}
}

View File

@@ -0,0 +1,20 @@
package adda.ej3.common;
import us.lsi.graphs.virtual.SimpleEdgeAction;
public record ProductosTransportesEdge(
ProductosTransportesVertex source,
ProductosTransportesVertex target,
Integer action,
Double weight)
implements SimpleEdgeAction<ProductosTransportesVertex, Integer> {
public static ProductosTransportesEdge of(ProductosTransportesVertex v1,
ProductosTransportesVertex v2, Integer action) {
int i = v1.z() / DatosProductosTransportes.getM();
int j = v1.z() % DatosProductosTransportes.getM();
double w = DatosProductosTransportes.getCoste(i, j) * action;
return new ProductosTransportesEdge(v1, v2, action, w);
}
}

View File

@@ -0,0 +1,19 @@
package adda.ej3.common;
import java.util.function.Predicate;
import java.util.stream.IntStream;
public class ProductosTransportesHeuristic {
public static Double heuristic(ProductosTransportesVertex v1, Predicate<ProductosTransportesVertex> goal,
ProductosTransportesVertex v2) {
// COSTE MINIMO DE PRODS AUN DEMANDADOS EN [z, n*m)
if (v1.demandasRestantes().stream().allMatch(x -> x <= 0))
return 0.;
Integer ultimoIndice = DatosProductosTransportes.getM() * DatosProductosTransportes.getN();
return IntStream.range(v1.z(), ultimoIndice)
.filter(i -> v1.demandasRestantes().get(i % DatosProductosTransportes.getM()) > 0)
.mapToDouble(i -> DatosProductosTransportes.getCoste(i / DatosProductosTransportes.getM(),
i % DatosProductosTransportes.getM()))
.min().orElse(Double.MAX_VALUE);
}
}

View File

@@ -0,0 +1,99 @@
package adda.ej3.common;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import adda.ej3.common.DatosProductosTransportes.Destino;
import adda.ej3.common.DatosProductosTransportes.Producto;
import us.lsi.common.List2;
import us.lsi.common.Pair;
import us.lsi.graphs.virtual.VirtualVertex;
public record ProductosTransportesVertex(
Integer z,
List<Integer> unidadesRestantes,
List<Integer> demandasRestantes)
implements VirtualVertex<ProductosTransportesVertex, ProductosTransportesEdge, Integer>{
public static ProductosTransportesVertex of(
Integer z,
List<Integer> unidadesRestantes,
List<Integer> demandasRestantes) {
return new ProductosTransportesVertex(z,unidadesRestantes,demandasRestantes);
}
public static ProductosTransportesVertex initial() {
return of(0, initialValues().first(), initialValues().second());
}
private static Pair<List<Integer>,List<Integer>> initialValues() {
List<Integer> ur = DatosProductosTransportes.getProductos().stream()
.map(Producto::cantidad).toList();
List<Integer> dr = DatosProductosTransportes.getDestinos().stream()
.map(Destino::demanda).toList();
return Pair.of(ur, dr);
}
// GOAL OK
public static Predicate<ProductosTransportesVertex> goal() {
return v -> v.z() == DatosProductosTransportes.getN() * DatosProductosTransportes.getM();
}
// GOALHASSOLUTION OK
public static Predicate<ProductosTransportesVertex> goalHasSolution() {
return v -> v.demandasRestantes.stream().allMatch(d -> d == 0);
}
// ACTIONS OK
public List<Integer> actions() {
// TODO Auto-generated method stub
List<Integer> actions = new ArrayList<>();
Integer totVars = DatosProductosTransportes.getN() *
DatosProductosTransportes.getM();
if(z < totVars) {
Integer uds = this.unidadesRestantes
.get(z/DatosProductosTransportes.getM());
Integer dem = this.demandasRestantes
.get(z%DatosProductosTransportes.getM());
if (dem == 0 || uds == 0) {
actions = List.of(0);
} else if (uds < 0) {
return List2.empty();
} else if (uds < dem) {
actions = List.of(0, uds);
} else {
actions = List.of(0, dem);
}
return actions;
} else {
return actions;
}
}
// NEIGHBOR OK
@Override
public ProductosTransportesVertex neighbor(Integer a) {
Integer i = this.z / DatosProductosTransportes.getM();
Integer j = this.z % DatosProductosTransportes.getM();
List<Integer> nuevasUnidadesRestantes = new ArrayList<>(unidadesRestantes());
List<Integer> nuevasDemandasRestantes = new ArrayList<>(demandasRestantes());
nuevasUnidadesRestantes.set(i, nuevasUnidadesRestantes.get(i) - a);
nuevasDemandasRestantes.set(j, nuevasDemandasRestantes.get(j) - a);
return of(this.z + 1, nuevasUnidadesRestantes, nuevasDemandasRestantes);
}
// EDGE OK
@Override
public ProductosTransportesEdge edge(Integer a) {
return ProductosTransportesEdge.of(this, neighbor(a), a);
}
public String toString() {
return "("+this.z+","+this.unidadesRestantes+","+this.demandasRestantes+")";
}
}

View File

@@ -0,0 +1,45 @@
package adda.ej3.common;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class SolucionProductosTransportes {
private static Map<Integer, List<Integer>> solucion;
private static Integer costeTotal;
public static SolucionProductosTransportes of_range(List<Integer> ls) {
return new SolucionProductosTransportes(ls);
}
public SolucionProductosTransportes() {
solucion = new HashMap<>();
costeTotal = 0;
}
public SolucionProductosTransportes(List<Integer> ls) {
solucion = new HashMap<>();
costeTotal = 0;
for(int i = 0; i < DatosProductosTransportes.getN(); i++) {
solucion.put(i, new ArrayList<>());
for(int j = 0; j < DatosProductosTransportes.getM(); j++) {
solucion.get(i).add(ls.get(i * DatosProductosTransportes.getM() + j));
costeTotal += ls.get(i * DatosProductosTransportes.getM() + j) *
DatosProductosTransportes.getCoste(i, j);
}
}
}
public String toString() {
String productos = solucion.entrySet().stream()
.map(e -> e.getKey() + ": " + e.getValue())
.collect(Collectors.joining("\n",
"Reparto obtenido (cantidad de producto repartido a cada destino):\n" +
"//Destino m:[cantidad de producto n, cantidad de producto n+1, ...]\n",
"\n"));
return String.format("%sCoste total de almacenamiento: %d", productos, costeTotal);
}
}

View File

@@ -0,0 +1,38 @@
package adda.ej3.common.manual;
import java.util.List;
public class ProductosTransportesBT {
private static Double bestVal;
private static ProductosTransportesState state;
private static List<Integer> sol;
public static void search() {
sol = null;
bestVal = Double.MAX_VALUE; // minimizando
state = ProductosTransportesState.initial();
bt_search();
}
private static void bt_search() {
if(state.isSolution()) {
Double d = state.ac;
if(d < bestVal) { // minimizando
bestVal = d;
sol = state.sol();
}
} else if(!state.isTerminal()) {
for(Integer a : state.actual.actions()) {
if(state.cota(a) < bestVal) { // minimizando
state.forward(a);
bt_search();
state.back();
}
}
}
}
public static List<Integer> sol() {
return sol;
}
}

View File

@@ -0,0 +1,86 @@
package adda.ej3.common.manual;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
import adda.ej3.common.DatosProductosTransportes;
import adda.ej3.common.DatosProductosTransportes.Destino;
import adda.ej3.common.DatosProductosTransportes.Producto;
import us.lsi.common.List2;
import us.lsi.common.Pair;
public record ProductosTransportesProblem (
Integer z,
List<Integer> unidadesRestantes,
List<Integer> demandasRestantes) {
public static ProductosTransportesProblem of(
Integer z,
List<Integer> unidadesRestantes,
List<Integer> demandasRestantes) {
return new ProductosTransportesProblem(z,unidadesRestantes,demandasRestantes);
}
public static ProductosTransportesProblem initial() {
return of(0, initialValues().first(), initialValues().second());
}
private static Pair<List<Integer>,List<Integer>> initialValues() {
List<Integer> ur = DatosProductosTransportes.getProductos().stream()
.map(Producto::cantidad).toList();
List<Integer> dr = DatosProductosTransportes.getDestinos().stream()
.map(Destino::demanda).toList();
return Pair.of(ur, dr);
}
public List<Integer> actions() {
List<Integer> actions = new ArrayList<>();
Integer totVars = DatosProductosTransportes.getN() *
DatosProductosTransportes.getM();
if(z < totVars) {
Integer uds = this.unidadesRestantes
.get(z/DatosProductosTransportes.getM());
Integer dem = this.demandasRestantes
.get(z%DatosProductosTransportes.getM());
if (dem == 0 || uds == 0) {
actions = List.of(0);
} else if (uds < 0) {
return List2.empty();
} else if (uds < dem) {
actions = List.of(0, uds);
} else {
actions = List.of(0, dem);
}
return actions;
} else {
return actions;
}
}
public ProductosTransportesProblem neighbor(Integer a) {
Integer i = this.z / DatosProductosTransportes.getM();
Integer j = this.z % DatosProductosTransportes.getM();
List<Integer> nuevasUnidadesRestantes = new ArrayList<>(unidadesRestantes());
List<Integer> nuevasDemandasRestantes = new ArrayList<>(demandasRestantes());
nuevasUnidadesRestantes.set(i, nuevasUnidadesRestantes.get(i) - a);
nuevasDemandasRestantes.set(j, nuevasDemandasRestantes.get(j) - a);
return of(this.z + 1, nuevasUnidadesRestantes, nuevasDemandasRestantes);
}
public Double heuristic() {
// COSTE MINIMO DE PRODS AUN DEMANDADOS EN [z, n*m)
if (this.demandasRestantes().stream().allMatch(x -> x <= 0))
return 0.;
Integer ultimoIndice = DatosProductosTransportes.getM() * DatosProductosTransportes.getN();
return IntStream.range(this.z(), ultimoIndice)
.filter(i -> this.demandasRestantes().get(i % DatosProductosTransportes.getM()) > 0)
.mapToDouble(i -> DatosProductosTransportes.getCoste(i / DatosProductosTransportes.getM(),
i % DatosProductosTransportes.getM()))
.min().orElse(Double.MAX_VALUE);
}
}

View File

@@ -0,0 +1,73 @@
package adda.ej3.common.manual;
import java.util.List;
import adda.ej3.common.DatosProductosTransportes;
import us.lsi.common.List2;
public class ProductosTransportesState {
ProductosTransportesProblem actual;
Double ac;
List<Integer> actions;
List<ProductosTransportesProblem> prev;
private ProductosTransportesState(ProductosTransportesProblem prob, Double a,
List<Integer> li, List<ProductosTransportesProblem> lp) {
actual = prob;
ac = a;
actions = li;
prev = lp;
}
public static ProductosTransportesState of(ProductosTransportesProblem prob, Double ac,
List<Integer> li, List<ProductosTransportesProblem> lp) {
return new ProductosTransportesState(prob,ac,li,lp);
}
public static ProductosTransportesState initial() {
ProductosTransportesProblem p = ProductosTransportesProblem.initial();
return of(p, 0., List2.empty(), List2.empty());
}
public void forward(Integer a) {
ac += a * DatosProductosTransportes.getCoste(actual.z()/DatosProductosTransportes.getM(),
actual.z()%DatosProductosTransportes.getM());
actions.add(a);
prev.add(actual);
actual = actual.neighbor(a);
}
public void back() {
int last = actions.size() - 1;
var prev_prob = prev.get(last);
ac -= actions.get(last) * DatosProductosTransportes.getCoste(prev_prob.z()/DatosProductosTransportes.getM(),
prev_prob.z()%DatosProductosTransportes.getM());
actions.remove(last);
prev.remove(last);
actual = prev_prob;
}
public List<Integer> actions() {
return actual.actions();
}
public Double cota(Integer a) {
Double w = (double) a * DatosProductosTransportes.getCoste(actual.z()/DatosProductosTransportes.getM(),
actual.z()%DatosProductosTransportes.getM());
return ac + w + actual.neighbor(a).heuristic();
}
public boolean isSolution() {
return actual.demandasRestantes().stream().allMatch(x -> x <= 0);
}
public boolean isTerminal() {
return actual.z() == DatosProductosTransportes.getN() * DatosProductosTransportes.getM();
}
public List<Integer> sol() {
return actions;
}
}

View File

@@ -0,0 +1,25 @@
package adda.ej3.common.manual;
import java.util.stream.IntStream;
import adda.ej3.common.DatosProductosTransportes;
import adda.util.ConsoleColors;
import adda.util.Titles;
import us.lsi.common.String2;
public class TestBT {
public static void main(String[] args) {
IntStream.range(1, 4).forEach(i -> {
System.out.println(ConsoleColors.BLUE + Titles.getTitle(i)
+ ConsoleColors.RESET);
DatosProductosTransportes.iniDatos("ficheros/ejercicios/Ejercicio3DatosEntrada"+i+".txt");
System.out.println(ConsoleColors.RED + "\nBT MANUAL"
+ String2.linea() + ConsoleColors.RESET);
ProductosTransportesBT.search();
System.out.println(ProductosTransportesBT.sol());
});
}
}

View File

@@ -0,0 +1,110 @@
package adda.ej4;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.jgrapht.GraphPath;
import adda.ej4.common.DatosPersonas;
import adda.ej4.common.PersonaEdge;
import adda.ej4.common.PersonaHeuristic;
import adda.ej4.common.PersonaVertex;
import adda.ej4.common.SolucionPersonas;
import adda.util.ConsoleColors;
import adda.util.Titles;
import us.lsi.colors.GraphColors;
import us.lsi.colors.GraphColors.Color;
import us.lsi.common.String2;
import us.lsi.graphs.alg.AStar;
import us.lsi.graphs.alg.BT;
import us.lsi.graphs.alg.PDR;
import us.lsi.graphs.virtual.EGraph;
import us.lsi.graphs.virtual.EGraph.Type;
import us.lsi.path.EGraphPath.PathType;
public class TestPersonas {
public static void main(String[] args) {
IntStream.range(1, 4).forEach(i -> {
System.out.println(ConsoleColors.BLUE + Titles.getTitle(i)
+ ConsoleColors.RESET);
DatosPersonas.iniDatos("ficheros/ejercicios/Ejercicio4DatosEntrada"+i+".txt");
System.out.println(ConsoleColors.RED + "A ESTRELLA"
+ String2.linea() + ConsoleColors.RESET);
testAstar(i);
System.out.println(ConsoleColors.RED + "\nBACKTRACKING"
+ String2.linea() + ConsoleColors.RESET);
testBT(i);
System.out.println(ConsoleColors.RED + "\nDINAMICA"
+ String2.linea() + ConsoleColors.RESET);
testPDR(i);
});
}
private static void testAstar(int i) {
EGraph<PersonaVertex, PersonaEdge> g = EGraph.virtual(
PersonaVertex.initial(),
PersonaVertex.goal(),
PathType.Sum, Type.Min
)
.heuristic(PersonaHeuristic::heuristic)
.goalHasSolution(PersonaVertex.goalHasSolution())
.edgeWeight(e -> e.weight())
.build();
AStar<PersonaVertex, PersonaEdge,?> alg = AStar.of(g);
GraphPath<PersonaVertex, PersonaEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionPersonas sh = new SolucionPersonas(ls);
System.out.println(sh);
GraphColors.toDot(alg.outGraph(),
"generated/ej4_f"+i+".dot",
v -> v.toString(),
e -> e.action().toString(),
v -> GraphColors.color(Color.black),
e -> GraphColors.colorIf(Color.red, gp.getEdgeList().contains(e)));
}
private static void testBT(int i) {
EGraph<PersonaVertex, PersonaEdge> g = EGraph.virtual(
PersonaVertex.initial(),
PersonaVertex.goal(),
PathType.Sum, Type.Min
)
.heuristic(PersonaHeuristic::heuristic)
.goalHasSolution(PersonaVertex.goalHasSolution())
.edgeWeight(e -> e.weight())
.build();
BT<PersonaVertex, PersonaEdge,?> alg = BT.of(g);
GraphPath<PersonaVertex, PersonaEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionPersonas sh = new SolucionPersonas(ls);
System.out.println(sh);
}
private static void testPDR(int i) {
EGraph<PersonaVertex, PersonaEdge> g = EGraph.virtual(
PersonaVertex.initial(),
PersonaVertex.goal(),
PathType.Sum, Type.Min
)
.heuristic(PersonaHeuristic::heuristic)
.goalHasSolution(PersonaVertex.goalHasSolution())
.edgeWeight(e -> e.weight())
.build();
PDR<PersonaVertex, PersonaEdge,?> alg = PDR.of(g);
GraphPath<PersonaVertex, PersonaEdge> gp = alg.search().get();
List<Integer> ls = gp.getEdgeList().stream().map(x -> x.action())
.collect(Collectors.toList());
SolucionPersonas sh = new SolucionPersonas(ls);
System.out.println(sh);
}
}

View File

@@ -0,0 +1,91 @@
package adda.ej4.common;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import us.lsi.common.Files2;
import us.lsi.common.String2;
public class DatosPersonas {
private static int N;
private static List<Persona> personas;
public static record Persona(Integer id, Integer edad, Set<String> idiomas,
String nacionalidad, List<Integer> afinidades) {
public static Persona of(String s) {
String[] partes = s.replaceAll("P(\\d+) -> ", "$1; ")
.replaceAll("\\s\\w+=","").split(";");
return new Persona(
Integer.valueOf(partes[0]),
Integer.valueOf(partes[1]),
Set.of(partes[2].replaceAll("[()\\s]","").split(",")),
partes[3],
List.of(partes[4].replaceAll("\\((\\d+):(\\d+)\\)", "$2").split(",")).stream()
.map(Integer::valueOf)
.toList()
);
}
}
public static void toConsole() {
String2.toConsole(personas, "Personas posibles:");
String2.toConsole(String2.linea());
}
public static void iniDatos(String fichero) {
List<String> lineas = Files2.linesFromFile(fichero);
List<String> personasStrings = lineas.subList(1, lineas.size());
personas = new ArrayList<>();
for(String persona : personasStrings) {
personas.add(Persona.of(persona));
}
N = personas.size();
}
public static Integer getN() {
return N;
}
public static Integer getAfinidad(Integer i, Integer j) {
j = i > j ? j : j - 1;
return personas.get(i).afinidades().get(j);
}
public static List<Integer> getAfinidades(Integer i) {
return personas.get(i).afinidades();
}
public static Integer getEdad(Integer i) {
return personas.get(i).edad();
}
public static Set<String> getIdiomas(Integer i) {
return personas.get(i).idiomas();
}
public static String getNacionalidad(Integer i) {
return personas.get(i).nacionalidad();
}
public static Boolean idiomaComun(Integer i, Integer j) {
Set<String> idiomas = new HashSet<>(personas.get(i).idiomas());
idiomas.retainAll(personas.get(j).idiomas());
return idiomas.size() >= 1;
}
public static Boolean mismaNacionalidad(Integer i, Integer j) {
return personas.get(i).nacionalidad().equals(personas.get(j).nacionalidad());
}
public static Boolean maximaDiferenciaEdad(Integer i, Integer j) {
return Math.abs(personas.get(i).edad() - personas.get(j).edad()) <= 5;
}
public static Integer getId(Integer i) {
return personas.get(i).id();
}
}

View File

@@ -0,0 +1,19 @@
package adda.ej4.common;
import us.lsi.graphs.virtual.SimpleEdgeAction;
public record PersonaEdge(
PersonaVertex source,
PersonaVertex target,
Integer action,
Double weight
) implements SimpleEdgeAction<PersonaVertex, Integer>{
public static PersonaEdge of(PersonaVertex source, PersonaVertex taget, Integer action) {
Double weight = 0.;
for (int i = 0; i < DatosPersonas.getN(); i++) {
weight = (double) DatosPersonas.getAfinidades(i).indexOf(action);
}
return new PersonaEdge(source, taget, action, weight);
}
}

View File

@@ -0,0 +1,19 @@
package adda.ej4.common;
import java.util.Collections;
import java.util.Comparator;
import java.util.function.Predicate;
import java.util.stream.IntStream;
public class PersonaHeuristic {
public static Double heuristic(PersonaVertex v1, Predicate<PersonaVertex> goal, PersonaVertex v2) {
//AFINIDAD MAXIMA EN [i,n)
if(v1.index() % 2 == 0) {
return (double) IntStream.range(v1.index(), DatosPersonas.getN()).boxed()
.map(i -> Collections.max(DatosPersonas.getAfinidades(i)))
.max(Comparator.naturalOrder()).orElse(0);
} else {
return 0.;
}
}
}

View File

@@ -0,0 +1,93 @@
package adda.ej4.common;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import us.lsi.common.Set2;
import us.lsi.graphs.virtual.VirtualVertex;
public record PersonaVertex(Integer index, Set<Integer> restantes, Integer ultima)
implements VirtualVertex<PersonaVertex, PersonaEdge, Integer> {
public static PersonaVertex of(Integer i, Set<Integer> restantes, Integer ultima) {
return new PersonaVertex(i, restantes, ultima);
}
public static PersonaVertex initial() {
Set<Integer> restantes = IntStream.range(0, DatosPersonas.getN()).boxed().map(i -> DatosPersonas.getId(i))
.collect(Collectors.toSet());
return of(0, restantes, DatosPersonas.getN());
}
public static Predicate<PersonaVertex> goal() {
return v -> v.index() == DatosPersonas.getN();
}
public static Predicate<PersonaVertex> goalHasSolution() {
return v -> v.restantes().isEmpty();
}
@Override
public List<Integer> actions() {
List<Integer> actions = new ArrayList<>();
if (this.index() < DatosPersonas.getN()) {
List<Integer> copyRestantes = new ArrayList<>(restantes());
for (int i = 0; i < copyRestantes.size(); i++) {
if (this.index() % 2 == 0) {
Integer p = copyRestantes.get(0);
actions.add(p);
copyRestantes.remove(p);
} else if (this.index() % 2 == 1) {
Integer p = copyRestantes.get(i);
if (restsOk(ultima(), p)) {
actions.add(p);
copyRestantes.remove(p);
}
}
}
}
return actions;
}
private boolean restsOk(Integer persona1, Integer persona2) {
return Math.abs(DatosPersonas.getEdad(persona1) - DatosPersonas.getEdad(persona2)) <= 5
&& !Collections.disjoint(DatosPersonas.getIdiomas(persona1), DatosPersonas.getIdiomas(persona2))
&& !DatosPersonas.getNacionalidad(persona1).equals(DatosPersonas.getNacionalidad(persona2));
}
@Override
public PersonaVertex neighbor(Integer a) {
Set<Integer> nuevasRestantes = new HashSet<>();
Integer nuevaUltima = a;
if(this.index % 2 == 0) {
nuevasRestantes = Set2.copy(this.restantes);
nuevasRestantes.remove(a);
nuevaUltima = a;
} else {
nuevasRestantes = Set2.copy(this.restantes);
nuevasRestantes.remove(a);
nuevaUltima = DatosPersonas.getN();
}
return of(this.index + 1, nuevasRestantes, nuevaUltima);
}
@Override
public PersonaEdge edge(Integer a) {
return PersonaEdge.of(this, neighbor(a), a);
}
public String toString() {
return "(" + this.index + "," + this.restantes + "," + this.ultima + ")";
}
}

View File

@@ -0,0 +1,37 @@
package adda.ej4.common;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import us.lsi.common.Pair;
public class SolucionPersonas {
private static List<Pair<Integer,Integer>> solucion;
private static Integer sumaAf;
public static SolucionPersonas of_list(List<Integer> ls) {
return new SolucionPersonas(ls);
}
public SolucionPersonas() {
sumaAf = 0;
solucion = new ArrayList<>();
}
public SolucionPersonas(List<Integer> ls) {
sumaAf = 0;
solucion = new ArrayList<>();
for(int i = 0; i < ls.size() - 1; i+=2) {
solucion.add(Pair.of(ls.get(i), ls.get(i+1)));
sumaAf += DatosPersonas.getAfinidad(ls.get(i), ls.get(i+1));
}
}
public String toString() {
String personas = solucion.stream()
.map(p -> "(" + p.first() + ", " + p.second() + ")")
.collect(Collectors.joining(", ", "Relación de parejas:\n[", "]\n"));
return String.format("%sSuma de afinidades: %d", personas, sumaAf);
}
}

View File

@@ -0,0 +1,41 @@
package adda.ej4.common.manual;
import adda.ej4.common.SolucionPersonas;
public class PersonasBT {
private static Double bestVal;
private static PersonasState state;
private static SolucionPersonas sol;
public static void search() {
sol = null;
bestVal = Double.MIN_VALUE; // maximizando
state = PersonasState.initial();
bt_search();
}
private static void bt_search() {
if(state.isTerminal()) {
Double d = state.ac;
if(d > bestVal) { // maximizando
bestVal = d;
sol = state.sol();
}
} else {
for(Integer a : state.actual.actions()) {
Double cota = state.cota(a);
if(cota < bestVal) {
continue;
}
state.forward(a);
bt_search();
state.back();
}
}
}
public static SolucionPersonas sol() {
return sol;
}
}

View File

@@ -0,0 +1,83 @@
package adda.ej4.common.manual;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import adda.ej4.common.DatosPersonas;
import us.lsi.common.Set2;
public record PersonasProblem(Integer index, Set<Integer> restantes, Integer ultima) {
public static PersonasProblem of(Integer i, Set<Integer> restantes, Integer ultima) {
return new PersonasProblem(i, restantes, ultima);
}
public static PersonasProblem initial() {
Set<Integer> restantes = IntStream.range(0, DatosPersonas.getN()).boxed().map(i -> DatosPersonas.getId(i))
.collect(Collectors.toSet());
return of(0, restantes, DatosPersonas.getN());
}
public List<Integer> actions() {
List<Integer> actions = new ArrayList<>();
if (this.index() < DatosPersonas.getN()) {
List<Integer> copyRestantes = new ArrayList<>(restantes());
for (int i = 0; i < copyRestantes.size(); i++) {
if (this.index() % 2 == 0) {
Integer p = copyRestantes.get(0);
actions.add(p);
copyRestantes.remove(p);
} else if (this.index() % 2 == 1) {
Integer p = copyRestantes.get(i);
if (restsOk(ultima(), p)) {
actions.add(p);
copyRestantes.remove(p);
}
}
}
}
return actions;
}
private boolean restsOk(Integer persona1, Integer persona2) {
return Math.abs(DatosPersonas.getEdad(persona1) - DatosPersonas.getEdad(persona2)) <= 5
&& !Collections.disjoint(DatosPersonas.getIdiomas(persona1), DatosPersonas.getIdiomas(persona2))
&& !DatosPersonas.getNacionalidad(persona1).equals(DatosPersonas.getNacionalidad(persona2));
}
public PersonasProblem neighbor(Integer a) {
Set<Integer> nuevasRestantes = new HashSet<>();
Integer nuevaUltima = a;
if(this.index % 2 == 0) {
nuevasRestantes = Set2.copy(this.restantes);
nuevasRestantes.remove(a);
nuevaUltima = a;
} else {
nuevasRestantes = Set2.copy(this.restantes);
nuevasRestantes.remove(a);
nuevaUltima = DatosPersonas.getN();
}
return of(this.index + 1, nuevasRestantes, nuevaUltima);
}
public Double heuristic() {
//AFINIDAD MAXIMA EN [i,n)
if(this.index() % 2 == 0) {
return (double) IntStream.range(this.index(), DatosPersonas.getN()).boxed()
.map(i -> Collections.max(DatosPersonas.getAfinidades(i)))
.max(Comparator.naturalOrder()).orElse(0);
} else {
return 0.;
}
}
}

View File

@@ -0,0 +1,77 @@
package adda.ej4.common.manual;
import java.util.List;
import adda.ej4.common.DatosPersonas;
import adda.ej4.common.SolucionPersonas;
import us.lsi.common.List2;
public class PersonasState {
PersonasProblem actual;
Double ac;
List<Integer> actions;
List<PersonasProblem> prev;
private PersonasState(PersonasProblem prob, Double a,
List<Integer> li, List<PersonasProblem> lp) {
actual = prob;
ac = a;
actions = li;
prev = lp;
}
public static PersonasState of(PersonasProblem prob, Double ac,
List<Integer> li, List<PersonasProblem> lp) {
return new PersonasState(prob, ac, li, lp);
}
public static PersonasState initial() {
PersonasProblem p = PersonasProblem.initial();
return of(p, 0., List2.empty(), List2.empty());
}
public void forward(Integer a) {
if(actual.ultima() != DatosPersonas.getN()) {
ac += DatosPersonas.getAfinidad(actual.ultima(), a);
}
actions.add(a);
prev.add(actual);
actual = actual.neighbor(a);
}
public void back() {
int last = actions.size() - 1;
var prev_prob = prev.get(last);
if(prev_prob.ultima() != DatosPersonas.getN()) {
ac -= DatosPersonas.getAfinidad(prev_prob.ultima(), actions.get(last));
}
actions.remove(last);
prev.remove(last);
actual = prev_prob;
}
public List<Integer> actions() {
return actual.actions();
}
public Double cota(Integer a) {
Integer w = 0;
if(actual.ultima() != DatosPersonas.getN()) {
w = DatosPersonas.getAfinidad(actual.ultima(), a);
}
return ac + w + actual.neighbor(a).heuristic();
}
public boolean isSolution() {
return true;
}
public boolean isTerminal() {
return actual.index() == DatosPersonas.getN();
}
public SolucionPersonas sol() {
return new SolucionPersonas(actions);
}
}

View File

@@ -0,0 +1,25 @@
package adda.ej4.common.manual;
import java.util.stream.IntStream;
import adda.ej4.common.DatosPersonas;
import adda.util.ConsoleColors;
import adda.util.Titles;
import us.lsi.common.String2;
public class TestBT {
public static void main(String[] args) {
IntStream.range(1, 4).forEach(i -> {
System.out.println(ConsoleColors.BLUE + Titles.getTitle(i)
+ ConsoleColors.RESET);
DatosPersonas.iniDatos("ficheros/ejercicios/Ejercicio4DatosEntrada"+i+".txt");
System.out.println(ConsoleColors.RED + "\nBT MANUAL"
+ String2.linea() + ConsoleColors.RESET);
PersonasBT.search();
System.out.println(PersonasBT.sol());
});
}
}

View File

@@ -0,0 +1,15 @@
package adda.util;
public class ConsoleColors {
// Reset
public static final String RESET = "\033[0m"; // Text Reset
// Regular Colors
public static final String BLACK = "\033[0;30m"; // BLACK
public static final String RED = "\033[0;31m"; // RED
public static final String GREEN = "\033[0;32m"; // GREEN
public static final String YELLOW = "\033[0;33m"; // YELLOW
public static final String BLUE = "\033[0;34m"; // BLUE
public static final String MAGENTA = "\033[0;35m"; // MAGENTA
public static final String CYAN = "\033[0;36m"; // CYAN
public static final String WHITE = "\033[0;37m"; // WHITE
}

View File

@@ -0,0 +1,49 @@
package adda.util;
public class Titles {
public static String F1 =
"""
####### ##### # ####### #
# # # # ##
# # # # # #
##### # # ##### #
# # # # #
# # # # #
# ##### ####### ####### #####
""";
public static String F2 =
"""
\n\n\n
####### ##### # ####### #####
# # # # # #
# # # # #
##### # # ##### #####
# # # # #
# # # # #
# ##### ####### ####### #######
""";
public static String F3 =
"""
\n\n\n
####### ##### # ####### #####
# # # # # #
# # # # #
##### # # ##### #####
# # # # #
# # # # # #
# ##### ####### ####### #####
""";
public static String getTitle(int i) {
return switch(i) {
case 1: yield F1;
case 2: yield F2;
case 3: yield F3;
default: yield "INVALID";
};
}
}

8
PI5/src/module-info.java Normal file
View File

@@ -0,0 +1,8 @@
module pi5 {
requires transitive datos_compartidos;
requires transitive grafos;
requires transitive org.jgrapht.core;
requires transitive org.jgrapht.io;
requires transitive partecomun;
requires transitive solve;
}