Liste d'adjacence, matrice d'adjacence

Un graphe fini peut être représenté par une matrice d'adjacence ou par une liste d'adjacence.

Une matrice d'adjacence est une matrice \(n\) lignes, \(n\) colonnes, si le graphe contient \(n\) sommets. Les sommets sont numérotés de \(0\) à \(n-1\). À l'intersection de la ligne \(i\) et de la colonne \(j\), on écrit un \(1\) si \(j\) est un successeur de \(i\) et un \(0\) sinon.

Une liste d'adjacence est constituée de listes regroupées dans un tableau ou un dictionnaire. Chacune des listes contient les successeurs (ou les prédécesseurs) d'un sommet.

Un exemple de graphe

graphe orienté

La matrice d'adjacence est :

\[ \left( \begin{array}{cccccc} 0 & 1 & 1 & 0 & 0 & 0 \\ 1 & 0 & 1 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 & 0 \\ 0 & 1 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ \end{array} \right) \]

Cette matrice est implémentée par la liste de listes :

[[0, 1, 1, 0, 0, 0], [1, 0, 1, 1, 0, 0], [1, 1, 0, 1, 0, 0], [0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 1, 0]]

Liste d'adjacence sous forme de dictionnaire : les clés du dictionnaire sont les numéros des sommets. Pour chaque clé, la valeur associée est la liste des successeurs du sommet représenté par la clé.

{0: [1, 2], 1: [0, 2, 3], 2: [0, 1, 3], 3: [1, 2], 4: [5], 5: [4]}

Liste d'adjacence sous forme de liste : les indices de la liste sont les numéros des sommets. Pour chaque indice, la valeur associée est la liste des successeurs du sommet représenté par l'indice.

[[1, 2], [0, 2, 3], [0, 1, 3], [1, 2], [5], [4]]

I) Passage matrice vers dictionnaire

Compléter la fonction matrice_vers_dict qui prend en paramètre une matrice d'adjacence et renvoie une liste d'adjacence sous forme de dictionnaire.

Exemples
🐍 Console Python
>>> m = [[0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 1, 0]]
>>> matrice_vers_dict(m)
{0: [1, 2], 1: [0, 2, 3], 2: [0, 1, 3], 3: [1, 2]}

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3Oo_;8bcdufvg/lyq n7apS.r1meh(P2=4:}jtwki][5R{)é6050k0D0N0w0Q0q0b0t0j0q0w0b0b0I010N0Q0x010406050b0l0C0C0w0A0r040y0e0q0l0?0e0u0t020w0C0x0g0t0U0D100A0s0l0D0b050p0}0 11130{0x041r1y051B0p1B1D1y0{0k0Q0n0+0-0/0;0E0Q0o0E0q1R0E0N0_050$0i0q0D1M0.0:011Q1S1U1S0N1!1$1Y0N0i0e0k131Z0A1z0N0E0+160b0x0w0u0;0H011(1O010m0(0D0u1e0D1Y23252a1*2d1$2g0C2i040a0t0G0A0e0x0e0b0Q191b0!210A0A0D0j2D1r2k0u1z0p1 2P0N1}1|1~0k2m0;1U0u2f2A1Y1J1L0,1)2Z0Q2#0u1_1K1Y0x2I1z2N2P2`0|241b2+2b2:0A100q0_0B2M2~0`2}2l301*32340_0H38253a2N2Y013f0w35040c3j2O0{3m3d0;3p3r0J3u3l2~3n3A0_0T3D3w3F3y3o0e333q0_0Y3K3b2 1N3e3P3g040v3U3x3X3z3Z3R040h3D1A2^1r2)2S0k2W3n0j1_2s0Z1K1z2@0D2_393/3{0!433c3)010P0_0!0m3/3(2,010O0_0t4g3M4a0u0m0_102T0Q0j0D0f0n0D0A0b0f1J2K4n494i0^040F4G3W4i0u4s0w4u4w4M3n4J0W0K3K0t4!4m4h314d3D4$4o4i0e0_0I4*3V4V0_0V0L4Z4#4=3N4c040m3P4;4%3e0_0Q524,2b0e4k042.574H310i0_0A250o0D4U3N4J4L1s44533z5h042p5n4a5p5y4O4Q4S5m5r3k4|5z0_0W4X4`4#4{5t3o4)5G2O5I4I0_0S5B4(5c5Z1*4J0R5e4N594/5*4?040S5)5T0`5O5O5V2b4~500A5.3N4P040M5 4a5a550u644O5v5j0u5l5$0;5A5?5`3e5v5x6i5Q6h2|5Q614t0A4v5F6q585%5X6f5R5#6n6y6g0_0R5L4Y5?065^6N4+5f1*4~0Q4f5?6P5+54046t6v6B4J5Y6E6Q3z556$6H6(6x6*6C636)6X6G045=2`6W3n4.040I4:6V6j0;0C0Q366-046K2`6M6O7e746C0k796/5s6F6C566@5/6{7l6;6 0z6B610w0x0x2f7i7p5o0_5q6:6^6=790W5N6}4}5i0#0l0A68736r5S7c1r46423:7!0p3?1r0N3^7)2U2Q1^1`2S0w1#7$3?1x487I2I0C0f0m0w0P4x0E0c0_1j1l1n1p0t7b441E3a1y0d1b7A180t0w0l0/0Q0t180(0Q0b4A0t1$0*0k0X2d0u2C0Q1a0*2f211f0A0X0E2f2B1a0t0!0*1U0b0N890#8P4v2D2g0Q2I0b7v8d1I1K3n1,1T1V1X7`3n2o2f2h0_2u0y0j6u0x0N2v0r1 1a3/417`2{447Z8;7O044e6B5b4m7D4p4r6Z4R6u4w4y4A4C4E0N797G7s7I6s7K8b3k7d4!7g4~2I0N7R7T6|7g4J0V7w6,9h5W7a692b6%9N040P9S6R0_5}9Y6+9W9$01665c9I397N4p6b5k6w9v5/9u5H6r6l2f9t9V0C7j9V7o7H7q5L9)6S6U9J7V6Za19P5!a39@7E6`7k9`7m619Xae6z6`9)6 719)7678ap6_7r3k9/4i5|517Uam9Oaa7m9+5daG6;0u9;6d9?al6;6pah9:0_6ma4ai9_5Uaba0ay014W0W4_6L7Y3|2P953=3 0{7%0#0%0)04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3Oo_;8bcdufvg/lyq n7apS.r1meh(P2=4:}jtwki][5R{)é6050k0D0N0w0Q0q0b0t0j0q0w0b0b0I010N0Q0x010406050b0l0C0C0w0A0r040y0e0q0l0?0e0u0t020w0C0x0g0t0U0D100A0s0l0D0b050p0}0 11130{0x041r1y051B0p1B1D1y0{0k0Q0n0+0-0/0;0E0Q0o0E0q1R0E0N0_050$0i0q0D1M0.0:011Q1S1U1S0N1!1$1Y0N0i0e0k131Z0A1z0N0E0+160b0x0w0u0;0H011(1O010m0(0D0u1e0D1Y23252a1*2d1$2g0C2i040a0t0G0A0e0x0e0b0Q191b0!210A0A0D0j2D1r2k0u1z0p1 2P0N1}1|1~0k2m0;1U0u2f2A1Y1J1L0,1)2Z0Q2#0u1_1K1Y0x2I1z2N2P2`0|241b2+2b2:0A100q0_0B2M2~0`2}2l301*32340_0H38253a2N2Y013f0w35040c3j2O0{3m3d0;3p3r0J3u3l2~3n3A0_0T3D3w3F3y3o0e333q0_0Y3K3b2 1N3e3P3g040v3U3x3X3z3Z3R040h3D1A2^1r2)2S0k2W3n0j1_2s0Z1K1z2@0D2_393/3{0!433c3)010P0_0!0m3/3(2,010O0_0t4g3M4a0u0m0_102T0Q0j0D0f0n0D0A0b0f1J2K4n494i0^040F4G3W4i0u4s0w4u4w4M3n4J0W0K3K0t4!4m4h314d3D4$4o4i0e0_0I4*3V4V0_0V0L4Z4#4=3N4c040m3P4;4%3e0_0Q524,2b0e4k042.574H310i0_0A250o0D4U3N4J4L1s44533z5h042p5n4a5p5y4O4Q4S5m5r3k4|5z0_0W4X4`4#4{5t3o4)5G2O5I4I0_0S5B4(5c5Z1*4J0R5e4N594/5*4?040S5)5T0`5O5O5V2b4~500A5.3N4P040M5 4a5a550u644O5v5j0u5l5$0;5A5?5`3e5v5x6i5Q6h2|5Q614t0A4v5F6q585%5X6f5R5#6n6y6g0_0R5L4Y5?065^6N4+5f1*4~0Q4f5?6P5+54046t6v6B4J5Y6E6Q3z556$6H6(6x6*6C636)6X6G045=2`6W3n4.040I4:6V6j0;0C0Q366-046K2`6M6O7e746C0k796/5s6F6C566@5/6{7l6;6 0z6B610w0x0x2f7i7p5o0_5q6:6^6=790W5N6}4}5i0#0l0A68736r5S7c1r46423:7!0p3?1r0N3^7)2U2Q1^1`2S0w1#7$3?1x487I2I0C0f0m0w0P4x0E0c0_1j1l1n1p0t7b441E3a1y0d1b7A180t0w0l0/0Q0t180(0Q0b4A0t1$0*0k0X2d0u2C0Q1a0*2f211f0A0X0E2f2B1a0t0!0*1U0b0N890#8P4v2D2g0Q2I0b7v8d1I1K3n1,1T1V1X7`3n2o2f2h0_2u0y0j6u0x0N2v0r1 1a3/417`2{447Z8;7O044e6B5b4m7D4p4r6Z4R6u4w4y4A4C4E0N797G7s7I6s7K8b3k7d4!7g4~2I0N7R7T6|7g4J0V7w6,9h5W7a692b6%9N040P9S6R0_5}9Y6+9W9$01665c9I397N4p6b5k6w9v5/9u5H6r6l2f9t9V0C7j9V7o7H7q5L9)6S6U9J7V6Za19P5!a39@7E6`7k9`7m619Xae6z6`9)6 719)7678ap6_7r3k9/4i5|517Uam9Oaa7m9+5daG6;0u9;6d9?al6;6pah9:0_6ma4ai9_5Uaba0ay014W0W4_6L7Y3|2P953=3 0{7%0#0%0)04.
II) Passage matrice vers liste

En s'inspirant de la question précédente, compléter la fonction matrice_vers_liste qui prend en paramètre une matrice d'adjacence et renvoie une liste d'adjacence sous forme de liste.

Exemples
🐍 Console Python
>>> m = [[0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 1, 0]]
>>> matrice_vers_liste(m)
[[1, 2], [0, 2, 3], [0, 1, 3], [1, 2]]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3Oo_;8bcdufvg/lyq n7apS.r1meh(P2=4:jtwki][5R)é6050k0D0M0w0P0q0b0t0j0q0w0b0b0I010M0P0x010406050b0l0C0C0w0A0r040y0e0q0l0;0e0u0t020w0C0x0g0t0T0D0~0A0s0l0D0b050p0{0}0 110_0x041p1w051z0p1z1B1w0_0k0P0n0)0+0-0/0E0P0o0E0q1P0E0M0@050!0i0q0D1K0,0.011O1Q1S1Q0M1Y1!1W0M0i0e0k111X0A1x0M0E0)140b0x0w0u0/0H011$1M010m0$0D0u1c0D1W2123281(2b1!2e0C2g040a0t0G0A0e0x0e0b0P17190Y1 0A0A0D0j2B1p2i0u1x0p1}2N0M1{1`1|0k2k0/1S0u2d2y1W1H1J0*1%2X0P2Z0u1@1I1W0x2G1x2L2N2^0`22192)292.0A0~0q0@0B2K2|0^2{2j2~1(30320@0H3623382L2W013d0w33040c3h2M0_3k3b0/3n3p0J3s3j2|3l3y0@0S3B3u3D3w3m0e313o0@0W3I392}1L3c3N3e040v3S3v3V3x3X3P040h3B1y2?1p2%2Q0k2U3l0j1@2q0X1I1x2=0D2@373-3_0Y413a3%010O0@0Y0m3-3$2*010N0@0t4e3K480u0m0@0~2R0P0j0D0f0n0D0A0b0f1S0b0M0D4l474g0?040F4G3U4g0u4q0w4s4u4M3l4J0U0K3I0t4!4k4f2 0@4C4E3B4$4m4g0e0@0I4,3T4V0@0R0Q4Z4#4@3L4a040m3N4?4%3c0@0P544.290e4i042,594H2 0i0@0A230o4F1q42550/4J4L5p3i4~4n5j042n4U3L5t5C4n4Q4S5o2`5r014W4X4|4#4}5L4P5A0P4D5J5q5a1(4:040z5F4O0@0w0x0x2d0k5(295t4`0U5P5Q4-5h1(50520A5g4N4(040L603l5c570u653L0u5z5l0u5n5:1(5E5v2M5x4O5z5B6k46616i0@5u5K5Z3x5H0A4t5X5w5L4J0R6h6y5e6H5M0@0Q0U5O6q065_6S5`6s0/500P4d6q6U3E6z6B6K6F6K5T586q6m5;6M6G6.5S0@646?6x6L044{6!6/5!4;4=6 5L0C0P346)0@4Y6Q6T7d6#6b4)5V4+6`5{5s4_6+57796}6K5#5%7k6V3m5*5,5.7q6v5Y7l7x637q5@7c5R6{502G0M0l0A69746{5T4*6C3t1p44403.7!0p3;1p0M3?7)2S2O1?1^2Q0w1Z7$3;1v6r3l2G0C0f0m0w0O4v0E0c0@1h1j1l1n0t7b2`1C381w0d195-160t0w0l0-0P0t160$5V4y0t1!0(0k0V2b0u2A0P180(2d1 1d0A0V0E2d2z180t0Y0(7V0b7u1F3|2(481*1R1T1V7`3L2m2d2f0@2s0y0j6A0x0M2t0r1}183-3 6r2_427Z8$48504c6K5d4k7v3E4p044r6A4u4w4y4A7V7B7o997H8b376R7K7E7M0Z7P7R2^7f486F6=6w7E5T0O6a900@5~9D5)049C7S7E675e9t379v6n5k5m7W8 4I6u6+6o2d9h967g9j9%9w7n9*9I6-9z7w4J6N7I9u706W576Z9^6@9)9:4^049y7D7w6,7q0Qa36D7T0@9Ka05D6M9H5b72ah1(76789-6:7r9L7w5}53ar6$6Jav3L9N5fay5y9T6f9V9_6|7Caa9A9!9PaK9;9Yao569 a4a16O6~2^0_0p8~7#2N7^3:0Z0#0%04.
III) Passage dictionnaire vers matrice

Compléter la fonction dict_vers_matrice qui prend en paramètre une liste d'adjacence sous forme de dictionnaire et renvoie la matrice d'adjacence.

Exemples
🐍 Console Python
>>> dico = {0: [1, 2], 1: [0, 2, 3], 2: [0, 1, 3], 3: [1, 2]}
>>> dict_vers_matrice(dico)
[[0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 1, 0]]
Aide

La deuxième ligne du corps de la fonction, matrice = ..., sert à initialiser une matrice remplie de 0.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_bcdufvg/0ly n7apSr1me(P2=4:twki][5h*)6050h0z0G0t0J0o0b0q0g0o0t0b0b0D010G0J0u010406050b0i0y0y0t0w0p040v0d0o0i0+0d0r050m0=0@0_0{0:0u04141b051e0m1e1g1b0:0h0J0k0Z0#0%0)0N0J0l0N0o1u0N0G0.050U0f0o0z1p0$0(011t1v1x1v0G1D1F1B0G0f0d0h0{1C0w1c0G0N0Z0~0b0u0t0r0)0C011H1r010j0W0z0r0t0y0z1B1)1+1:1J1?1F1_1{0.0a0q0B0w0d0u0d0b0J110r0q0S1%0w0w0z0g2g141~0r1c0m1#2t0G1Z1Y1!0h200)1x0r1^2d1B1m1o0!1I2D0J2F0r1V1n1B0u2m1c2r2t2X0;1*2h2L1;2Q0w0^0o0.0x2q2#0/2!1 2%1J2)2+0.0C2/1+2;2r2C012_0t2,040c2}2s0:302@0)33350E382 2#313e0.0M3h3a3j3c320d2*340.0Q3o2=2$1q2^3t2`040s3h1d2V142J2w0h2A310g1V1|1c3L1f3J2Z152:053Q0S2W3q3B0)0I0.0S0j3H3b3)010H0.0q3/3(2M320j3,0J2o0e0k0z0w0b0e0^2x3 0z3_2?3;0-040A4b3A3{0r3~2o0J121_0J2m4h314e0P0F3o0q4y3^3:4j0.133Y2~4A3`1;0d0.0D3h4H4c4j0f0.234s3r4e4g4F2s3z3k4l2g4p4r4Y3%4P1;4u4x4z4!3r4k04470w494N4;3;4K044M4*4O4i4-0.0L4U3;4?4E2X52314~0O4{4B5404564*4|3{0y0J0.0n573{4e0K5g4I1J3+040j3t5w4,2^0.0J5D531J0d3?042O5I3k4R040w1+0l4a5l5h1J4W5s2(4D5#5Z0.0P5v4*064z5c3r5z5B0w5P4=0.0b0d0@0T5^4}5M5O515m5$041m4m4o0V4)2Z5Y0)4e4w5-5/5/645y0.5?5 4C040=0g0g0z0%0z0i5@636d015L5G5a2:5:584$4n0r4(5W6c5x6e555(3d5`5|1{0G6R015u6g2X5.6i6%6k6S4@0t486t6X4e5k6N5E6*5{5}6W5X6O6Y0.0K6;3Z6A4?6r6t6v6x6/6~6o4J4L7a1J5o2-4/4y6)015z2m0G6x6E4G7j4?4^4`5-143#0z2t2U7y3K1n3M2w2y2u1U1W2w0t1E7B0m3L0:7O0T0V0X04.
IV) Passage liste vers matrice

En s'inspirant de la question précédente, compléter la fonction liste_vers_matrice qui prend en paramètre une liste d'adjacence sous forme de liste et renvoie la matrice d'adjacence.

Exemples
🐍 Console Python
>>> liste = [[1, 2], [0, 2, 3], [0, 1, 3], [1, 2]]
>>> liste_vers_matrice(liste)
[[0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 1, 0]]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3_èufvy n7GaS1me(P24C:twi]D[h*)6Oo;bcdgx/0lqABp.r,À}=+k5R{é050N0r0y0n0A0S0b0j0M0S0n0b0b0$010y0A0W010406050b0f0q0q0n0Y0i040o0J0S0f100J0k0j020n0q0W0K0j0*0r1a0Y0T0f0r0b050Q17191b1d150W041B1I051L0Q1L1N1I150N0A0h0^0`0|0~0E0A0O0E0S1#0E0y13050:0L0S0r1W0{0}011!1$1(1$0y1.1:1,0y0L0J0N1d1-0Y1J0y0E0^1g0b0W0n0k0~0u011=1Y010g0=0r0k1o0r1,2d2f2k1@2n1:2q0q2s040a0j0t0Y0J0W0J0b0A1j1l0.2b0Y0Y0r0M2N1B2u0k1J0Q292Z0y2726280N2w0~1(0k2p2K1,1T1V0_1?2-0A2/0k231U1,0W2S1J2X2Z34162e1l2^2l2}0Y1a0S130p2W3814372v3a1@3c3e130u3i2f3k2X2,013p0n3f040c3t2Y153w3n0~3z3B0v3E3v383x3K130)3N3G3P3I3y0J3d3A130H3U3l391X3o3Z3q040l3N1K321B2?2$0N2*3x0M232C0-1U1J310r333j3;3}0.453m3+0~0(130.0g3;3H4c010z130j4i3W4k0k0g131(0b0y0r0d0h0r0Y0b0d1a2%0A0M0r4p4b2_0112040s4K3*4M0k4u0A4w4J1C464j4M4O0G0x3U0j4+4o4#3b130k3N4-4q4M0J130$4=3)3Q0L4u2p4R3x4O4Q4Z3u4}3X4U044v4x523X4%4*4,584r134F0Y4H4Y344?4L2l4_044{562Y5r4S2l4O0D5e5k044;5x045z3x5u0F4|4.1@5C5E4M0q0A130R5S5B130B5O4@2l4e040g3Z5$5s3o130A5-5A1@0J4m042{5=4~130Y2f0O5p4!5%5Q1355365P3J4:5Y65040G5#5I064,5K3X5)5+0Y5|59130b0J190/6p4k5^5:5H5q5j4T4 045 0k616c0~546J3y6b5I6C5Z6e4)6h6j6j6Q1@6m5,5I6k5F170M4I0|0r0f6o6#6X0~6y5`6A3j6$4T4V4X6M5R6P696N046s6u0y6}5!6T346i6V7b6:715m5o76045D6 646a726t2B757k5.6K5!7j687l716(6*0b6,6.7w7s4N5!6w4^4`7I2l5U3g5h4+7d5)2S0y6-6@3u6_4/047f4I3(0Q48443=7*0Q3^1B0y3`7/2(2!22242$0n1/7,3^1H4a5?0~2S0q0d0g0n0(4y0E0c131t1v1x1z0j78461O3k1I0C2f0@1:0^0{0j0N000f1l0O5 0W0E1;2S310,7B0k0y0,0j2e0Y0j8w8t4H2N2q0A2S8t1k0y0j1:0@737p0@2/0j6s8H8K8s0k180,2H8I0b0Z0j1k2b6u0k4I8,8M8.0q8:0J4x8M8Z8)7o0/0@0n0h2f8X2P2J0f0h0J8T8N104v4B8Y8g5+8|2N0@2P0S000r0P4B0M5o0X1K8l040t1b0j9y1u0W1:6T1R402@4k1_1%1)1+803x2y2p2r132E0o0M5n0W8X0t0i291k3;438035467)9X6q040m7L5@7K6/704O0+6M0b2i04010U019~7t048i7X7d6~7E8101a613010Vab7rak4O0Zacala7010Caqaj535!aua17xama8apav4Oaf5yah137v637FaHa9aAaRas13aE6B70aT0waV57a2aYavaTaz7h0BaZ6^7da$a(aNa*aeaKaPa5axaJaraC04a:a,axa.aF7FaLa|7ia~anaa7ha;aga#a a^9`4k4O0B0#3U3V7F5)4g6M5_4ob1594t5G184B9362a)7x6Lbz5F0O7h4(7P7Y5/bC2B2H1Ab8ak5u5wa!bI130+bq6U5i705a7Wa_7xbYav7N045Xb)7Q706Z7Da=b+6r987qb!7F6=5{bW3Q13bMbK4$13aM147bb_7xb,bDbU7haQbH7F5a8#6vca6R6gc2bXa0cvc75GbP6Wb~cAc63Xb:cF5Fb-5J7d5u0%b;5V043hb^bQ4d5~0/7VavcibT2K7%9_7+2Z7~1M040I1l0J0L102p8X8q1T2U0A1k8S8U059_0+aU0x0j0R8@ao01d30pd6a%d30ud6azd30cb(c(8k7 0!8~108M0N0f8Pc`c|0;8U0.8%8/bU8t1;cq0y8?4o9_90bEbV9_8@8_0Y0,0M0f0W0e8U962}0q9u8gdE9a4A0M8hby9P2?3x9T1{1*303?366Pc(cDd#avcHcy5fb$6M5a9c1:6-7hcdcU710_bGb.bt136nbb67aWcze9bgcZ13e27CbNd{5_c5d}cJcjc$cs9 049Dex7m2M1ubVaBd~4P0Gb(791Bdk9=3@41157-0/0;0?04.