moyen
Vérification d'un ABR (1)
Série d'exercices
Le but de cet exercice est de vérifier si un arbre binaire est un arbre binaire de recherche.
Les exercices suivants ont le même but mais avec des approches différentes :
Arbre binaire
On considère un arbre binaire qui :
soit est l’arbre vide identifié par None ;
soit possède une valeur, un sous-arbre gauche sag et un sous-arbre droit sad, tous les trois regroupés dans un triplet (sag, valeur, sad).
Exemple
graph
n1((1)) --- n0((0))
n1 --- n2((2))
n2 --- n4((" "))
n2 --- n3((3))
style n4 fill:none,stroke:none,color:none
Ainsi, l’arbre binaire ci-dessus est créé par le code python suivant :
a0 = ( None , 0 , None )
a3 = ( None , 3 , None )
a2 = ( None , 2 , a3 )
ab1 = ( a0 , 1 , a2 )
Arbre binaire de recherche
On définit un arbre binaire de recherche comme étant un arbre binaire qui respecte la propriété suivante :
pour chaque noeud de l'arbre,
les valeurs du sous-arbre gauche sont toutes inférieures à celle de la racine ;
les valeurs du sous-arbre droit sont toutes supérieures à celle de la racine ;
les valeurs contenues dans l'ABR sont uniques.
Exemples
Ainsi l'arbre précédent est bien un ABR.
En revanche l'arbre ci-dessous n'en est pas un :
graph
n1((1)) --- n0((0))
n0 --- n6((" "))
n0 --- n5((4))
n1 --- n2((2))
n2 --- n4((" "))
n2 --- n3((3))
Il est défini par le code suivant :
a4 = ( None , 4 , None )
a0 = ( None , 0 , a4 )
a3 = ( None , 3 , None )
a2 = ( None , 2 , a3 )
ab2 = ( a0 , 1 , a2 )
fonction infixe
Écrire une fonction récursive infixe qui prend en paramètre un arbre binaire arbre non vide, et qui renvoie un tableau contenant ses valeurs dans l'ordre infixe.
Exemple
>>> infixe ( ab1 )
[0, 1, 2, 3]
.1280135[4)2R,a- ièàmG16CMl.e:A;S/çdktf+IrjT3sogux]PpNOnh=cLéyvêD(wq_b050D0w0F0i0l0u0N0k0!0u0i0N0N0Z010F0l0U010406050N0Q0o0o0i0J0%040A0O0u0Q130O0X0k020i0o0U0z0k0g0w1d0J0-0Q0w0N050B1a1c1e1g180U041E1L051O0B1O1Q1L180D0l0(0{0}0 110Y0l0P0Y0u1(0Y0F16050?0/0u0w1Z0~10011%1)1+1)0F1;1?1/0F0/0O0D1g1:0J1M0F0Y0{1j0N0U0i0X110f011^1#010G0^0w0X1r0w1/2g2i2n1`2q1?2t0o2v040a0k0T0J0O0U0O0N0l1m1o0;2e0J0J0w0!2Q1E2x0X1M0B2c2$0F2a292b0D2z111+0X2s2N1/1W1Y0|1_2:0l2=0X261X1/0U2V1M2!2$37192h1o2{2o300J1d0u160q2Z3b173a2y3d1`3f3h160f3l2i3n2!2/013s0i3i040M3w2#183z3q113C3E0d3H3y3b3A3N160b3Q3J3S3L3B0O3g3D160r3Q1N351E2_2)0D2-3A0!262F0:1X1M340w363m3+3@0;3 3p1!1`0E160;0G3+3K46110,160k4c3Z4e3B0G162~2q0R0w4j452|0115040+4t3c4l0X161e0/2V4A3A4x0e0x3X0k4O4i4d4v48040l4b1F3m4Q4k4v4D044F4H4X3x4Z4u2o0O4g4U1D4*2#4,4B4S0!160V1n4s4?444_2o4x4M50064P584^3A4T2V0F0Q0J0X3Q5a3!4x0c0S4N4P3o5247160w0_4 394R5316553757594O5q3T160N0i0P4I5k160h5i5G3!4$0(3D0w5f5M4l4x5P505j4C5I0i0D5Q5y1`0O160Z5,4!3e4E0J4G5w3m5D5E5R4l5c0=5f5h5$5 4#4o0X4q5{3x665z4y5Y67045J5L506d1`4K5=4-5.160H6p5r115l6g5@045U1?5X6l5-6w165n656F015/046t6J5?3r686a6y6n164z6E6Q3M5)5+6Y6q6G040e3X1E423~3,6/0B3/1E0F3;6@2+2%25272)0i1=6;3/1K513A2V0o0.0G0i0E0w0.0Y0M161w1y1A1C0k5B401R3n1L0#0i0k0G1n2X0l1n4i6.4U690l4r6-3^040k1l0^0l0N0$1@0l0!0l0k0X001C0F0k2h0`2L133h1@2s0k0F1x0U0N0h0{1e0k5u1?7J131+0N1@0;0`3@0X0!0i0F0$2t2Q0`2S7`7+0`551U3`2`4l1|1*1,1.3|3-396l7B586m11615e5g6u5H7C6T6%6v4w6W6U6!6i5K8E8C6*8w3!6M6O375%4v6x8A8x6B5W0J8I4x6I8P8r6L6s8L5(8y7E6b2#8$4x6X5x6Z3B6#8Y166+567G436:2$731P1M4G2$8d1L0W0/7+0X0l0J7J2=7u7w2Q7A7H4p8,8}3~0k2;0$0@2V7=1o7+1s0`2V1A0l0w0J7X0Q1o0U5W7Y1k871@0u0O0P7M137k7=7X9H1l0k0)2*1@0J9r7`0$0k2S1W0G0G0$2V0X8a7u0i0C1n8b1N3n2_3A1;0/0w0D0j7{7X9~a00j3D7+5g822v9)820i0j1;1`0q0x7g1M2~0U9W0!0Y2W7c0D11aqasa02m0lau017{7 a11e0P1b2s1.7T2u110.0.a50D0.0q2m0F0%9H110J5*7y1/an9WaA110N0O0Q0N0j7v802Q2m2D0waNaP709 aRaT7*aWa^01aZ1W6M05a%7Xa)01aGaI9:0j2h0J0j0D0$7a1la?aM01aOaQaSaUb0aYa!b59|3!aQ0j0}9 0_1/bB5u9g0Ja*2W1naF0JaH2E9:160AbK0X2.bbbP0F1EbF0u1Mb!bHa*a,a.a:7x1nbRb*a/9h7y64b!b$70bG7vbIbabNbc0Fbe1ebhbj0ibl040yb bX7Y7;bibkbY0Bb^3.3{1V1X9}a{a67 9a8kcl8f4vbz1=0O0!4T740W9Ga,2U0@7X0o312q9C9p7tb,9i9l4r7YcE0k1A7V0u7@3}0X9f9F9M9Q7(1oaDbL0kbWaJ7/0D2i0`0}7kcX9M7l8V5f0`7{aZ9B9:c-0Ka,837lc67u5f9T0k0n0k2E1a2V0v0k7s9ga;b?0k9/0(9Cd07X0!0=7+9pc(9)1@1d9b0m9tdd2M0Q0(0O9ccMdo0$0!0Q0U9.cL7a7R1?cbc;0Xc?cNb=7z0i0U9H0}9:0w0v9`740p9N0/5VbX7/d$5fcGc-9N0Jc?1@0K9I2ScOb?c~0Q1X2i7X8c9{cm3!8h1~1-338m7o397B8$4T4a8I4:4i8T5S4n8+7Fet5Z8Dey6h4(8-755N045#8#6K4$0_cg8=6(8J4L5o5F6K4T4V8)eC5_4)eJ8?4/4o4=e#ePe%0430eN4Yen4{044}2=8_047n3x5}598$4$6je_eIe:eK16c|8XeB6ef34+e 8^6Pe+5:eX6zeDeSe~f5eweE8/eAeO8Bf08Hf96VeHfi6R04eMe_8{5C5EeT8?eL0Ne/6c6K6Md-fw8Fd%9HbUe_8;40fnf7fD5i8Q2o0!aT04030k0Lds1xaJ0kcQ0w7/aJ9t1?0`fS5uf{0Q0R9u7a9:e)5|fGf$fAf=fV8Ifu6$fs4J5Ofz8FfCfQeQflen165d63gh8@fBfK6,0Bem1R3-6=ck920#00f|0udcdLe47z7{9=2Pd|3$0`bf7m187p8e3Aef8jei6/8nel7Hfdfogagk4$fkgk5!gr5l0SfE5|9n95gz6?1T3ngA0(eccu2ocw9Ncz16cBcD5fdsc-a-2O7^7Lc 9e1@a+a-b;dm7zdX0`057Bg9gw7H7/dG9d0$0(2PcL0DgEdIdKdF1_cLc$dxfKc)c-caf:ebctgW1,eg8k1Pej6c8og%eU490w4Wge3!ergbevhsh)ez6fg+5^5`fDe{3Ie}gn04epgkh+g+h-d+5gfp6K8:gbh?e!fX8?g/ffft16gjh/8R8`h_7Ig68$f(16f+du201@gJ1o7U7t0U9K0k9 a+2~dzdo2sdI0%cLihg5fGh|eWie8xg-e*8Be,7Mgre,e.gr0Ee=e@i5ic5Aflinfnf1g.ggiQ5Sf65V6DiifagrgciXfhi;8*iSiMg6fHeP4$2~a9e^i/h;i_fAi.jc6)fb4@g(iLfMi)8K56j35pfnjk8.fN16fPjfgsf|fUjafWjlj5i?6Cf8jx6o5$g7avf)f+f-cGf/d2f=f@9:f_d7d(f}hbg02sg20Fg4e|jpj4if7Cj8i(ePi7h=8Ggdibj;i:iT8xjseFh:g?j*iNh#04gp8vi 6hj~06h{k4k6648PjLgsj79Cj9jIfrj_j-j1jD8Bidj|eG5mk13Ig^8 cjg 740*7l2*dJ0`dqd~e57Y2K2M7N1C7/0!7VfKdLiza-kM2L2VkR7;7?c)817-0Q7@0}9p9O0l9Skji4iFk-ivf@1s0)aqe99p007K7`abda887tcI9+9B0JfP8dg~h0cn0/a|0jcxh57q040sdvhi1j7K7z7WdLcI2~0`25c!7|kF2K7M7/0o0)2E0khdkSltk-kWc~0l1s7@dd2E209t7)iz0idulbll0#7|0$5J5U9:5K7(kUcVls0RkO1@9FhNbOf:1ad(0u0$bX9s1@9S0ul07_7Ml39dlt7{dY9(1(3f9Cdi0t0@c~000^7T9Mmk0Pmecc7.f;gG9V7X7)7agN01810 9C2mk-9N9P9S0D0Qcc0J3@c}f;7D4rdi0skT9E9G9I3@1chi7S7z342L2Nd{ddm3l1m67+l41@mBhgm32sk)1a0}9ilW2K0PaZ1H9i0O0/e10Fl!740IgGltdde.cLm2iy770ldD1@fS2Kaw7/0idq0!dzf l^c0msm90Qn5dwd8lFlHm%1=0m2E7/m+7t9+9-9/dukM9YcU1Bk m-5Jm/9d051xh}dJcgnZmrhghJ89hMc.9:mSmU9)7wiF5JiG2g9^707L83iF7Zn)9fn+0khz0;kR0OmZc-itbUmKgRk^d#1o0xdL2gdN4V7Q82dnlt010wl;1+7R7+2m0+hj9yl(9Cdq9)00dN0J9cc`n;0!fKoG0X0Pk@d!hm0X0e7/ml7U0%c-dod1iFmAlY0Y9(oy9p1@0?0U7M2mmYlHlKkU7@mBc-nqk n-9Ucdc51ln792cCdogF7@0$0Pd?f:m2d7hOg3mL9)p07XnY0o040o1l70f`1EnZjU7Y0%2c1n7/a+d219kGoN1MnZddhyhA9do;9Miy7W4 nZ2ZpC0P04didk2E0^jGiu9?hn1@0PdRpJloc-d(nmarc-0o0m2=ha0Dn=d86.lIe7l*ead.gVeehTgY8lg!ek40emk4h~jxi0jx696S9mjBi84%eZj:ksj{f4fIiggugk6M5;gki#4|4~h^gmk4iPku8*j~khiVj)jieUi$qyjaile}8qjrqrqD4vqtg:165mqA8?eVh(qojEqjh@k84.4:iWq+5.4:iZq/8sqLklkogfe`i+jqqp8G6kkmfyq?gsfZjajh7Ig(5Jj^fcju04quqTfjqkq}j,8xh.q`eGjCjtq jeroh:r8khfJfLrrj`jnfFk3q j~8$fOqijzrcrAqmjbru6hr6r2kximiojNf,f.cbjT9u9Zo+f{jY0_j!g1e9qI17i,q rnkrq{rqj 6hrbf2i{qqrzr_6erTkcq!go62k7rhfAkakzgy72gBldgT91sf3.0=0@0_04.
fonction est_trie
Écrire une fonction est_trie qui prend en paramètre un tableau de valeurs, et qui renvoie True si les valeurs sont triées dans l'ordre strictement croissant et False sinon.
Contrainte
On interdit d'utiliser la méthode de tri sort et la fonction de tri native sorted .
Exemple
>>> est_trie ([ 0 , 1 , 2 , 3 ])
True
>>> est_trie ([ 0 , 4 , 1 , 2 , 3 ])
False
.1280135[tf4)2rFT3,sa-o iugm1]Ppnlhe=cy:v(w;S/b_dk050Q0D0d0o0s0B0n0r0F0B0o0n0n0E010d0s0z010406050n0t0v0v0o0i0G040M0q0B0t0,0q0A050N0?0^0`0|0;0z04151c051f0N1f1h1c0;0Q0s0I0!0$0(0*0C0s0u0C0B1v0C0d0/050V0O0B0D1q0%0)011u1w1y1w0d1E1G1C0d0O0q0Q0|1D0i1d0d0C0!0 0n0z0o0A0*0h011I1s010e0X0D0A0o0v0D1C1*1,1;1K1@1G1`1|0/0a0r0y0i0q0z0q0n0s120A0r0T1(0i0i0D0F2h151 0A1d0N1$2u0d1!1Z1#0Q210*1y0A1_2e1C1n1p0#1J2E0s2G0A1W1o1C0z2n1d2s2u2Y0=1+2i2M1=2R0i0_0B0/0w2r2$0:2#202(1K2*2,0/0h2:1,2=2s2D012`0o2-040l2~2t0;312^0*34360f39302$323f0/0b3i1e2W152K2x0Q2B320F1W1}1d3t1g3r2!162;053y0T2X3k3d010R0/0T0e3p3c1r1K0K0/0r3T3M3V3e0e0/0D0n0d0P2y0s0D3!2@3$010.040J3;2%3?0A0/1R0D0o0t3{323^0g0H3i060r4b3Z3U2N3O0/0e0q0i3i4d3#4f3~040s4l2?3|4f0q3X4q143G2 4m3=4o0O0/0i1,0u3:4A2t4t450/3`4L3L4D1=0v0s2.443N3^0m4s4e2)4F04244Y3?3^4Q2!4%2_3 0o1F41434R4N4Z0/0g47494c524C4u1=3P4q3S4R543l4?4^424,4f3^0c5g2)0/4r5a4|3?0q0/0p4$4n4U4W042/4{4;0*3^0x5u4T1K5r04020u0d0L5F554=04405f5A5v1K5i5k5Q5n4:5V5C0/0x484R4a535-5p4f572n0d0t0i4z2Y5b3N0R0F0/0j350n4K2Y5,4b5/564G0U5@5_2;5{3?5}0/0k0i0t632;0;0N3J0D2u2V6q3s1o3u2x2z2v1V1X2x4@1G2u3t6n0T0V0X0n04.
fonction est_abr
Écrire une fonction récursive est_abr qui prend en paramètres un arbre binaire arbre, et qui renvoie True si l'arbre est un arbre binaire de recherche et False sinon.
fonctions infixe et est_trie
On pourra s'aider des fonctions infixe et est_trie créées précédemment et déjà chargées en mémoire.
Exemple
>>> est_abr ( abr1 )
True
>>> est_abr ( abr2 )
False
.128013.65038.9875[)2R,Ba- iVèàmG1CMl.e:A;US/çdktf+IrjT3sogux]PpNOnh=cLéyvêD(wq_b050F0x0H0j0m0v0P0l0$0v0j0P0P0#010H0m0W010406050P0S0q0q0j0L0)040C0Q0v0S150Q0Z0l020j0q0W0A0l0g0x1f0L0/0S0x0P050D1c1e1g1i1a0W041G1N051Q0D1Q1S1N1a0F0m0*0}0 11130!0m0R0!0v1*0!0H18050^0;0v0x1#1012011)1+1-1+0H1?1^1;0H0;0Q0F1i1=0L1O0H0!0}1l0P0W0j0Z130f011`1%010I0`0x0Z1t0x1;2i2k2p1|2s1^2v0q2x040a0l0V0L0Q0W0Q0P0m1o1q0?2g0L0L0x0$2S1G2z0Z1O0D2e2(0H2c2b2d0F2B131-0Z2u2P1;1Y1!0~1{2=0m2@0Z281Z1;0W2X1O2$2(391b2j1q2}2q320L1f0v180s2#3d193c2A3f1|3h3j180f3n2k2(360x2(2{2+0F2/2;010$282H0=1Z1O3B383o3y2%053K0?3R3r1$1|0G180?0I3T3Y3e3!130.180l3*3q3,2~010Z0I181E0H0:0j0;0L3=2$3I17040-433d3I0Z181g410x493Z3^460e0y3*060l4p3;443s133$042X0H0S0L0Z3*4r4a4t3_3|0P3~2,0m4g1H3S4s3-0146484N3z3?4b18302s0T4M3b4P4j184T4%4E4Q4c044e2X4h3@2q4k0e4n1G3W3C1P371G3E1G0H3G532-2)27292+401^3D3O1M3+3I2X0q0:0I0j0G0x0:0!0O181y1A1C1E0l4m4U3U1T3p5r3I5m5o0:5j5q5s0l0m0F130j0v1^0L0k0W1m0P0k0v0Q300P180z5R0x0L0l5V0S0|5Z5#050j3I0!0x0j0?0L2?3$0l0!2X0I13035Q5S5U5W5Y5!0Z5$0l150H1^130V5*1f310H0l5}180c0b1G0j2(5r3p1N0%000x4#0L0$0m0$1_5=5 61130w0w0D6L0D2u0:2,0j0*0j0S0T0D0*5*0m2s0$0j2S0:0z0i0g0:0f0D180n0(0L6#6E6(0m1p0l0F000B0X0l6+0g0l0-0f4`0D6t5,6j0@6}00655*5,5W6n6a0l1c5+1^7m0S0M0@0h0l2u5M1u2P2k6m2U6U1-5{6}5x730l6T2Y6}0Q0S1@1p0P7u7w1n0`0m0P7A0l0S2@0l0q0(2e3L0l2N153j0x0w1P5D0O5F5n5p5J5r2o5N137,0m3j2R0x0k2u0k0H1z0W5$040Y0W7-5Q2R0(7v1q871u1F5?4F5^5`5*6o6I0x6201037 8187840Z86886c6e6g016i3i2k2u6m6o046q6s6u0O6w1j0m6n5?0I1p2Z6{1q3V3L043}6R6@0x4M4}047v4I5M6D7+8d805Q1_0-2?0(0_2X8i6d8E0e7:5C5g0%8Y8!2S3;8:4Z0m4#4|8)7Z151-0P0(1_6E8W0Z6z8?2j0|8y8|938k897u6%5+0x5)9l7V0P1_0?0|3K0Z6%0H0(2v2S0|2U9n870|5z1W3N2|4Q1~1,1.1:3P503b5A1O8:4q4D4i2q4v4x4z4B9:9@4@3t4Y3`9h4$4O4-4)474?4X047X0Raa4F4k4C4W4F0Q180Jai4(4^180daf4.187D0x4zata80Uaoa72qal04an9~ajau049g9i9:aJa84+a69^a1ac5`azaq0478391a0D8:4 4~0D3E5g05413A8U0Y0;870Z0m5+7!1_8Z9P9d8(3XaM8/9k8 911_7w9B0|2X1C4L0L6m7!7b0S7i5.7G7k0R7W155w7v6m0Wax6m0+2,1_0L909n8h2U1Y0I0I6?8M5x5m0E7Q5y7;1X1Z3I1?0;0x0F0k9K6mbSbU0k5Q874A6(2x6}6(0j86401|0f0y5s1O300W1n0}5^0$5o5O3Jb|b~7|b 9K9ObV1g0R1d8M0:0s2o2F0x130:6R40bT0F6.2o0H0)bt130L5`6{1;b^b`7}010P7N5Xa}8#1pccce2wchcj0;clcn6dcqcg01ct1YaF05cx6mczc8ca0Z0H5U1g0k0F0(5m1ncH0lcfcKbZcm2ncPcrcScucV2{bRckb!0 bT0{1;d29G0l8Z0L13c51pc70Lc92Gc$cH1j2Ydd7Jdfc#0H1Gd60v1Odsd80QdacAcC0kcE6)cd1jdAdC8$dr409GdudK0vdwdyc!dhc%2j5Tc+c-3~dE0zdodS5,1g6}c,6Vdq0Dds5e0*3pc~4Fc?0k9Oa@9,bP9%3^d@7Pb}185g0Y1q2O4zct2R7$332s7h0 dwa~8$5Ma34#5,7N5+1C6z9H3B0Z7#a{6nbob71qdc0Z2:dR8M7u0F2k5/0j5w9H1^0|aw4z0|9Ke88M7J0M7N9R5x6Vd84zbr0l0p7$1E4z7/0l9aefcF1q2X0Z6Z2W0_6m6F221_9X9L1_6k0m0o92e%e60*5!7o5?bz0$0S0WbH5+5m6D1^d$eF6b8Xe.9d0j0Wbt0 c$7/bO1R040r5Z0;8|dS7u6|6Ve86m5Qdx5/1_7sbi2UdHbM1c1Z7Y9!d;bQ8o1.201/359.3SaOa(ap3#3%8uaX1|3/8;f.133`a24!a54Vf*134Sf=4G4:0L4ff 460haCaTf?180{d,4,g84R184l4n9?aP9_4Y3)aIf|g04;f`2%9 3I0Qf:7Wg7a07~f:32gc3ogu4F0G0$180X1pgs5hag185za#9?gjgp4/adg418g6goaDaUeN42aOgpg5gzab7X0Fg-ak180#g;aKgrgigT4pgkaUb2gYa9g*g$g9aVaeh3geg,g#ge4/gbh1a!3o4og|gGaKheh8gA01aF97gdho4/fpbteAh1aRf{h4g0g(hf4Chk3^0$dE030l0NfG1zeSb27Sc$92eL7Jfq9G0|6V0T8i5mc$1F9:hig|g~h5h0hn454*f gWaWh/gP04g!39hG3gga4IhEh)gUhB9`0@9|g^3^hdi0h)9j3Xa)d/8U6yhvd7e%eefPeya|e^7J5Z0L0|dU5ya$1Qd=9(fY9+f#4~9/3bf)hB4/h.hsh:h2iL4Fhug24=h^4Qhah|h,gf040d0Uhg3za$a(1T50a+3Ofwfvi,d:d|c cMb!e04ve3e5emfG7J5.2Q9I9n7heucB5.dB9cehfk0|b03Ch.8:7ue65+0(0*825+6~6Tf7e$d%11j47#e}93eCc$bN989$5@iB21iD3+3a3SiHge4v3(f f:3;iTi93{aLejgNiXf~jRh~g1g3jZ1|4kgRhhh*h}f+04jNj%3.3:h=jT30b%2@hyh=4diRjWg+gZi8j!hmiOiUggj*3zhjg}gphI18hKe`87fneh9t5?5-0|bTcB30ble;f60)edibgShjiX4v6#k3aUg`hbhogw4Yh(iWgpkI04gDkD4ugJ04gLj{j;iYk92%j,kbiXh?h7k6a8h{gFk$av8|aykWiVk,gV18g/kQhpg?k`iQj$kykbkciIa2j`k0hBjYk)j!gXk;k2kGabk5aShoahi2l1l2hch gEhAgehqj}4:hWhxlciNlhabhDlxi$gtj-13ke04hKhMe^hOjzhQ8ibx6neXhW0{i h!2uh$0HkKhhlllmhtl45*kVl9j(h;kWh?g:lxk+kak-04lglqliggg{h+gpi54y4Ak}lo4nj,kA189{m39~lFg0j_l*l6h9l.l,h5kFmkiYl?gtjXari#4{a%8)if515ffw0,5x2,5!eM5*2QbM362N2P9p7R0}9u8Nkm7jmJ3B9Dd(9G7p2u6%890S7pee5Zbnbqmf4Ae~fmin7S1u0+0$0!7Y0v007U9nb)e!9W5?0qebbd979#i:fVd}2qd 5Ze18U0t0@kicB1m9d3}fmn25#0l27ese~0|mD7W7u0q0+2G7m8W0$mPfmknnA1u7pe%2G22927w5V0j6Fn5ih9L0(7X6Uc$0j0Rb78?eo6|6A2O9K7Z1qjy6m1cfq0v0(dSb60lbqm`m|7Wm~9F8?9K6b8h1*3h5*0w0l0u0_eP000`c:e|ob0Ro4js7uocbtb`7w5me93J1{5*2om(0Qm*1D6}bidU3KeOeif_o60tnDbgol2g1e1_j16|mT7ze9ilm{9mn|87m 1_6%jt7o6z9Pfp1c0 nke52M0Rct1J9d0Q0;7s0HnR5g0KdOnle%gD7hn_km5jf192hv2Mm@0x7u7K0$7G6Wdndg8MmNnl1co@kieYnxnzmJ1@0o2G7uil5?bEbGe;6F5,0Lbwn^oxn`oU7XoW5+051zj/5!d,pMjseQn+e|ewjxd#8MoFnD0F8!bl7X0l2X2i7Q407V9Rbl9wpSeujwjl0?9D0QoL7Je{eAozd(imj96|0yfm2i0(6D6$6`n%8?01n(1-6D872o0-j6banU5*6Z7eq86@hT9L0Q0$4I6@0Z0Rblq2eg1p0eojdO9t0)7Jp)4L2T1_oqm@8hqllR6dfp7W2o3Kp|nCnl7poZ7J6Zpcm`n-d%jnd*1no_fwe4p)ij9H0(0RfBeSn_eXpXh%q-d)dX3;pM0q1n5c1E1GpMhR5,0)7)0Z7ucBjz1bmDqz1OpMe%jkjmoKnzeebt4I4MpM2#rm0R04o6e-2G0`1^e*d80jbLqN0l0Rfe0}ng1_p6qv5^7J0q0o2@i~p#9Pi 2g2UfRnW6mfUi=fX1 iC9-iEf%iGmwm0f,gnmnjPj@f^a4j|l/j~k lzh_mpf;k@l_kxs74QaFg@kWgIgKgMhfkY19i3jLgmm4sclpmqkMgxl!l@m0kSkUmhl|04snk!4ql^l`svhBsgk`46i!l~mdkBr}k?l3j#iSkLsMsxk`kNkPlegHsBsllxsGk#sblbmnk=szsWlBs=ldsZlnaVl;s|kHk|s)g_j sRspl(jUf_s3mnk%h1s9mdiasugOk7aZt6sIsbsKtj3^lss4luhws seaQlts_txaYlD8;mdlHlJhNd$lO8MqthYlThYpelX7AsykZs/sWiKtBl-lyl{g.h@s`h`sstpmrtllkl%3Im1i7t3i9m5icmviei*a*a,myi;t 3pn7a$0?0^0`0P04.
Si une erreur est levée durant les tests secrets, l'arbre ayant provoqué l'erreur est affiché ci-dessous :
Dernier arbre testé (en cas d'erreur)
Votre tracé sera ici
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)