Grafos
-
Upload
vicente-garcia-diaz -
Category
Documents
-
view
781 -
download
1
description
Transcript of Grafos
2
Tabla de contenidos
1. Algoritmos de búsqueda del camino mínimo1. Algoritmo Breadth first search2. Algoritmo de Dijkstra3. Algoritmo de Bellman-Ford4. Algoritmo de Floyd-Warshall
2. Algoritmos de búsqueda del árbol de recubrimiento mínimo
1. Algoritmo de Prim3. Trabajo en equipo4. Bibliografía
3
Algoritmos de búsqueda del camino mínimo
4
Algoritmo Breadth-first search
•Objetivo:
•Ejemplo de uso:
Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo sin tener en cuenta los pesos de los nodos
Saber el número de escalas que hay que hacer desde un aeropuerto para llegar a otro
5
método breadth_first_search(grafo, origen)inicializarcrear cola Qagregar origen a cola Qmientras Q no esté vacia:
sacar elemento v de la cola Qmarcar como visitado vpara cada nodo adyacente w a v en el grafo:
si w no ha sido visitado y no está en la cola:actualizar el contador de w (ahora es v+1)actualizar el predecesor de w (ahora es v)insertar w dentro de la cola Q:
Algoritmo Breadth-first search
Pseudocódigo
6
Ejemplo
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
7
Proceso
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
Nodo inicial
0
Paso 1
V2
COLA DE PROCESO
8
Proceso
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
0
Paso 2
V2,1
V2,1
V2
COLA DE PROCESO
V0V5
9
Proceso
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
0
Paso 3
V2,1
V2,1
V0,2
V0,2
V2
COLA DE PROCESO
V0V5V1V3
10
Proceso
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
0
Paso 4
V2,1
V2,1
V2
COLA DE PROCESO
V0V5V1V3
V0,2
V0,2
11
Proceso
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
0
Paso 5
V1,3
V2
COLA DE PROCESO
V0V5V1V3V4
V2,1
V2,1
V0,2
V0,2
12
Proceso
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
0
Paso 6
V3,3
V2
COLA DE PROCESO
V0V5V1V3V4 V2V0V5V1V6
V2,1
V2,1
V0,2
V0,2
V1,3
13
Proceso
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
0
Paso 7
V2
COLA DE PROCESO
V0V5V1V3V4 V2V0V5V1V6
V2,1
V2,1
V0,2
V0,2
V1,3
V3,3
14
Proceso
Algoritmo Breadth-first search
VO V1
V2 V3 V4
V5 V6
0
Paso 8
V2
COLA DE PROCESO
V0V5V1V3V4 V2V0V5V1V6
V2,1
V2,1
V0,2
V0,2
V1,3
V3,3
15
Ejercicio 1Algoritmo Breadth-first search
• Dada la siguiente organización de objetos, especificar el orden en el que se han recorrido los objetos antes de llegar a encontrar el objeto M desde A
A
B
D
E
F
M
C
G
L
K
H
J
I
16
Algoritmo de Dijkstra
•Objetivo:
•Ejemplo de uso:
Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo con pesos positivos
Averiguar la ruta más corta entre dos poblaciones a través de una red de carreteras
17
método dijkstra(grafo, origen)inicializarcrear cola de prioridades Q ordenada de menor a mayor pesoagregar origen a cola Qmientras Q no esté vacia:
sacar elemento v de la cola Qmarcar como visitado vpara cada nodo adyacente w a v en el grafo:
si (peso de w) > (peso de v + peso entre v y w):actualizar el peso de w (disminuye)actualizar el predecesor de w (ahora es v)si w no ha sido visitado:
si w está en la cola Q: actualizar prioridad de w
y si w no está en la cola: insertar w dentro de la cola Q:
Algoritmo de Dijkstra
Pseudocódigo
18
Proceso
Algoritmo de Dijkstra
VO V1
V2 V3 V4
V5 V6
4
2
1 3
2 2
10
84
1
5 6
Paso 1
V0,0
COLA DE PROCESO
Nodo inicial
0
19
Proceso
Algoritmo de Dijkstra
VO V1
V2 V3 V4
V5 V6
4
2
1 3
2 2
10
84
1
5 6
Paso 2
V0,0
COLA DE PROCESO
0V0,2
V0,1
V1,2V3,1
20
Proceso
Algoritmo de Dijkstra
VO V1
V2 V3 V4
V5 V6
4
2
1 3
2 2
10
84
1
5 6
Paso 3
V0,0
COLA DE PROCESO
0
V1,2V3,1
V3,3
V2,3
V3,9
V5,9
V3,5
V6,5
V3,3
V4,3
V0,1
V0,2
21
Proceso
Algoritmo de Dijkstra
VO V1
V2 V3 V4
V5 V6
4
2
1 3
2 2
10
84
1
5 6
Paso 4
V0,0
COLA DE PROCESO
0
V1,2V3,1V2,3V5,9V6,5V4,3
V0,1
V0,2
V3,3
V3,9 V3,5
V3,3
22
Proceso
Algoritmo de Dijkstra
VO V1
V2 V3 V4
V5 V6
4
2
1 3
2 2
10
84
1
5 6
Paso 5
V0,0
COLA DE PROCESO
0
V1,2V3,1V2,3V5,9V6,5V4,3
V0,1
V0,2
V3,3
V3,9 V3,5
V3,3
23
Proceso
Algoritmo de Dijkstra
VO V1
V2 V3 V4
V5 V6
4
2
1 3
2 2
10
84
1
5 6
Paso 6
V0,0
COLA DE PROCESO
0
V1,2V3,1V2,3V5,9V6,5V4,3
V0,1
V0,2
V3,3
V3,5
V3,3
V3,9V2,8
V5,8
24
Proceso
Algoritmo de Dijkstra
VO V1
V2 V3 V4
V5 V6
4
2
1 3
2 2
10
84
1
5 6
Paso 7
V0,0
COLA DE PROCESO
02
V1,2V3,1V2,3V5,8V6,5V4,3
V0,1
V0,2
V3,3V3,3
V3,5V2,8V6,6
V5,6
25
Proceso
Algoritmo de Dijkstra
VO V1
V2 V3 V4
V5 V6
4
2
1 3
2 2
10
84
1
5 6
Paso 8
V0,0
COLA DE PROCESO
0
V1,2V3,1V2,3V5,6V6,5V4,3
8
V0,1
V0,2
V3,3
V6,6 V3,5
V3,3
26
Ejercicio 1Algoritmo de Dijkstra
• Desde la población S hay 18 kilómetros a la población A y 15 Km a la población C
• Desde la población A hay 9 Km a la población B y 6 Km a la población C
• Desde la población C hay 7 Km a la población D• Desde la población B hay 28 Km a la población T y 10 Km a la
población D• Desde la población D hay 36 Km la población T
• Calcula las rutas mínimas desde la población S al resto de poblaciones teniendo en cuenta que todas las carreteras tienen sentido de ida y vuelta
27
Ejercicio 2Algoritmo de Dijkstra
• Dado el siguiente sistema, encontrar el camino mínimo desde A a todos los demás nodos
A
G
D
C
B
F
E H
2
6
4
6
4
1
2
1
110
5
3
3
2
28
Algoritmo de Bellman-Ford
•Objetivo:
•Ejemplo de uso:
Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo con pesos positivos y negativos
Protocolos de encaminamiento de información
29
método bellman_ford(grafo, origen)inicializarcrear cola Qagregar origen a cola Qmientras Q no esté vacia:
sacar elemento v de la cola Qsi hay bucle negativo
“bucle negativo”y si no, para cada nodo adyacente w a v en el grafo:
si (peso de w) > (peso de v + peso entre v y w):actualizar el peso de w (disminuye)actualizar el predecesor de w (ahora es v)si w no está en la cola:
insertar w dentro de la cola Q:
Algoritmo de Bellman-Ford
Pseudocódigo
30
Proceso
Algoritmo de Bellman-Ford
VO
V1
V2 V3
V4
3
4
2
2
1
Paso 1
V0
COLA DE PROCESO
Nodo inicial
0
-3
-1
31
Proceso
Algoritmo de Bellman-Ford
VO
V1
V2 V3
V4
-1
3
4
2
2
1
Paso 2
V0
COLA DE PROCESO
Nodo inicial
0
-3
V0,-1
V1
V0,4
V2
32
Proceso
Algoritmo de Bellman-Ford
VO
V1
V2 V3
V4
-1
3
4
2
2
1
Paso 3
V0
COLA DE PROCESO
Nodo inicial
0
-3
V0,-1
V1
V0,4
V2
V1,1
V3
V1,1
V4
V1,2
33
Proceso
Algoritmo de Bellman-Ford
VO
V1
V2 V3
V4
-1
3
4
2
2
1
Paso 4
V0
COLA DE PROCESO
Nodo inicial
0
-3
V0,-1
V1
V1,2
V2
V1,1
V3
V1,1
V4
34
Proceso
Algoritmo de Bellman-Ford
VO
V1
V2 V3
V4
-1
3
4
2
2
1
Paso 5
V0
COLA DE PROCESO
Nodo inicial
0
-3
V0,-1
V1
V1,2
V2
V1,1
V3
V1,1
V4
35
Proceso
Algoritmo de Bellman-Ford
VO
V1
V2 V3
V4
-1
3
4
2
2
1
Paso 6
V0
COLA DE PROCESO
Nodo inicial
0
-3
V0,-1
V1
V1,2
V2
V1,1
V3
V1,1
V4
V4,-2
V3
36
Proceso
Algoritmo de Bellman-Ford
VO
V1
V2 V3
V4
-1
3
4
2
2
1
Paso 7
V0
COLA DE PROCESO
Nodo inicial
0
-3
V0,-1
V1
V1,2
V2
V1,1
V3
V1,1
V4
V4,-2
V3
V3,-1
V2
37
Proceso
Algoritmo de Bellman-Ford
VO
V1
V2 V3
V4
-1
3
4
2
2
1
Paso 8
V0
COLA DE PROCESO
Nodo inicial
0
-3
V0,-1
V1
V1,2
V2
V1,1
V3
V1,1
V4
V4,-2
V3
V3,-1
V2
38
Ejercicio 1Algoritmo de Bellman-Ford
• Dado el siguiente sistema basado en las penalizaciones que tiene un jugador en función de las acciones que realiza en un videojuego, encontrar las secuencias de acciones cuya penalización sea mínima desde el inicio del juego (nodo A)
A
DC
B E6
7
5
-2
7
9
-382
-4
39
Ejercicio 2Algoritmo de Bellman-Ford
• En base a la tabla, calcular el camino mínimo desde V2 al resto de nodos:
V0 V1 V2 V3 V4 V5 V6
V0 0 4 2
V1 0 2
V2 2 0 3
V3 6 0 6 5 8
V4 -10 0 6
V5 0
V6 1 0
40
Algoritmo de Floyd-Warshall
•Objetivo:
•Ejemplo de uso:
Encontrar el camino mínimo entre todos los pares de nodos de un grafo
Averiguar la ruta más corta entre TODAS las poblaciones a través de una red de carreteras
41
método floyd-warshall(grafo)M[i, j] := ∞ i != j∀M[i, j] := p(i, j) (i, j) en el grafo ∀ ∈M[i, i] := 0 i∀
for k := 1 to n dofor i := 1 to n do
for j := 1 to n dosi M[i, j] > M[i, k] + M[k, j]
M[i, j] = M[i, k] + M[k, j]for i := 1 to n do
si M[i, i] < 0 “bucle negativo”
Algoritmo de Floyd-Warshall
Pseudocódigo
42
Proceso
Algoritmo de Floyd-Warshall
V2
V1 V3
V4V5
3 4
8
-4
6
-5
17
2
Matriz de adyacencia W
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0 INF 1 7
V3 INF 4 0 INF INF
V4 2 INF -5 0 INF
V5 INF INF INF 6 0
Paso 1
0 si i=j Wij = ∞ si los vértices i,j no son adyacentes
El peso de la arista si los vértices i,j si son adyacentes
43
ProcesoAlgoritmo de Floyd-Warshall
Matriz de adyacencia D(0)
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0 INF 1 7
V3 INF 4 0 INF INF
V4 2 INF -5 0 INF
V5 INF INF INF 6 0
Paso 2
V1 V2 V3 V4 V5
V1 NIL 1 1 NIL 1
V2 NIL NIL NIL 2 2
V3 NIL 3 NIL NIL NIL
V4 4 NIL 4 NIL NIL
V5 NIL NIL NIL 5 NIL
Matriz de predecesores P(0)
NIL si i=j o si Dij = INF
i el resto
Pij
K=0 Wij si k=0
min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0 D(k)ij
44
ProcesoAlgoritmo de Floyd-Warshall
Matriz de adyacencia D(0)
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0 INF 1 7
V3 INF 4 0 INF INF
V4 2 INF -5 0 INF
V5 INF INF INF 6 0
Paso 3
Wij si k=0
min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0 D(k)ij
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0
V3 INF 0
V4 2 0
V5 INF 0
Matriz de adyacencia D(1)
K=1
V1 V2 V3 V4 V5
V1 NIL 1 1 NIL 1
V2 NIL NIL
V3 NIL NIL
V4 4 NIL
V5 NIL NIL
Matriz de predecesores P(1)
45
ProcesoAlgoritmo de Floyd-Warshall
Matriz de adyacencia D(0)
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0 INF 1 7
V3 INF 4 0 INF INF
V4 2 INF -5 0 INF
V5 INF INF INF 6 0
Paso 4
Wij si k=0
min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0 D(k)ij
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0 INF
V3 INF 0
V4 2 0
V5 INF 0
Matriz de adyacencia D(1)
K=1 Para i = 2, j = 3:
D(k)23 = min(D(k-1)23, D(k-1)21 + D(k-1)13) => D(1)23 = min(D(0)23, D(0)21 + D(0)13) =>D(1)23 = min(D(0)23, D(0)21 + D(0)13) =>D(1)23 = min(INF, INF + 8) = INF
Estamos mirando si hay algún camino para llegar D23 que pase por D21 y por D13 y que haga más corto al camino actual
V1 V2 V3 V4 V5
V1 NIL 1 1 NIL 1
V2 NIL NIL NIL
V3 NIL NIL
V4 4 NIL
V5 NIL NIL
Matriz de predecesores P(1)
46
ProcesoAlgoritmo de Floyd-Warshall
Matriz de adyacencia D(0)
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0 INF 1 7
V3 INF 4 0 INF INF
V4 2 INF -5 0 INF
V5 INF INF INF 6 0
Paso 5
Wij si k=0
min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0 D(k)ij
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0 INF 1 7
V3 INF 4 0 INF INF
V4 2 5 0
V5 INF 0
Matriz de adyacencia D(1)
K=1
Estamos mirando si hay algún camino para llegar D42 que pase por D41 y por D12 y que haga más corto al camino actual
Para i = 4, j = 2:
D(k)42 = min(D(k-1)42, D(k-1)41 + D(k-1)12) => D(1)42 = min(D(0)42, D(0)41 + D(0)12) =>D(1)42 = min(D(0)42, D(0)41 + D(0)12) =>D(1)42 = min(INF, 2 + 3) = 5
V1 V2 V3 V4 V5
V1 NIL 1 1 NIL 1
V2 NIL NIL NIL 2 2
V3 NIL 3 NIL NIL NIL
V4 4 1 NIL
V5 NIL NIL
Matriz de predecesores P(1)
Cambios
47
ProcesoAlgoritmo de Floyd-Warshall
Matriz de adyacencia D(1)
V1 V2 V3 V4 V5
V1 0 3 8 INF -4
V2 INF 0 INF 1 7
V3 INF 4 0 INF INF
V4 2 5 -5 0 -2
V5 INF INF INF 6 0
Paso 6
V1 V2 V3 V4 V5
V1 NIL 1 1 NIL 1
V2 NIL NIL NIL 2 2
V3 NIL 3 NIL NIL NIL
V4 4 1 4 NIL 1
V5 NIL NIL NIL 5 NIL
Matriz de predecesores P(1)
K=1
48
ProcesoAlgoritmo de Floyd-Warshall
Matriz de adyacencia D(2)
V1 V2 V3 V4 V5
V1 0 3 8 4 -4
V2 INF 0 INF 1 7
V3 INF 4 0 5 11
V4 2 5 -5 0 -2
V5 INF INF INF 6 0
Paso 7
V1 V2 V3 V4 V5
V1 NIL 1 1 2 1
V2 NIL NIL NIL 2 2
V3 NIL 3 NIL 2 2
V4 4 1 4 NIL 1
V5 NIL NIL NIL 5 NIL
Matriz de predecesores P(2)
K=2
49
ProcesoAlgoritmo de Floyd-Warshall
Matriz de adyacencia D(5)
V1 V2 V3 V4 V5
V1 0 1 -3 2 -4
V2 3 0 -4 1 -1
V3 7 4 0 5 3
V4 2 -1 -5 0 -2
V5 8 5 1 6 0
Paso 8
V1 V2 V3 V4 V5
V1 NIL 3 4 5 1
V2 4 NIL 4 2 1
V3 4 3 NIL 2 1
V4 4 3 4 NIL 1
V5 4 3 4 5 NIL
Matriz de predecesores P(5)
V2
V1 V3
V4V5
3 4
8
-4
6
-5
17
2
50
¿Camino y coste desde V3 a V5?Algoritmo de Floyd-Warshall
Matriz de adyacencia D(5)
V1 V2 V3 V4 V5
V1 0 1 -3 2 -4
V2 3 0 -4 1 -1
V3 7 4 0 5 3
V4 2 -1 -5 0 -2
V5 8 5 1 6 0
V1 V2 V3 V4 V5
V1 NIL 3 4 5 1
V2 4 NIL 4 2 1
V3 4 3 NIL 2 1
V4 4 3 4 NIL 1
V5 4 3 4 5 NIL
Matriz de predecesores P(5)
V2
V1 V3
V4V5
3 4
8
-4
6
-5
17
2
51
Ejercicio 1Algoritmo de Floyd-Warshall
• Calcular la distancia mínima entre todos los pares de nodos
V2V1
V5
V4V3
3
4
16
2
2
1
3
52
Ejercicio 2Algoritmo de Floyd-Warshall
• Busca un ejemplo en el que al aplicar Floyd-Warshall aparezca un bucle infinito y aplica el algoritmo para visualizar la matriz de adyacencia y la matriz de predecesores
V2V1
V3V4
1
1
-3
1
1
53
Algoritmos de búsqueda del árbol de recubrimiento mínimo
54
Algoritmo de Prim
•Objetivo:
•Ejemplo de uso:
Encontrar el árbol de recubrimiento mínimo en un grafo conexo, no dirigido
Trazar la mínima cantidad de cable posible para cubrir las necesidades de una nueva urbanización
Un grafo es conexo si cada par de vértices está conectado por un camino
55
método prim(grafo, origen)1- marcar un nodo dentro del grafo, el cual será el nodo de partida
2- seleccionar la arista de menor valor que salga del nodo marcado
3- marcar el nodo al que llega la arista seleccionada en el paso previo
4- repetir los pasos 2 y 3 de tal modo que se vayan obteniendo aristas entre nodos marcados y otros que no lo están
5- el algoritmo termina cuando están todos los nodos marcados
Algoritmo de Prim
Pseudocódigo
56
Proceso
Algoritmo de Prim
VO V1
V3 V4
V2
59
87
Paso 1
Nodo inicial
7
V5
V6
5
15
6 8
11
9
57
Proceso
Algoritmo de Prim
VO V1
V3 V4
V2
59
87
Paso 2
7
V5
V6
5
15
6 8
11
9
Árbol Opciones Grafo
{V3} {V3, V0} = 5{V3, V1} = 9{V3, V4} = 15{V3, V5} = 6
{V0, V1, V2, V4, V5, V6}
58
Proceso
Algoritmo de Prim
VO V1
V3 V4
V2
59
87
Paso 3
7
V5
V6
5
15
6 8
11
9
Árbol Opciones Grafo
{V0, V3} {V3, V1} = 9{V3, V4} = 15{V3, V5} = 6{V0, V1} = 7
{V1, V2, V4, V5, V6}
59
Proceso
Algoritmo de Prim
VO V1
V3 V4
V2
59
87
Paso 4
7
V5
V6
5
15
6 8
11
9
Árbol Opciones Grafo
{V0, V3, V5} {V3, V1} = 9{V3, V4} = 15{V0, V1} = 7 {V5, V4} = 8{V5, V6} = 11
{V1, V2, V4, V6}
60
Proceso
Algoritmo de Prim
VO V1
V3 V4
V2
59
87
Paso 5
7
V5
V6
5
15
6 8
11
9
Árbol Opciones Grafo
{V0, V1, V3, V5}
{V3, V1} = C{V3, V4} = 15{V5, V4} = 8{V5, V6} = 11{V1, V2} = 8{V1, V4} = 7
{V2, V4, V6}
61
Proceso
Algoritmo de Prim
VO V1
V3 V4
V2
59
87
Paso 6
7
V5
V6
5
15
6 8
11
9
Árbol Opciones Grafo
{V0, V1, V3, V4, V5}
{V3, V1} = C{V3, V4} = C{V5, V4} = C{V5, V6} = 11{V1, V2} = 8{V4, V2} = 5{V4, V6} = 9
{V2, V6}
62
Proceso
Algoritmo de Prim
VO V1
V3 V4
V2
59
87
Paso 7
7
V5
V6
5
15
6 8
11
9
Árbol Opciones Grafo
{V0, V1, V2, V3, V4, V5}
{V3, V1} = C{V3, V4} = C{V5, V4} = C{V5, V6} = 11{V1, V2} = C{V4, V6} = 9
{V6}
63
Proceso
Algoritmo de Prim
VO V1
V3 V4
V2
59
87
Paso 8
7
V5
V6
5
15
6 8
11
9
Árbol Opciones Grafo
{V0, V1, V2, V3, V4, V5, V6}
{V3, V1} = C{V3, V4} = C{V5, V4} = C{V5, V6} = C{V1, V2} = C
{}
64
•Realizar trabajos en grupo para presentarlos y defenderlos en clase
•El trabajo de grafos puede consistir en:▫Escoger un algoritmo y aplicarlo en un caso real▫Comparar dos o más algoritmos
•Se entregará en formato Power Point en el campus virtual
Trabajo en equipo
65
Bibliografía
• WEISS, Mark Allen; (2000) Data Estructures & Problem Solving Using Java. Addison Wesley. ISBN 03-2154-140-5.
• JAIME SISA, Alberto; (2002) Estructuras de Datos y Algoritmos con énfasis en programación orientada a objetos. Pearson Educación. ISBN 958-699-044-3.
• JOYANES AGUILAR, LUIS (2007) Estructuras de Datos en Java. McGraw Hill. ISBN: 9788448156312.
• STANDISH, Thomas A (1998). Data structures in Java. Addison Wesley ISBN 0-201-30564-X.
• WEISS, Mark Allen; (2000) Estructuras de Datos en Java. Addison Wesley. ISBN 84-7829-035-4.
• WIRTH, Niklaus (1992). Algoritmos + Estructuras de Datos = Programas. Prentice-Hall. ISBN: 84-219-0172-9.