From 030469c8f98d6087f47bb98d459776a293e6eedc Mon Sep 17 00:00:00 2001 From: KuznetsovMA Date: Wed, 23 Sep 2026 12:22:47 +0300 Subject: [PATCH] [1] Data structures lab --- KuznetsovMA/lab1/docs/data/graph_delete.png | Bin 0 -> 13209 bytes KuznetsovMA/lab1/docs/data/graph_find.png | Bin 0 -> 13059 bytes KuznetsovMA/lab1/docs/data/graph_insert.png | Bin 0 -> 13179 bytes KuznetsovMA/lab1/docs/data/results.csv | 19 ++ KuznetsovMA/lab1/docs/report.md | 34 ++++ KuznetsovMA/lab1/experiments.py | 185 +++++++++++++++++ KuznetsovMA/lab1/graphs.py | 56 ++++++ KuznetsovMA/lab1/phonebook.py | 211 ++++++++++++++++++++ 8 files changed, 505 insertions(+) create mode 100644 KuznetsovMA/lab1/docs/data/graph_delete.png create mode 100644 KuznetsovMA/lab1/docs/data/graph_find.png create mode 100644 KuznetsovMA/lab1/docs/data/graph_insert.png create mode 100644 KuznetsovMA/lab1/docs/data/results.csv create mode 100644 KuznetsovMA/lab1/docs/report.md create mode 100644 KuznetsovMA/lab1/experiments.py create mode 100644 KuznetsovMA/lab1/graphs.py create mode 100644 KuznetsovMA/lab1/phonebook.py diff --git a/KuznetsovMA/lab1/docs/data/graph_delete.png b/KuznetsovMA/lab1/docs/data/graph_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..542ee28505c712b57f48b657debe07bff3fea47e GIT binary patch literal 13209 zcmd6N2T&E;wrvw6s076XNHBm$K#(9wq6$hzK@cR0rl46T}1!I%|ZUc zx=SsN#m9Q!A0gb1`FpZ8O86XZKaarQ4_+c<2%<+z$c!K!hGZV_OUSwZgCB}Tma2&E z72AymY?pfV?h}%U5HfoN@acac_IdTnM!P=b3VXg;*Skoo5*eeW2$tLaj1;wQ6tq0I z($q5PcxDgjT|&nf7}QYKH8+PeHp*|01u2cixGV&+$c5YqVpVv&hhKl>>9jf_moL{~b=|g;)~4ESJ~A*!k`L!;&(Pp?+TWh^%^Um@)0e7pNu$Unes`sT zODF>8jvnuI)1O`MBvtmbi57N{S9uyMhE2SeBs;NT-y&+fAZ|DIYHhwx{X;@Rl4iac zkL}2}M|;i44H^P!i3j+vO#94%fq^-;qte|x{tXHKVr(7B z3hXvmDW@!cAu2|ZpI$7MAx}6JhssB+DnG7ITw-UJV|1Q6XD?(k?D2+PKvDY5nRC|V z>mk!BDczfkLtH92#o)^-$+fRfvX|{g6L_UqAY_tCBFnc5DqhV0{B&Wc=38~Op@2zi zl|!j%M{bM8C+ph%(X_KF?cv#+MN!0dXc?*O_42pKbn zNwDng5>DL;t>ed!H%|TNN>`WD(u$hp<|P!&Nl$@gB>8JoQ&ZNlJoD~m z)uI)Z&Pg4o@n9o-IF;BIa|@o+Xy;I7w=SoVI{~o(8YIb{r}JcTZ@f6nx^+b}@6JNW zEN4%#Jq|PXle@;ix@=jRS0-=6bhf`Z_uIE`VTN=jM$J*-xJoVCnDjnIK9hiO7p0w^ z;+Ael?mjM)@_jq*og>UeQd7#q5{twD1Dp(O{}VJ|Kt)uU>k(u}~6oMdR zhKgJ1I^`wr+134M=!rE1#T{ne@51(+c+wPc4O{W{mBql}vKW_3!or$7JUn3}BnY)# zUcmBz<52k0X?lA4sR2nbx9#!MG=%g5R#7;itw*_Jo)QT1@lD6161zK@PV?-jzgPrd z5W-QtJvWcV{zlsEt@*;C$2%MIcKf?dDyD^>%=fa~_B(so=Ap2M0U)Fuer@{fg{KZ0%(&p+D;=;@ zeOfnc;-~HCcbS0_ha|_v!FLf6X2~~-_cr>PlHes85srWMB%M4XIxDgX_$9D9lW#qw z18?v=yLwjRr?-cWoVo)bpJ>@vVDvf)pnAN=KS?fB_ATADM&X(6Y%T_2OaPPnE_X`- zL{bvmk&(7={OU|sy5U%DpxyR(Xaj{nKlA!bS5W4|LRn@Ae?;QW_WsVI!Z3a!()!}L zbDxQ?;RsV!>CGH08$zz|xbM6AWAT)XA|`HP%im~tT(@l0mHR&#c%#{9rNw=}LqwY0 zb+Pim&2Q5D#qyxbVz7|?L~Z;{Z}~&Y>^>zi{duyfvu!nSNjX>#gEY^Q#S(eX_?JBr z%;@e5;4!Q};q&@+eXdrd8!X5b6ec0i?*7Qujh*C1ako85E^?NLPp>YbDzc}AQn*F!FFqRsXUGS?L+>3OygUK%?DTkuJCwXkFj3Pa~p z6iPVd^!w={v(DQq<4rB2HU5#Ybc~~;qxK>d8o5S7R_6DY>e;g!Kgkotuew^UI22hA zg?9>V@?;(-Av_7Yj{2Tm?5X)4jrH{_X657c!42FGZkh&V zUZ;4wE&84OeY^)s8g4}Rkyt^-@|)3FsBn?8UGGwF0Q|R?$Cv4UeRQw(X;K%H%8LEHorYwE$j3c7hCI$|CcI$@kE&lEXG3F%`JxF;`bHi5-Sft-Z3MJ5 zmlXL_3PkWz39z#+dv>7%rxZ#~!+N49^YBTwv1z50zJ`IxrF%ZLKQs>iIvHKXEiByI zcs-FTM*J#SqTW$L0*{f7wwzvFMN*ZgbPB%1?$Mn5zRCn^H}2hgCo>~_>nz-)>M^7| zj@Nni%_y*reHSSNL3ZE#RpPZ(J6P_Lq!=x1x3#2CZWQ=zkO1D?EmkSrFP4UPu5Qhw zXOH>2?N4WwObmNT;&Zrh8&CF9H&=JA%7>JijbYG+}nsGx75(kcyuJf z0}ZX#wBE70pd^RcA1DE$6~>tOCI7Il+*8AEE^<-O^S@Wi)U0a^=NM{!l+0?acU%(dEF0dM4i}&~&q}fk21_Dgf!$nv)ITgk5Qy0SdOy6-l_$UFO zn~2@n0A^5FJDXj}iRMXWGrbPxl;#*wb2cno@4fr(C=+X5_4n`fBh|hNWSx2`3RSRm zgCL)n_7!CIV>%R8V2Na(JSpf=>(0_P1du&`?AW;)KZYPbhU>D6gXM;hy>ozi(u%nj zc@d(Nn2cQ4eJ>v~(A%f05=!IQD> zgBj{fDj#ldX}866UwPA|H}S(G=H^@Nr#F>eQi|bg`m7mfzd0VN8xaeT z&t?-1oR3dD|I1_rgSIZ31gfYveK(F_exx_GFW4>K{D>+MkASPTBe!^wo00n0GECjC z&*N|>%K=BiSsya=$18jj-&+eJ_XhIM8~o*YXWIRS-Ol7kHG7*w)+A0-uZAJ;!wgGA z86-Y51XJ>~Rc(&=az*U5J-dX4v$6yNjOLsq?qT><{pYkP@uxG9EUn^p)g?MU6J~a` zjH{jkn2XsenUUh|Zt=63cN1QcKj}682$_j>Z5lu5et=c^WnX|xc#}UfxpuvC+6Y6u zY~U|yR1h8zpqCs^e&|@w!n)!KA4-bu)4JYKx^r)SZKsMaSn9kboO?@GHFQZ_o|qzz zY_HF4>lZ1F-RpKH&Yw|Y*j`lvcGZ;O<^5Rq{T{v!VTJq!8ZmRjj}YUGv5pJ6!^%>~+H=3dvI+{sS=Ba4-c1#Eldh* zoJ@X3fK>4a-}h0p$gm%|9L>db{`~pY(nE#yu`k83*focepWDQusJzrWH@Rk_NOo(f zZAty7>D+5y*yooTph#2TJl)QyP;Fi)hMtvpF6 z8k17K`!jJRNWZlk_;FYd2y*$)hY&Br$Lt7NQ+KB&0s)9iLS`*3Nj69s9(*_rzu8dR zVUdRg7N)G$gL$Sw<{HkWyr>P%J1ab7p;o_8F=s+T;OX9G&aw+S;bHxdqek<(nfa-~U2 zNl7Ub0!vn2{*6U{(cSNU472G?2#k3^I9wmhp5%V8KY@ohya0Ye02)rPm&cj}hSs`_ zU=%e6!P3u92FFjHG|aO8`B75Xals<1J3~VS*qLiSEsW4gyt5pLaz$X13QG?^J$m7~ z^~>96yTGz9(Xb(;q8Hss&yxtZ8hKl4Bd(bzf|%raTuZG!6?x4(ff zNOtiA9jf?Pu3vu$NkpsRG^f@dpFVy1a}G;JiOnS(nLEslD$NJrrf^iBc+pWIh@e^L zAG}irK#Y0pC**VGTgZ4E7qp5u2VGdsUSwejZ+LO!G+{YA46Z&E7#$sbMeGSswbfjp zX~+F|czId=<`SX4uv?Gxo~`wcVfn8|)}0;_i#L`c-XEJ1Mf7}S+MW#(nGgB$a`E_X zWe`qrYI!oj0}C$oFb8z&xF{@?tu~7^IP^dS{ux^rWA7slaW(YTWr4=qK}uqmK@bIt zVewmkdjla($mqz(3P(1O*SX&OhCd^TxC;2jQy>zn){wLQHWjfP4I0RXOT(YhByKuX zQ9d>ND4G~wJQ))t<$LNsRzj}|;T4aG+1v~_j^S=V-A=BGtq;Xi@a&&I<2tI2((%=5 zDaMFgK6dQby(}#u-7H4qp%1$MEuKO#>7NPiK4Z zTCl~=a2l}+QxzCMbzomLtph)c*!R#beG(ja;daEIdr^63KPf3Ge0F+zy1md^7osrm zExkZJyaMcR*d&%iI-fD_?Q9Bk4>?UTn6`a*F?~>I*2U(u+9dFgAtF!a!fr`Ph0p#O zN|CeI%zwOp^XBNEcgI7Pct2eY<$g4~Y8emCF}ZEUYgAbF@tgMKBxUnMICEdRNFC#%e}ilr+K_FbR=(`?Hc0J~k*!Xo1zGYI#8 zjXl2$k?!S$0NzR1pswLR5@RK46^OfwrGZ_|(`Y6Fw78WTW zAY+vWd)bu&Xavg%QR%s97Ft3J`NL*qQ4 zeISs=JHc%C$G}(7$tDE>GJ~W%n?X4$SRmsMvIxxQd-J7qS{4RM$A5VY&y&=;QZ!d3^Sz(r@WjCdChWEZ|<`qUAh(5=AIxp={Z66P zfV_%5qBEN)@(x_$ zi{+a!s@Xc)s0)JUm~q~K3XC-(;)pDc zV8GT-wIwu39MMG!Ahb4id+Xh$A@@_1KYIy9+kgBcg5T1N1c%CfRqAU9=<)oj{kOnP zvwUAl!=#_e2?YV8RJJ1_OFaIsVJq#&C~D^R9ccZ7EXn5L?5k+D?WzZEbO+>E5|jg9 zyzIN1AU&Rf90zGBk+L#-p#(sm5dj8iknB+m zgRuE%>4?~#Nh12gxMSr`bhaAAnTH;gN8zAzdSj%3(wA^QuFZk&YjU*AgUbva+uabdJH&ivLsk zBK)_P6Q=r$67#>F5qBCA<3%ws9ncKBo3CNO7A@2%0kk2){)&|TfA|#PwGxX!2TcF& zo{_CFBKrP^|MeYZPAGIB59z~rTFpl2?sr}+#Ne(fvL|%eyeW$k$OVff9z3W=rZKz)~h!8BL zXIH#~S!IAkC+d_t^MFQh+Fh<`lEUuH7oytAe|88mScXoyrfe`93ybXg08dh?h^tP+ zRRsQ$G!SV0#M(#(h@3JI5-4X$eOQ=PQ*)G_U*4+d7YWU&3+K;22Km(vTxA+cfqc*a zkyU{=>#4xHRP_A>7e4jsK5&D;wKa?iw>+2#;8Sfa3jlJEQA(ahu7jWEW+v4f1VjSu znUR0mv4le#E?`bx$)&nWu^bqB_np2Wt?p1@G<9`#hhA2Ke-z<+ftR-hpu;*K6#eH>7SKg2w{qBJQOK!*nU|`0gAk@!i&=l+$2NN^C-s zWIjQxP4kg*to5>HUUqbQU^&2bFu!GQm~Vu*dj*K&>ZqohlLW5QNuiG+Ex!v0pdK!V zR6yn?sZJnbJK{ArP}(iuEMhly#|H|og$@;Bx4{k_162?Lj5xf{_cT`s6tcIlLzt{8 z@N1s4!pWw;+o+xm`Y0z5DPn}rWZqLtQ?29bO98LHGDAQM%ziK)$aI4C)kSXyM4n)n z5+&0)`!(KkR8X&Gx!Nc&E*&MyRh9q3InvRiI|CFKTq~VB^74E%_i=yO6mov%gaDfX zK>z!l(l}FwEvxXewB>aW2n_h%pDU$N`2?=!`2A@ z%s};~EbzA9L8FxHty{Nj)t>q8{zxFuqQXP)E*IXa{dGoK za9EI%BXbD4ShUQ#(jcOr4kh@r4nJxY$Jn;>yUKlKBA||cV{qn|$EctUbbR^lY5k}E zlpBh`6CaO!^O?9r{aWzlF-k$doAjROLvq~w=ZeBFUKIY^_hxl(&JCoe zI@=-q`fQV{CNMLxo*&SNmuTLdg?6?0Z@O>v7{6d##p2fjYioCLX4v6pq>UOrYS}u` ziw57{(i;~fRWd1up$#HXF`q4nnPY|wi1xXmH4N>B^`iaCgB@}Er~{ys?EpyItFZ?h zsE;Say8iP@ZNRykjfb99-)db-8?mWjaI6K0PzbBf1Xb3aaN9p_*H>(RYqT8}#FZ${ z?SVNN$7@n1S7lcDFbU)+xAVjqQ8$%)_Yz^J2rYDUuR@>1ng+tr2%hCw`R1VgfKIVp z(sp}0*jwE>F`_P~&L9N3*PkxMxgP9oW~qe(9ES^7$B;isO-;?(+$&uukpp(f;lACV zD}S}~N6;sOnh35|y8Vgf=vmFl)fRE<=Of^wO>2JlIq{rmk#mVwRP-SfcC`xE74)Hp zslC|VxZ^~UH7EX@`cLsn5(RA5%Q~=<>Oc^XyyF(f(c30$R=rAt$D?d{&LW!u|>lO4dgynu&o9%9yoj+F;4dV7kmbQ78dHzH3 zv8FO<`6*J344zp@P;7{aP4^`YTu4$vPACLwWG!FH4R+BGML-y+pIXC@X zL={oHt$4nmZ>(F_Jvda?O=IxsD8(v^)ZQ;D_p2vG_uN}k_4{M94{jHSo)e@-e(~bp zDo5Uh?m;Un^A|TO&&_zpRHT|bXlKS*Gd9!Tw$dbTqxue(RrsVUC`Th~uLzDnZzd4boArQ&^9F ze``0>d6|YXU*^-}x_87?R}4Yo`aCV z9=FCxX02k(47YKyZtvLcr`5vtVuof0+ZScer%p2)@8GL%@8CtDCk4!zv9taiMvwQt z*!LKQ)`3SPzjGk0tiZMp1BPQLbR`0xbv0#Z4+mXELFsbZcA}w5_g6C-~EIKk_0sZjMy+ zJ$2yq$(sYqc>$9K(U&}lN-4&o@1 z%2H{~U5WjL%f?(_O3ELrXDypM#B>g=vv`T-eVJ69U6aeIpfWpHfTqhY9B8YakWpUo zCUla#13&aGN}xKhH!7(wU|`Rv_x22uyQcw}obXf;f7&0}5#u~_dAo0D-ze=Rc&nKj z$wZ24p0be+>Y18`F$t&lSksvD=#c#LDNT8b5~_e_D?p%5xx_-vz&yr{Q$P^6FExsrrfH_}Q=5B=3vAg?b0E)BsoJ;fZ}LxJ-}OJn%2RZ@Z^y zr&6JiiZ;mbV5VAKNduVkOil`HG6(eU1@U1_PinF=gS#NGH_v{mQSm`qhY#q5C1EbNwyc0j73C!-oCxYWYMcNC-$gaMXH9r zH%i2`{o?lSYRfok%?%ywZ%&jvc_qDtR+z|LG%sT!%<~sxC<|;%q?99r)*o~fZ$MwH zDT!5)I=Qdh!RfrT58AB#Ut`qf`p3nZqx)h=5=^S^9o)|I|KO%fB$cG=&Yxh9XT(b!TW+uPAS>8BN%HPany~Jf zH923df<@KhVE#R`{JxG?PVAXi-3N850Xb*0rkE^IcXV(6* zzk3*$ny{eMUfEICUu~m0rP3yaBv__S$@}>I zj748E24aa5;ci>g9)6oc?&2+2O@cbnV|i-l?5JW|sZ_MRRW$1M&M;^sTeJ1frC}E^ ziJ6q&T8EP*^$Y zV$(airuf%4+mpqOBaUXO&UlwwDMiMRd&Eob_{@9?E!9nH=c4aToNet^jg-&N$vDYx z`L0V3*G28k=#4kLL-d}J6r?2&5yyMV3>&81M82wN9wl8xjEf?v%R1W2lsh(MqO(`k zWuSRmOL+AzTl9xJJG;{d-h(*FyX+pqF9L7gZY;G{DvYo6d@|B)mX!5yhkNFLAWqkL z?a135?sTk-{ib1;+2%JN8io6sxPkT-5~Tz6W*2AZd)po*Ij49C)R7)79@QuR++zJN kv`a|pjT}r6MI$GBYda@vi@VG&CJv4kcDDT77cX*O z9gU>ke)^2QwarUV=>+g~a}bwj+X28livi(xg%?5QNW8?&@Xr2Ql*l zL{7)nwhxy5j}s8H9Gg*mP8Gz+rAx&*f-k$IN_b19C4h8EN{P%;t}4O>3DJGnB4x<)_&`c?`P<5eB>4@8`_wQk+^5Z&QHzveXj|3 zL5-P}mGug|i{bCSHInd&=;{+n!$%_(f`=enR}ex3c~6E%g&@^@|G@>V`8p<_5d1?& z>UXzrd!++c{3#;mD_1+@v&DoEW(1$uisrmJFU!}Su|B&h^7WBO<2GYC1qHJ81myjV z5kn>fA=Jsx$hy}YB`8uE7aTnD)j;Moo1(6VH6lY#^XCg|HET+hg>q^}naGE61*fZ} ze(lmUxDXs1>@eWm(@^R>muq8O7r@{!73=ynR8ybBq%kb?Apz0XNPaW!(nS%+$$E0( ze#6Rzj^r1q7Vf*7%O#?P9BL^y)@HksuRi;&qrgg2#N|hXw%N*fgKFY+at@vRwEp{b z47pZ4+15Lf&a)ve=>%_D_GDi;di1DjrKg+QQVr3>aE;&AZag8?O=1iZ8W3awB z#53fH``vo5T>A(uH&?8fYgm51K&z-fB~w^;)}6+dSh0zWoXS@Q-doqAgzdNkCDy-P zJ1|(R+_BBGDKM}{mDiE(hqZLiI-!`{5=>{Q=c zC|kU@x4o8Y(q0F4o+@BJl?$rjj@-)Lyg zdTp;>3@woEh#y(5V+!Xp`FdmQ%kL&j!!>MIEtfn-pRp^PUFo&T31zwRB*H!wuWR`W zyO9v<1}*gCFGQq!=r6WIj}3R2WDcX zW|%Xm#_I{7L8i>1e+2>TIg35p=(86G%6j^Z`Gt%0@DXH*J@)hBc*ASebk(yQTD*&E z;`oM==9}1OYJe}k7CqT|s>wG)#eJCYc$xB7rgl@qxwQGDqG8hdB5HP}h`S-L;B$M~|cinKhwM-};5z2d)y}b`JrYxkTopZ#xg2f=j1zaEDZ2yK|OwtI;m7SqD zF<0(y{&-BMPoG{9q&b8cMlt8vRyOL1fC!}P3Cu)v`*|CuPwXYE$`sTAb3=mxoEH0CCwCtNJAzH2bFAH5o-K{?KvI})g
?j!SLPy^Q(!yLOPG^6w6i%D7~RvCZ(*EL-EQNyvptuSeEoMi)JW4+lb`qd9PE8x z2wB%>W05EH{B6FS^9GgWFBv6tOq(K%CfBg0 z6CKI&jZKmKBAOW9%LpL`(W&$-vHteHhODJ6C|PoERZaPjN`^08`C)Rpka-Wy9Q_M& za&jx+>0iHwa+-{OdbR>D>vrC;!hP)(fN5jG75^p|r${vur|y}-in4zDT5^ZYC8NB! z!?*NYW;@drc5W&u2~lSKR=Ky{x6<#}Dkmf3n@%yC8?NszcbM!1vsp{bh$r4hIC%u$ ze7O3dYKenMykb#rewlF{#j_VLUh`CLp6(O9@`Nn-2+jG39J})6>*@Lxr6d-X;J%YB z^Z;(cLfKJ>?#$`=gIMR~pzOyBWkEypOcL<2=*xIj5FVy+s>G2@?}L%YY1&A7PmQ_dx@0&v>RTXm6)?I zX}beZBjJTtU=Sy?W2z@5D%y+F-C>yJ8}J|d%9$fjmz3j{q4nYIl$BYBjX`6K_cP2z zw&w>=V_x3ha8ghQJH+I#Oe#h@#XlG&*;@2Duv)mE*<7ubsH7E+SwG0RhdGHMxKh@PmXE;~*5@B}Rj+Tk4T-h1TGN>99 zAX1JK7isOYXn*^7M(kUnETwj-Q#zM^xz_gje02I~TB7%2=^Quzs1|2Hubql4W06gt zhHc5jaqowi&j7Ae%;fY!A-|oyc~3{9$W{+XMF<#nLt>z$mjMAIsU?@#RgR}e3D+~Ao=Fgu=D>W;W|dKj)!c098bI)?RgBL+D-$e`uVQ0 zu}O{Zp&CgDLnnb5CCoW!`s%6bRZK=%jRWZkcA4+hTPcL7%buzfyV7_ckC*{H^iQyC z*^Z75U#}C0%n8)Y?=AF~bfhTKt9_X3FUbS%W5NF3?@xB}^u>!8RUz8W3{_Q~lJvZU z-RMcXbp>3PWuVM8ytlxrv5}{WOSs?OFDWJEW|j9|(#_EG9hutvc?%_uQ{!7x@!^xr z(LWIZ&?nbPp+u3MLl6yV=E+hNZ_dK)c_r-2FQw~5Q?Nor~6o*T2 z=F}$yoqz^}4@nuaK#U=*2AoZHUz_d7GgHRtay|eI-gs1-EFXUJ=FR8n-RZz1BMghI zzvn7=?Fb<2GuS#@`Mri$Y|NG?I*+{R`1+P&ybVcf?7}Kb*?gSbS*+q=z5bGSN4LZw z*}AW=`G>4xyriB^zIn|e(|an#YJ>_Y8gPkDUvi#qt0Bw+u6VP?_u$}yu!x8@fZY^{ z&&}Gqz>Ax$24mO;N!#BUUBCXsV!vyCI#H*rDf6~B4^IKNBco`T*>N8B4`7sZ7=IeVt=G$i zeK)>5wh+;KxO(CmH7{&C#DfVxO35XKp0{|s5)uQ1k~WOpZ&GSh45U2PGszf4JIh^w z+3P#?K?=|!@KJMzOvtwX+bYd21fXU8u=Ag@-(i*Hh;#nVqf^6TFvy zNVe!gIR0Fy>ngwlr?nR=`6D`3T3lZ-X6UrX^1;|j+3n32>vmY?#D{FcBlR{d@ltk! z{P}@#Jlm3Q?P}==^E%k>kOx+7lUfSiiuQ8e5iPDw=#m(S_cl;k-Eqo)AHdcfT)Qpl zlJ0j|W^dz>=V;}R%N{(Hom?`&hlrW8S|*O|hg3c^NJ|%H7k#TWwbOW$$X)l`F2`a| z!E@qjNdY_p1krl(i**$$ie^Y5h;-U%Wb!i5&Bzid4h|0cs-p;kL4Yg$yp@>w46o6{ zGL#;X0zJwQDLRjR_F_a|bnhkq>`BbdMRGDk6DytIIL>g%zFNFzYu0IBwAjBzF0H5l zJM_EKCGzUMP5DE^?k&2`O2m(Lrpq4zCuNNxVDUwWtJm^JQ(ep2o&~nXiqZb4eMl*a zSMUVD?IEltDavog7zk59qagA(;)ncq64!qdlK)?`W@8gXK~WJ+j_Pk~>YXjH?0N-x z)uEjrSP^&h$GZvOZt}m=3EqSJDA%O%ILbJbVnyXj9436d%;Bc>!_|Pkjo|6YaGxN&!Oq1Qk*yk8UXKpem>#eH&E(~^JHLPuqk9Zd2%Lv>@b4Zi}eWNdokh`KXZ z)M+}1ODF%v6LNaCYcGxqHXf!pb?(~pW5Ez!+`Ajo@zVlMiJS&l4li3MZG6=5qW%2? zpo9vPV6Q3@rO1Pe4Gj$`Glg!r$v6{D-TRLP%-f{BVFkK2#=wMECc+J(-X&0z30r>) z8rz06_BA9Jt%*SXy|=VsuYFm@@rT) zvfHpcRwqGe;|{w_d^?-rP|WM6Pl<7MIyzA&Yvv@1;x(om5~UyF$4w6Rw;f4D)t8T# z>u)0&nmM-n0}xzNCbs+C$l+(BV@OWLx=y-Eg0JWHOlstHin&KEMMK^mDuHmB`B-r_ z$%BLaJ+>yGk8R?vlX#tCuG3diecCUd6m>6x*rS@IBj~pN-K;t0p}Q<>1M)}<>8uv^ z-hF^uQxqOJ^X%EP$@U^U1Dwis4#jrFMdK$BEo2rzZa69Gls3~x1UpAXiqZMpsCYI9 zB$UbfB4^K>iSXYTxC(>GDAupxk)>>IJ^&IPoRpMg$OP({bmh^1jnVK@I#ERj{rGeKj z5CXjYjBEdq0EWYO0HppJ@(|g7V@Q-OjujyhQBmjN_~ND@ioXtE5c>-8tjP)%LY#+O za$hw^Grq0uZy$_1vhD~!3kV29+3(Y%th)vDa8vPFq$OHd*?o1|s8SzzHJbaGw#0DY zrdq=fksiNs>Bfy4LBGxhv^dDRr4U95cXc2H%{`nNnJ8PpIfIab$`-#-jE;>#0($M$ zt5?2W=iu%w4XxcI?L5Kog3EP2W9JKB%jHzW!NxE zFD|7L`@r2s>Ug_-L;GQK&OMphjvQrhei(ZEH~bx%fC$R^K6}n3Gbz#H*raK5?O3As z;I-l2N$?!8H`3V<&!AW8gmV7+>W2jUS&5AT==n1@Z6n@mU78(5c0<;U&fjOdGWP!1 zJ`1XPkea->8%24+a1kS3@+Q_m@zW>~2FepHi4kRJavkzwhfF*SkKpj8l`!08FOPVF zGXk8RHRH=x^QPJgP}gtAtR$EjlD^ z2ioGpZ(Q)D{}>X;AjZ}zu@RH0SEd1=_iBFa!kxlRD@}BkE6DDY)By)zox@_q#!X;u zRYIib7>BDt_-p|5Y^p}b)Z(QyR96oPxp1f3AR6L6rjNi75Pkx*(@^`cpde=8`*9u& zC?gmkEC=lYOD1mCatccpv$ntlruW+{9DDQFr)ShDqa>gtJ0qEDsR3>e8+{8$nLAMbgQY`~V$(a|K}&?qqB3bC?U?2)x)wFRG`5dsk9@({&2okzfM$_jdS?oIo*_V7U1H*uBAWH@^F$pA;IMrR(`y z#s7Rmyrqhb!Pk&m$!{zS@L#a&E6jq}UH{h}$4PjI%4vllKj|9Rz&(pE0y zs@8b+-I>}QX}4HOPzmt2KU9Vq$zyOt!-4pWf|enx3j=qq2Qu2k`K-3f=H6@g4Yi9I z`V%M|{j^Kar)hrF!WxM8ueRxIVV}LhVzJ2}a;KcX1XAk^=>1hLuoH-IGr>1Bt80_= zp~HVc%d^nh3_n*ZdLe3RYG*HAZ1>d5H@}5tdJm?^2L_0vgNHtHA(lf`ke5Z}pza8C z=k+vTOMzwR%M%wr{u=!Jp3`ui z;pT4f)cbJvnuzyq@gFZ&M22tCof#>pMv)X3Jg2xDhwmj|`~7Y-)lU$W>p zqg`yDfF>^hO;aRZ)NBetBeniJzp&@fd*D5}P!MRSudjDv4+417{2IdX=Xudc`@3$c zJp#Uu;ibgD^6Z82nc<5GXekI1M)CmB%`+v(p{)PgF$9w23(m8h!I0qaxBY@zLsivR zXU?3d2ZBOBjhghZLkmH~>*E)6B4mLO;#Y9OK!h3i4}dI5TOWrnwns2@+h1OuWJM)M z;7F}2U|j!T`vHKC5CYgi5pK#aSBw@~Y2t7F8=8Xk-UH^=QQ@(n(AZaK!};R)g_S>T zzu2smk$*tGdk2q}TUQGtj=w@5lv*^qv-P4cAT3dX@^pfh0W_~~i!GLq{Q(8! zc=nr1BP$@QMn8*}4?RDT(+t~QorR|&yW_nz5ssF%wya*G1L4FmqSJ}qd)xcHr_fm# z5mXi1-h%D_)=9XFDw+xkFFm0ir3!U41y_Pwj+0HxJ=t*Y@Dt?HgC#>09y&qDxfyb9 zl5*w2dlyEtX-eDmOATv{qX->bb|;2{{n-Q&nySB4p5!Z6gxQtqZF zh6Ms~hb<2qAHTO?1T-mgxCl96*<2-Rp6oF3b#e}*mqs`>G{>otgcyivBf;#if)?J` znXU#=?E;@||D}@kUaP#U#G=?}L94JBaW_@aLCywBZl_(ndNra4G7e5A@6Ci(8%jEX z8=#=D*99_#H@s$V1ore(s(No!i#gDR)vz!jc4hNIxJ6n6&yg)r_EIHV^I;D#wj{@? zmfQ!+cinz`sLRdb2VOHXP*#N6%sb5-Zl3ZbU(gSlGILsDL|Ci#)}veJ&FLp-8w0NKXvx80xEfFU!`;U(8N`I@)(T|ODC?e4 zvpekJV6;aA;+V?qsY4w(Rr{9vUEUsp?=-Sz-RAE)5xzg%4MoemSTu0%&>Ey^>qPs< z`Y!;*U{)`2psIh2a+lpZkVz;su9e_)Y(IVZ5+!SEZg9oMVLco94Id9Ag(D?MT2YLe zsE+~g6SFPADFPSHQqJt+kEpYJd}x6GCMUR5y8=qZ``9J+6ni{8(}T4%7jtEs9c z$%k`$e~0Wu`Vvka>Adq!FB{QI$RAfR!I`TZ1&cDc7>qoWFk-pf2bk_%#>8%Rpi;V=c&b1x*P zWRlKpJXp4=$B&3|ovX(}|CA^)mKyK<3UcfSv4;X67pnP4qx+_UbXsWVDlL!7C&)Z* zB5Vs+lacXti;?o#&t0GeC%%nCW>2{lJ`D^M_EY?eFxQY`-1~&!d97n;%%#%#19hP; z13x`Mh=E?6{1cAd-Z&y(K7G1jZEZd5%?i)pU5A8a5)bfc1oMx#!o{$EKE_{Z77pVE zGfH2A!r1>k)&KbX9~UO^T;VX$StE%0Nnrj*1b@Ed|MKMjIM*cJ20jqsKZYa)n(?0x z`A_C@3;KiJg33W(JOsNdjX8?om?b6kRaI5b{1cJu@Av=zb!q?PJ^p^EpOwyEGzTrF zK&(80$4mLQ)Czxt9yXhp_dng@|K&aY!Pfr%1^=}R|Npj@Y;}&Z6|Aj`C|CZkOvo?ban+jg%rdVew?zRht*Bqy%k%paYRKX*p;#F62xIRHB z&HKljzg+vNX``TLZRCvf7um(5!5A{agr90kwTZC}()n&Eh~>)oh(8m>&tzOzBbyu} z=JF%xtbABK6h}PK))*G4-6cP?{;w2sDR_RZYJa*A025P(mu30$x=9?#S+jwA0cZzN4B8Gep1|F3{RTk};@ybs0S_eA80!R$j}%4N2d5hn?A*7-CS+U_J)-pke-vekY zA`?1?Km6JJ^?QvUQ9?Ge+Q*L`H9G$U(qgy4xWml=^LqBN_s71-K@L213zSz+1~HhJ z{*f*s4$VGWMW8xHhJ|yeT@PTCh?<&*!m`&21QmGdPmM1Ss^SxF=v=lVrIHxh#4gFu zurRjv_V&1m^z`%;QCi~O@*e`iV78A+gEElWPtE78Xlx-W$MwKNRM+uKPi%WF6)`*|GiJJM%S?p73~&qaLCFq8!kh=p4b$EUgb8#evq^;J*P4BRqstQwddj z;M6Ks=X#W(&`mYY3bBru9E{_q+Q(BgxAik}P5&YF!Ct+U0$75b4geDrnWMYabi$y)6f+*~zvsgeq#9 z;HfUQAqVYHa2;?C2L^i2!wb0n$~WV{NXn{yckrQ!+Tlr86-pkE_9lU{7M}fhuY;A+}y0$x3Lh`FxY~P|*us?LL7hl48>+apV z0dp@;iFEvs_mLdF3ua-l;JVlr%>Z>SR18DAgW@LK^;;t@*2YYsjcTZd;I%Qpj#hd_ z*w^|if*}2fB=UXn>`id$^DC%=544_5!Q?iy%FRFtne#vv?I|eP-=1?M!)zO6vG59` zy%j+C*^nnEDjZ+NRRL6VKzgK*GqacnKH*J@p?wW%VZ6_N$<$W48?Nb^JoHbAH@&>D%3R7P_sKZWqRVl|yu7HNspr$Ng;+s$yhi2ot(pH<% z;%>QS(RLMUVI??ja@&oP+dm4d)=})zM4sTdv6q0LI9ab6$?^lqE0r zmaW=47rS`1lWrUpab1Y<+?g+$Y)*p(OZr7U>9DKZx_(|g&2T+f6SCg2PAGO`b0Nv7 zd31OnUjL9-=qG5Oh@`qd5vmzg_R(o^P@;9muWS!2Dc8LHG_F9SZ0$-mpviaJy|g*B z>meqwIa+wb%_tvj^;zpNNQP`P&T*rLh)ICbUt@Wp>cCsAORd+dW~;ihjLZB|mPS@o zt8o_&DmFeLu%9=hg=`$0T~F=t_IRmh>uLk=-E4d0UpY1VIrmDdhlDZ!3_CQ{1+mHo z)PsD)%;dBCq2$Ib$m8?Ur)P%zl*q^S_O@L^oKN;cjjgJkQ^w|c1+GP`*)hw0n&z$d z^i1^gCuhkWwkJo*@83%frP?!$5weNeibMU&)T38C6;JI-+~Hb~l-wm>g3y;ETA-~l zWWKr|(#sW0i*{YqWizcptP!+xqSIfyq9;`@cxsk@@ZIf;<9y zL*TX?pckw@Dkp6xWi~r-A4&AuLu*EmZabx{<)75%d4Q&C(8=dN!O_Vw~Xq8Shgfh_uh0f+L^o4ctEF{+d|1yQ>AnKsu77IT~O|NRpYji24pwT zt{O141$oN^^iT>+p(TFXFpCK6i`U@XJ$V6fVgXQ+vlu8XF!PeAS`+WaZQT{N?YUX% zD(HoqY);vc0U1U?uq`1$tv33wB6-Y4zhj{I_H^Rpl|I_NKJ3jA$b`@E@pX6x3Qbus z<&dtOeI$|paY}t|^|a;?QGw5fV2`eG7}_2;8Ph&Fh{_kXr88_0&O>J;6KFsEu{$n> zt{>wqLGRld?xbW~oXm&T4Sh&bP1FRTVwS9(LZGzjcQe{~sx{uOQkKd6>^r7>I;7xq zT64aVwEFV$@=A`+9_LVO1>B%wh#moM?+T8;Q0d(?j27_ z`?kHk-Jj_vox85w(UyGMJPV`iF<+2k5Gxe!9>~}|sWqRi0t!H$1i6p<^2llp*7B*V zkGRA}=o2V;rkGY#x0`A+=q8V-Mkg1De2=c2Y@Vr`4mH;Fn9)`Cge08O7IzvY*F^Z1mM^IS>a+;Ih}i1%urkn?%0TbC@9&NcP)ve1p# z0bgPJVUgTsk=<44A^PoO0?lO`rEW*Xsa|?1@A8wyBYJ0>c=qnJy?gEwxkTZi^8pvO zChi)yL-+D6jr<;cyX5oj%jDx>`oxQUMLcyqYyIUr3uP0~lQkhF_=xwYfbQj;PADxk zkS(=Q-cI(C&tFNvYm3&PET}E(`1(TsgS#dP)Hb5CRA135y^i+QvRuMWQf1wQ4o)ZT^LuZ=Ap@J}gM>t;{bPlC zW|LY)XR?&OUxZ#J>$+4YZ_dSlJtd}hnbCWQ>jH$mE&#C zhtR1+9%kE}7D=P-voyIPRxy|6G(R^rP#{f2XA#s<>E-@m3B*N@6z-L}{Q~?nTE0?) z3StiZ@&|=$t9P$*PWG;5GBrVGu7=>0yKzHilOa;=hljKj>Vxf zbD+dOt`~hEBcuViv|PE<5kVMsmy`|X|nnHzT)o+i{N`b7+S8G}m9RxFbL{c`-= zeTxHW^1#wc*F)D9_lG44o+Lt8WkcMR3A1Wct29$H+P!95lNEhh1WxLtcT#!`#0yDK zBUk*^skuufKNr0%rEUlv=oDo`!T+B>nfh_t<6ta!65X;#2v(OsFTGrzx4bzt+ZLv%jO zTWE8;%wZ6FupH>K6h9}^e}n>*A->gr; z2na*RaMrxsssS4RvLj{Y?821fjWhRZ$Z` z$k7NwHcU+gzlgT=kHH@accokITFzGPUgoZr$aQmf7YAo|2iw~mo|dj|w$4t%{1-0p zU*P4iad&rdlMoPa{PPTcXIE>}8JVcNQaRe6)6ccmxdX3HkZa)l>j z+y=YX=AYFyG&C^4fNqV(n6blOxu^dgSEBI2m+ zd++HeD$YF?&5NZzImAO7WyN+~omHN%)>CRkea1kx>lB#NIFT!~BHJQYmco!-N>IqxYe(Ud- z=LZbWYo~K8E-tngIT}V^xbuib-1W1zp5&X{$Vi@?L_KCX>mk|Q?E?3?UY&+;9_s|$ zN|&M4hKB5pg$ahpcU~`-w^er6FJX(nZkCe1ml}Pl6OJah7-{N~E+*{#*NH~Ixu z_5G!8lZmm_qRxX-;y%mi*|$D?Di|#Dm`$;4jNqd8 zU;J{6%R+i*8875Mb;En);W5{_wZ&R?v8{nZ`^bIvS-Lr)wQRmkL7CavyscrT%(AB4 zYlCZVI$SPh;{^b2(yP-gQ!lVw!unlRZ{>?}6hoG81Szh%>rep46b zH=p06BFYh^si~<8>zDtEO*+OA_xvbdL*Yvp6E6=JS6X%6tn2LAGiNN6l$EVxCx7~G zERBDksQvQAQb|e4lFzV+w{JVvxk^0CxZLxhPdsv&nG@ztck#!U@j>5(=8Fqyu}+~c zUL4fWv2$?9&S2`&{1_H?Sc^Og536a}SLC=f97w0~;r16-olZNQ#jh`!r3u)~qC2&( z7!Go(gbCJ;<(StznmF!8C5c(H^vHQZ^{N@Qg<)18M5rMs6?ry(i8Jkw@G8g1=;eCaLrWgm3|5r#npX7(ophw=F7vR* zdpdo7a>%L_Kkw9@axJad%*rY)8e18Uzo;SUcgdBCPpo3%!8V`YA2&gWxb{?4Raok= zmtup0NiI8^D^{pLDw-73&St*L$YsVy`&E69OQt@%e{0unW7dP*MV6cc$+CTFnrBjJ z(HtY1X8e}+&^u|XLcab1uc0~p1^7R_IaW-yH9;D}jL)i4+IKbTy?eK@S9EATPuuF_ z-o9IFN1m+gd}PmKL~k9TTO~u}1PAWcvRe67ERNR34!`4c66<#fwA~vS6*Z-=k@XO_ zIm1(6@|c#jN$^5vmR@9^GtQVxJuWJ1z}SQhwQerl@#0mR*Uz2{TB(^e*<)hZ=XtYR zfwCrNk+tXFa;rbePy^^3X3a$ZE2uMy9DVRAWOp=JHfGD_=(4UBTuV%Tw;nI$-Tnff zu{OJUgzP=N$o7}7Uyn}c!5z1)Aow-kU7<+~2u5yE8!Sz3w>5_I=tW&8J=NgKl}Fq! zT!o(IQKKIYYj4@Dp9a)Hn{hj6iAdasGf4P@AZ90ES`oCR4Fxrag@u(>!@~o|9{3-x zQ?RhGNP3iv(6az?p1d&F`7vL&6oLyIT{T4+K0ypp0+maX&;Ns%yc^v4coonTg{K|ne zNbUr710O0|5~;P4b)OZzbqMhfiHqaCd-pB_J3D)c7o}W6$wE>2A`wY?h)e|r1yNqp z(1^rhvDKBQ5tk!XTl13QcYja@C?Js}tQA~}9ooJU!Eem;vj!PV`W+mIO2+cZAbcR5!-gf7%^vlkJ+y9j*bqa zEha%Tw054!z|YyT+1xjfhZ?sQaL!*>@OIr_iAnTkqcT zEhII9SN{h$S%;=PjmguePfJl=unE)f-|1wxIqbW0!|UIiZPYXMALovq9Vjn$pYPYF zWtVX%dPj)UykZ?cKTxg;+ibk<^=T_&;oj?ICpPuIB2eX+@nYN*S*xBOPkIrKN>v-FU2D`lP3nL4mRIocVTX?8lQ zGgz7gssh*X2JbF>sJ!#dn>Q1R(7pT`S^jRhrb(Cgw7NNZr4!uQU)kqXcCozSC%}M2 zTklwZo2!@*pJO09%^f4FhzjkOW?=-NrOD=QLC$ZHNi^ zE!Qje?f4U##S**?T+=&0l^sM^rjt{lPo+qE7QTB_^u@lfC@0&nSUpWWeum&_fVDC2 zrCptBQ{cKDW6^uqE>?blL3wUv3(`sqTWv4x`+JK&(yZ^sUUVEw@SR^I@KDgJoFjwi zD4kA=O##sVKGB(HYI;<_#NojZqlT2Z%B1_faL7Z}2b{fkoGN`*QZ!Rl5+=F1xw)F8 z2~EOFk+^Lo6W=*eLWSSPQi8`sQ}i95omb3a>TrK?MkbHlNJ;fM-sIX* z{y7Ye7HtN6&0hP4QN+cLSFc`Ol>Sk{Y)0`*HmAKK0n>X|Uh;Z%{Jlh8rL!S#J;+OY zc`xtdAVC!{5d?`i`4 z$H|i)U-agk-k?B`p!2_D-ap>x==0#iAuH+6od@5Y|>F7-W~Z{;bx zcUHPn{kK;2Dsw3I($-~YVYXe3kjr~XtA2ZRVMxHbC2rrUIYMm?OG+KGL6{^ZIJKw7 zlP&R<__XWaoyLeAS{m1kjN(KbdTvl1JkFu~ilu&atI)nXVr?kEw9ISaw_OdpPRF3g zfg7Wd7(v|GQhmuJngU$QYT&>z{<`M^Rp%hjMFKKh3ucoZD_^K;ERr5T;ZQp%CY3&} zt*K)*DE{5RdXO)5$bvPs>N z@cemhcfD5j%&AkKvJ0GtWKM|KgjB5d+Ap=M3S0w@Nn(^v6^mC0Mp@|RM|iBd=J1$c z7O8tT($u0)>11lZ1`@+~wAita3sP>pKE|-vDQ(Q9B~F}6&~9oQ_?`DI*#Th690=g+ z`9izSP#A6Wq`?EPA^$b+Pa^V2AGNFSnCG^KuHS<=kUn-uNpevgh(E}7D`2$ zKm+o0ti?@9R~w{b!>%dn0+$1EVV9V9kX@$#r`ud_;nL39Q0z{6w6L`bkhXj9#G88# zB4poy0&9Kp+TB@;eOqYV%2qlNv%6I{kZ<{%l#m#SVUNB@c+5mu4#u4yY;4o40ph8( zlhxOjVbvUy?@h4!{^8DJ>%`7X9YT<7>TD#p*4N-XCb{&tl=KL>T;GD@P}KmoU~B4K zu*Goo{q`h`Wl#na-4cZ>bRqsvEP)O2kw8PM|qQ)l^11@sjSI2|^sk{a_omXP) zxQ5|Gy@GAoI8yWY`eev9%2X0%voP{bIauY(vm?z?eBn}eKd~zGA?FOV$tdKIrUYrj ziI(`;6S+zh!$9TLhVe7zG{66X643K$+puGV)9&{NS)1F?yHwvV*wZl(MgWWOUa3+H!oz%3!cr% z@B9^|=PS>5y~ECQpvrUJ#b!ETUL!z2cGI`l@Rl#5eXIEnOL=b#M-oxyq~iQnMwL+Y z5{c*Es9=Szs!lE)2vCu&7SQXAWuLp5J-RcV!Ya*wj2O1&%BMtW#{S=Nz932}UKg=J zb`C7)(UKUqEFspCjWtibHZRb3Dk{jwP}1Mo zz1kL;uMIelbh~}cbi2&auUyNStzW=3!a{wBQjY!1*|V|Nln3|TaL0buSny1uU^gvs zxi4FJU>fOQA}0%?B7aNAz`)Qn){ojF*QU1@|Meh}%NA*m{3E3PbBO$tFa9HT{{MO) z`p4~zH)k~(Vnpr7dhPSVFFN+tiFSuPBty`w&-$2%PUUkKGjy^dSR~x9f|@!Lurq5K z=zj~QL+Mikl5V~bVdz9cwo;do2PDvL$KyHq`T2VuQy~bw%Sru(Qh>^9Dk`DC>SBf? zB409#socJuEVViHPUz0pgY`{K%e;MM9$8qs&IT#|o5?}_B*DQ3d5q>VKT@?hljS-Y z@73`7w6XA|zztv8*CJN+t!|>?U zP98(b-KS5HNa>-|SH?=Ecz9H)=-7Bk*2KQ&2K!5F+D-}Q7#6o=yVcN$S@0}wO~g7k zNx`+uK}O8g0C+~88%2(N7HjhZB$uJJ0+6>6nA@1}d5dx+rklmbB zC=H7oq8Bc<#!FgrDTBO7G@(HdxwZqP4Anes?eaPWR?QBC!rFyg1uJ`)$EOo(JgQMWQ$N|$=y4QKlk4T zMJ{Af7vjK)4w8fS&HTiV*zJp#07D_;hldU35Z@fni%?G0n0*Ms!4hPA;05J2&^M8vOmTyNG}4fw-;dN&rdM^|G;HiCR-zijWvQsrYPni zasQqW|5f{Lv>3U!xooRnaqq+A2JnYeuuMXuqHH4Ir8t_%ho{=!S%Nz-u?T8E73hg3 zkbC`Nr+5;3FfE6Z(1zs05B3~LQ4VICSOh+jVvA1`@?CY%FL6ooTOWB$?1g|w`WX-i z5iYP=go0(aehN>2OA7Qh0!;uSGzjMjQHRdbHrggJHX*B~KpXnz4FHY$kI~UU|8wxvheuzB zhlg{bQevM!dGbq2)^+U3=g*(7UaGIF3z?d-(JC~~H7Z5_e79N`Op!m}@}XRN!HoTZ zFK62rx!g_vK}7!8LPA3HvG8W-Sn^?5d6F*8H?N@rXVNBj z94x@K?p(OV@FQgXvFx^d5v&oN^m2%H`i+mKzg=cXF$}>(BJgRWd*Mvp<9h`qBn-gw z7|Uyhhg8pzy@%yp`pWFQZVxUv;^KScSMdjLH#QZd*AmE!`fo`J&3EE4jqn6|D@Vli-pC$r zFp|e#E3+*&fm<8~>^Q~}bj->hFV0X609U_&S}QjqcqH(XZX30y8i<~%ot<6o#%y<< z*zY&fsRoCRMBD4D?^BEy^*IR>h#Rc|G39}0I5{`|Tq_}qC)3LpY}?O7U%Hzdjq#$4 zmhi|VWyC-CPdJryJik$iSwiHwo1YS6VOG(7V9rNc#Bw`nb1r0=8WNDP@r$8uwe&7Qdjl1)9Q$kXJr0L89w_>@mvfM>Nb6 z`sC@IIKXd0w-elHIO6;;Q0B%v!O~m+1L2_Ouj%SWoS@vyDIN@68}x1c3mTY#`@<NT4^t2#pvKj@hghsCr;Gg zLc`~g!F`Gg#3Y4}pTB;ML8guinjw{F2%1k95cMcQ`J=qIIDnqCTr`yodci8$^_K?^ z1EqsGRRTqr;D`dHZt*?e^3Um8TNqk6v7jM|zVz&v06(bC#XsH)Nmr=s>?n(u-B;K-dzBm7k_Rus0lT~R&(9+8y-O=W&8JCYk55C=DRD`hN}E6 zVZkOgl9irYK*2=FZ9)xy5!@NX{3znPHt(oHGy$M0{m1b8@%yN+Q^>E)bT+E>PG~5Y zX={i5vC#(irMOSG|M}hp`S}+0p`4*HG3RSvu{IWN3j}OHvV~cLtX2(0lX|Gj*ixbR zO{*$!7Z1SC#Z+>0bLCdeOr<-keLIEM;HMIA7P-0Qw)C5)0~~>)Ax?B?I+=Bjxo!CD zkV(!ai>mni<;!n%FF^bzPceE@ohxAOkM#=NOBVrZGsC#ND2&gr>(3Md<&I{0K_Hn~ zxQoD85wT*jjwDm3k`byuA2Zii90`nLwP4aTh?y0+8vW%o#ZR?EpGSdnc+eG+HY<3g(Zw;CWna-Kim5H?l0OWYz+h62CQuP>MShKLti z=N5)=ra-22tM#DXK#$5jj}(D2X|2_}1Bl#?wbdeReXpbSs*v=4_7cVGY0zp7q%*wO&qZ!Ythk?5BVcQCPBw6S@R3#P3E{ifE zku71XCP8xzp!{xWG|7Wb>H#>#rwnP&j={8(O;Ngnle*PUwP0scKltVOv2i`zX1H~N zE`=EQ>L3rbhv!6``g_7S62#rU27MuEzpeRlg3%gOI<1!Gm4KCU6s?i-pYP?r0k#)+ zpPxT!{nrS&vvS{2lQQ>u@W(<4!seeSPY7G7CB1@&Ry!K?9k?W`&RhlT#5y*Q(;Xfw z)d~g1FJar_T2N`JntjD2+TbpAH?7il&EyMdPg4gnRLkyewCWj6hU=Lu*5;nMc(H3+ z%4Jxt$P)zycT=ZfkEu!ouPrbMw99ZLQUb>9DS*x{jV${}0aGWRt@Er0Zb-f(rDjV~ zEqtU&fb2%?JmFZ*?auZ}@Tcn;=iRq@ziOPF8-aY<+5mW(3a+ANfz@^I&1p<3$#Oh* z9IgzybvC3`W~&KXszt*j5&~XKn-prP{%ms!NpE(W_~w*8&KtZi_DXVIFka;NC?r7+ zN(!?`e&Z&0&Yi6_F|C^_>gpG@tgNhF&yyxZrxNY)zl4Sdmq<{`!JmJwDA=ctqyJhXf~%^j(K2Q%Z~;B--=gf_)w%xuz!b$- zGEht-B)##MPk&Ps`}>ps%LAZQC}CHEdG~E^|30{15Cu60tja%gs{h3Un`mD$ir)m? zUnS9h`TT$Xz*OMan8nlQ&)=-Cuak;surID4%YVZ=@~dnqN`ps-;ZATbpfRcpadD1vhJjHf~( zbzP`j^GQ%vR*vO{qO@EdJha-_=okWMb-v~?T_o7@-?6rD!0Z#$L)4(qOiF|sA3l6o z`pl?N2UOK^>RXc41_(SJX`kgfw=F1N#2@C-ZIY7lm1dn2ltWlYISDZ^A@A_!f=xlc3|c zwxRT+(pzYM?5!RJaATR=S<2+j0{F4Pt5kQ+spq{sRFTX+CAPQAHJI1#cFO4@^$3k`VA$epI z^e}a+?MdzYtnlbyz30IV9Ss<3iE-VYY9KwaiM?Chl9YDm@E3N-JNaL$pMtGyRFX?G z9Db>$l2j1*J^?DL@8BYA9JJtX3CwpBD#hKx0-~awlyY+<9|%pKMc#FH6Rf+_wZZIS zt&zO?x2b}h+L9kecVKPtDKKMcrxy-^x(h>Qn5{Sd%OpFB9x2G8_DLZw)#t}GC5 zhJhW^92Om|pRxsPl6sawPD~YCyW%9(|IW1=EmP-6;^5(F+~%FincP3xUWzB{^So5| zWF5DLc<Se-j66vZg$eB%>5dPCvh7VWrMSN*ov{FAuFM$=aySLl*(S=I4{#q3VtG+yz64S zF#v`9RG*a@*JjbG;;DE0OX!#BjH9qLyY0V}5yf+(ELScKOVK7wO-)_i<&T$x*Z->n zcoGAIdTE=`8k;D0?#J(EIzmSUsekStwmNPDb}bJS;9qOt3LpkI)<=VPi2Ts}b(u&= z+&z5HUz$q#Xf->u9-Rx=>Kh{8tljR$5jit5G9ry9ftbGrtC(u}5)#DKizHXO|C(Ky z?QRUDlQ{}J_YBraokoP4L-Q`^B?E**KqyzSFOoed1KZfKY2Wjj<=33kuP zzI`r)Ym8c@rJ#| zBRX~`{2}L6RFXl?=KL53WN$*_t{otrYf=?Bd zd2Yw0O`w!#hhYD$W2jS5KUr}fsfywUEjJT2=^zTdsYGc~NuZ;hW6=4tMh`&z4OAs8 zV%Ju>O=G{k-NI*?Va_ZN=C`pfui1{d`cc#-x{X%=^a#?M3$kv?JsrERe&*CKaIy+ztnO53sjH} zAvGb7&SUIWK)P^^*-rOE)Sj|z2)jTiw9^rATHfv&#>hMW?D??tO@YpP9-qP42+eMx zq^2RLmsvpDQ$mQBxDVObPg4OuY|ap5Bugl|fA7NESyT>_%4XZpMUb}f&?Lnsy|EG8 zq!h1(!HGsARe29tgNF2GrlkW>?_*I`v(`D#9x7sAH!G|w@a&KTHJbVyU$pP&OR?X) z_6>*zH4j4*Fmd-|ndAd?p$W2i@5@{H65D-ad{7LGM zB1K0+qO`9r3QB#kZr-G}#e_%Vm6u38vevB9UM#=_LP@<@1yu<{K5VlaeyPmG_See1 zY&U@ls1Y6liHL5Od;Cb9#+gY()Ma%Vubgo2$38-8{IQ)OeCQ`qi5}|xO$#<22}O%# zMuwMr6jaya+9fLMI$Px(hX#Q329 zJeJZx;9x~71cEH}-a!O1G!*S6M~53u*!Jv?>|GBL;4VOg)!RZzUu z<&m6BBg)b+Uu>dOlIG_-(zM|NJIPW7S$XhvBOnu6mRl>=4pm`CALAcsw8~ddR2LvH|6#K>1hQmGg%1Wa?&dT?E{*`&@?9LCpMo9p+R=!Nc#eY&M9$MAZ6g_yMG z4z6RDwTI7|S#C%68yB@e<#H$nYq-<8yB!=I*J{T{6R_N-+^lrqG6fmEJjVQb7OId* zuTS6hm*(bphN+5yN17u-U|?jtQ`Lhl>nX3bFyWM_`ZhC`l5&Q`L&1xy15V?_W*=x1 zgo76F==T`Thw2_VMFaSjqqKa7I%X`SyWO)ZpE90}dBr@K8uT!A_kclW@^!9?nuLfR z??&$g$yUP5i)7A-P1$6}!z<63&Yi2ImjNfCs&Si^ z&!&fyOfyybB5dj(Q^`3S_@vVehDTIP9m(?I9wE7W;bH5aGFPIoWx~Bv$Sc zwoJWGV4_pYWLE<#VkmjTcI$J6$$^kJMZ%rx3cXZa;$npbc(CfFXKm{9O}3{dIZ54C zzoLon>?IF5>oKhta1fzqDTaZT=6-LH;$y2eJ9CH!1>LDz+M7y+U^5ZOQgmoHEis*i z5>o}VK3NK$q@JeIR~pmnx`Q-Z@fWqlAHQs)lXO%_&%2g2jO9y4Wz0rm7$v|}w^cbO z`c~+m+IpMYjlD&kp)`)mxs~mOIf-6)@;RFnd6mA^=`WvvxlErZt7G5lW{|54Y1^4m zx~i?Mox8GpTT!*Ca7G^&Me=TiL!3=03bVRR0|tz4*-jp2WxOfij+M?a8J@DItdP8K z!z|~x`8L(pKy}pU*OYhO_0w4WKoqSV=KPLdSF2JGEjh=2HQY8%sv+tUDw=q(v8asN?FE*&GD<)&R55o`bC~h4~T&y=KLU5A&Ygnlr6G| zuH#qwtZ(GosR8zi$6YS&GadDmatrt0ir$)8m~jy;)9^PoSeZQdCW$kA(=u-hpJ`2Q zX7kN6*=K&-Au@CMwnCOW>t+J9jz{p??~B!~w|kFor+=LA*ylnDnM!NmNrgvIv`1AW zb?>*r)?o3f3>pLPl;?wr-n8@H{b`fXu_Xr);^27k5x7PWb8mDP5 z1(RL97VAwYUP%&5_&?_i|3+V#Ni6oCyGH+K4}56crSMX6xJfX7Ln current['name']: + if current['right'] is None: + current['right'] = new_node + break + current = current['right'] + + else: + current['phone'] = phone + break + + return root + +def bst_find(root, name): + current = root + + while current is not None: + if name == current['name']: + return current['phone'] + + if name < current['name']: + current = current['left'] + else: + current = current['right'] + + return None + +def bst_delete(root, name): + parent = None + current = root + + while current is not None and current['name'] != name: + parent = current + + if name < current['name']: + current = current['left'] + else: + current = current['right'] + + if current is None: + return root + + if current['left'] is None: + child = current['right'] + + elif current['right'] is None: + child = current['left'] + + else: + successor_parent = current + successor = current['right'] + + while successor['left'] is not None: + successor_parent = successor + successor = successor['left'] + + current['name'] = successor['name'] + current['phone'] = successor['phone'] + + if successor_parent['left'] == successor: + successor_parent['left'] = successor['right'] + else: + successor_parent['right'] = successor['right'] + + return root + + if parent is None: + return child + + if parent['left'] == current: + parent['left'] = child + else: + parent['right'] = child + + return root + +def bst_list_all(root): + records = [] + + def inorder(node): + if node is None: + return + + inorder(node['left']) + records.append((node['name'], node['phone'])) + inorder(node['right']) + + inorder(root) + + return records \ No newline at end of file