From de4bfa4f8400c809186535e85edc53f24ebe5d1c Mon Sep 17 00:00:00 2001 From: Arity-T Date: Fri, 29 Nov 2024 20:45:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D1=8B=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab4/report/img/main.png | Bin 0 -> 8531 bytes lab4/report/img/test.png | Bin 0 -> 8128 bytes lab4/report/report.tex | 19 +++++++++++++++++++ lab4/src/Lib.hs | 2 +- 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 lab4/report/img/main.png create mode 100644 lab4/report/img/test.png diff --git a/lab4/report/img/main.png b/lab4/report/img/main.png new file mode 100644 index 0000000000000000000000000000000000000000..2b748f21b3a9cbe04e4a3c6326c6ac64ef421664 GIT binary patch literal 8531 zcmchcWl$Vl+pPx(!GcS0LI}YjxH}0x5PWbA?lxF(hXH~nSnv>Rg4^H;u7hiEx553J z=XuYm^Zj^#pC8?O-@EFr+Eu%It<_gYs{`e6u_>_u006F{f}92bfRcrrhhaWP-V1B8 z{g4BSyN0|BpmKzI7g;>BmR6Mp0DdLl+?$~zYb+N9kUIcCDsD&D&A2=e;_dI8fqK52K73D}Oe8 zq!gPdlWd1Bqey{{)wD<=l|5>9*nIU!B-mLuNwX^ztI#l?cHIaHdf zDmy(8;`O=kLiMI3_fh2GbkJ&VjL;FER(-kXJN>}qO8_ovI4`bE@Vn)w_|Kmaz(651 za%lly*#_FSF}k-wUADms=isyF9AtI5iMOcVrFlpob{$3!oWHN>e0{IDRSQnV{hndR zI%hpTY@gd7JYs$CFdvKPa7dJl=uR8^E5BVQKCu$)OKwOM^AL6UikauH`g)qWfZW~a zLH%_Or$lo_6$)So^@bMGdqFEUpT8eF&`n=2;)k(ztac9DB%I5mxB6NQh5livwXa(1 z|C6Z{2aG!CYwR0;f*hcFz}`_T1%r3j^*; zlv=+L&NmR%GFT2(C}x4Pjr6B?EPQT#wrHJy%d>NLu~vQSuQ_RS-qD!-lP^#eY|0u? z`BI}oylmTY#+TI@ki|1)UFyjRugd35B(R)7EDGn3AjEye##TxQXw+DVGP&b>Y4qDD z49Y`s`t2LLV@7fcUq!M8zJytm@b7Nn8B+?H;~2b>c)faTEUGBOHh) zWtlnl@w{Jue+M+r)UVw^WyZP&7UegMOnCiOB=<+1aX%M4{JI`G1=95`)W)P1J5=eh zVKG&-)I#flKb5M+rg8{=tfS2jY6`sHv`Dq9dIG4M%n#}*OAlUPM2>Z`stckjS>HH5X{aOot=SL1v+p7@C#qsub zJ5XN8qjwL_)yav%{SHxSTVN(YMm>8DioSz$# z`{)%+<+sB#PnZ|;dCLQ&57AP6ld=mTEB>#-J-n@qS_ySdVkmd&(4z)gn%^4ssZul_ z$s9)H5cLvnPY>}uE&mz&IPm2MwrJ}OL}1yCN=)sg<8Q{q zE^)iqW1C}jvGN)z@dri1&3SjPZzvgzcIra%=kyRN%;oWIi_?`gZ(C_*_CC=;8p^|( zG1Zea(Jy&_aQRH}~l{g!oS_&XG z?5IEZ@sGN3pDIl=JGFBqd(i+B$b=Jy?#jSrAtF2(Xa{L;TnrkH`^5gEx95*WyGKx;rc;%UrfRGr4Pu>0T8(Y@=s8Gds zQEv_S6n;rEGJs#ZNCAIzU+Fm2y=9k3p=t928Cpm3H(JvYP~EqI+!5MtF#?gD8^<}P zXHH{uNkOGAd4EuetF>vh8hzX#448V_&KuxNsYlR`h|V|K7b#A9^Fi{&zXP557cAHd z42DH8N<}^6~ABv@ry)2V0@1qgp$CW{t|!=!y}PwD_np z+FyHi74vduKzb8&TE9nHC{D;|jerV0VIzxBJ!&^@Ta^T9t8gpSQt@N{4r1Ke2~Z+> zeyi~w`}kCOOjU*d+OO{)!rHSQoqkN@1TdouXnSG>Mb49s{3VQx^WRsxw^zNjUWb0P zJoMF(Rz8ljK1g|iW>q4eNb!{W;tHhyW47yywKSuQT{lyU+reIQYE>sg4l7%0=Zqnq z?_Yf|!=;e?)1%rnKe4*|GLtzp2?3q#2oU>JeUm6IGq@k!sG4B)bxK>}f+cwM<)unR z^mDiQCeeMjiOU1|5?G7KM=4tdk_JF*2iH&1idjR*xyQxvv`5FvCldQD% z-K-z!%Vx$fw#7^8>YPZ$dj5til#J)Bhecb*1SRsByI<>DLx0+==JHU+RlC2mLIn)K z*Vy?1#pJNJeGOakkQx*KD_S@jAeo;5SVdD7XvYUwp;Z?GD1cSRs3`j@EX(V-Kb2+5 zW#9tTX|p2H0D$kLe^>wUAN2qD4*=PWT>I{VT&tD&)s?jH>m)84H$Vp$xu8x97Scqi za$ETplAVbH_%5uUNp^U|@!Rqc{gUHLo#gbhoq#0wq2eE?^}rEw2#6OXSQr#jekm$K*GV@j)2x2+5ii&z4c-7 z0zTmELw#g-q?zr$lc+>KPw>%S2xFr%j{ToozQ{z<1KHo%dfp%0b4%{tupjq;uG|)q zv_-gcCPtFPvbmc-uu(OUMzuXKmTo4eLcc^&)yyMc+6!MK+I;sm}(uf#J zW(vr@j*{3I;!zLjllKoP>?CWA`&V);X-p18`FSLVOVA?S>UUOxWH>h8Qq2eFb(E+w1W0IdYhL%A|*=Xvzk1XkfEioWi4XvBMU|pF_l&W0Q z%bJH|$3%)t)3CfV>h?uVmJ&kJfz@Ot*7- zu0uM{M{@|DbnrcWR$cjpm#(Ag%Tkn$uD)V_f<6G$(fFCEadK?Fr;dcgg~Gn$Q)`V< z_0Sv<$&WO@{NlP_4wWT4)l+B4o_V35yoVRSj53K-+T%>AneY=lV_|gt`YdIFVe$<{ zDpDEm&MUKHRdPyCwXc<-ACUX5k>(HQomHrS=%QVnX7q2#<^)^$h!e^P^?3^Unzs9O zQ()|^JVmF8TFeL1P>PgR5#zV}lRoJat3LWwkvg1I(_%ZPxB|{H2L?g-shxB-s0(U>t)z?eI zylD$44(}EA?`0pdb^@L|wFz+q!kbp6X630N2+7e!QTE}8jc+d+vSRznxU6xt-*n)j zgosJ^)%cd))Q6lvGrM?^0{VI{Fp+USQy9CH`!NIj^%ntBxQ5?Z zV(OsTgxV`2V0x0nX>&0 zH8nNfGprjadCA^{D5KcT#pI<9z8L3xc7o0}JuU2l;Abdo>Bw07QULz!yT}|ZaAJP2 zmi3I|lT~(gHA}VA|JJ)$sp8b1$203opGW)JC0A;_Uqi$>Q@0Y0axN;nTd?7rL=xWcTsbseSAJ6}`zwKhi^sKL%~~W==##=8Yt1@FuRG!_f{So+uh7Rwx5sn?xFqSht)9@a(|6|tZ z3ypvCY~Db`oWGvOgJU!E8v{FccqhJ6h9_5&(WDQFB-_EadD~4f>W{}=_IHCnOZr=T z^4q$f)pG+rh1t>b!(`8P3LGigzk6B?U+60CQH|n_aCe2knLOuF?XEY}O4*y)Dv8Js z^Eb}BKL<;m-%-)-Af1EP(F=Dd9nx5`E?64b8xtUHs-f<0AYMequkU^%rp@VY5{Y^dR!Y4tyy7`6= zw8d}rjh&0+vdJ!Jq`wM0?_gI~U6tG3U=mB>AusZ9`!4zJI;Dd!pbyKFS$cy(B6!ji z$M}N}RbDcAHN@&NTjX2r7F;^M>b@Cj@Oo4;H0aAa?R$Q$7m6O_ zw7(1u`{HYr0~F@}@eVgvj6&oSFMo!nnNM7CXKe`+Zle;&Hv$M-SbvvCa*+*kvH)C{ znx)MnBW9WC7B8uOl=%?IdNQSpSfoF{;T49PPn?|Rh+nM=G2W|fHz|aQAk(80%r4Lv zSB~rg_cgux;fdAL0mZ3vw3`Gj*dItM{aJ3IM6b=RONJ>gWs=;`$L)569eIw}KcrXn zPUO&*T*)k{56}bt=41#)i7qlivOKxoSWJNE!`c6dmm{fjo2Fm$&zBZ$OgSqBS5fYtE!>wdRZhjCsZa7U3rgLCAZ@-fz%8?AMfUC zm-uXIwjFOYAm58_2F(Vfp>tzO2D!t*yt z(}J71bLTU=2_~GHDRq|1`Ns)1ekVa$3yguHkC8dc0V;4kcHVH#nRUyD&8gqDAM0sC zz5-~0aF^b>R(V+W%Fgs(`G;>BR^1K~>b6M6a8$?Pd$Uvj*cD1>S|FIb>3E&-dAfap zc6YROvA8$W;Jo*N?N&U)$?iuL&mqCk3kq61!3?U&sbh@}B3!xD^|eRm^Rr~{+nSra zz$f8{W|cayeW<*FM*w%3QJp4)2eNz65dd=4$O9{|3Kz!bl8b(G;PV-(lvW z$b85!pScgbN|hK*-t7F70$&!by&rV<9h+H+T!Z1a@|`#)AFo2Ye6D2zi=iAJ&2bvM zUp+p`tr*ab&sICM>Odi*KWEENi;2igNxJLShi@$C5g_zkEc$DSe(oqa-~4J{phs^r zCrz?|l_~Tn+4sX2hUPk19iP1f+-mC4Mk@p2pHA(!y=Y%{IZt8&Xd%skUL#Al%;Zcp z1FL7M3uw^`>0G#w2C1K_xAVyeyGdA|cP?|ltq;oX$FR63#)X8}cKB9%ulKya6~5@R zJ*%63nW6kMVb$Xwl=CauW^v-%!v8`!+1*ZKUyvxL3$>M^*B0aDml>B5BHVMK%jTRT z&G}pQ?3@?a#|#rSAI{T(IPHe^*Vx$x8&BzB)u8-t>(c;*YFlb6Q#zilKoql|5rV~lWP@$ZYFz?1m`H{PE@v$tAw-@ zYzHbC6}Kj1CU=_j5{0MZeUgn1hewXVcDRA6A(FpT*V4g8DWU@9a}zFd3E%Hx^}S>Z zlDliVIG`IZU`O2#NiF6!%=ZguC0X3sui|>=Jjr9*@vGdkH| z4+g*a>=CWCphE-ZBg#d(4-;kHZ8r3g-QFJQa;NONAGxh2lI0%*jK_StlotJmX<)K2 zQZ|RzmWVvZCP#_H?6#I_&SgwC=l9Gyc~TCspiN~XUeAZo7h6j7o#ycz2)!R~#McCv z;R1yOag~1Zevz;7v(fi<)ePkx%CYQ?!OyBJMc>VEjcd1Yw>rth8c+l~Bef<7%`iVcp>KVbc3v0y_Lsy|}Hz|6^#Ea6Y~l8h_d%67!g` zP+riOktSRclaZfY!k{rD@b`JHmZ2NK$6Gn$2JTiFT|XJO5_W}^8l^&}bgU!ZdpQ;c zui8v(V(J{`JeddWHHUaLymP^b*V35g1GTvM>s*zlIyz0HU0-r4PG^NS7@id{T1GnK zYoO}*t|N(?@?_2MU&0k-=A!M&juD`mYg?R|fW+cOWUtbg35cjkss0Aw?zB$|QAy1VWpE(t7&&(#_d6(PY>8NAW@)1tz<5Qiq+~_JZQOLcRk3 zkf1!`g4P!Gjq{JmY0jT0ZHFC0dj;7O4tF0ZD0t$!l)8IsndWV&b>Pd_3q2W81&wn0 zV3m?dk87_5{{*_UlQw@X`?DdBORF)wLzb*mx>m9rnPHDFM?P28wXEx3jTS}lqq0#~ z%7t$RC;^THyi$8TEuIJZA1#0VgM>ahJ=aSigRI8lJva_U+0{EPh zb8k|-A<@0@AlWVh#?54Je|*_+Lr`4B6?$nSwR*jHkH^7vc90`^#?iXU>H3Cc*GZCA z%e7%2TXgnn+zjP%+D(Sw5l9_LqVgHOt_(7ZlsXR(#ZkTu1<7Nv1b)`X{!JYivyebN zs%geg0nDt;al`6QZ#Ud%gglC-tiBWo(o$GZ)63LVkq!thE%XZK1@~~)J0C^|iYq-i zQ0uS#X>`@q6P`BBm-dyUE@q}+MFKwI#k(D#1wQTmoQ#*2>9wUUMA@ieg8DaN6HwE4 zY>>n5+WifyCvD>&ER-lLz*n||II8ru=2o2-kWu%f_ZX0G;hZF=8r5%Iu25G)C)rj` zxBzW-8TVcMcJ+;`#pGq#(l;-jHI;1`h6+>(!ERCEsu!L@Zg%D9kwokbvtHc=bDWFn z7xNLi);D)?b<`p>r!iL9oEKJMO$|P2vaiMI!-N2Jt1kF za2r+_o5caV!oo8}I{O&*$-f}zzqvTQ!$c5ByJCeXekpZ-{3=I#u73pxMbLrAHou89 zNK|odq1J`Kyl00(l$$1U@a4`Ns|pqGm9b0brwDWqK;=?oW(0rb3>A+r6tL^9tLT)wifh0T<0z+ z)A{l>TDU#(#2{yw@Gc>z!*n3~QA$OoUgo5h=RaI!nRkpI`j zpX~k-&8uY$V}0Jm;^X($S9GqO*{=&1K|gvgii~q0))18T`n&`&XH+~~r}07ld~qKw z?;0p{qk94@JG$7a`&%T$5VkxPCzl>)Xw6}-kij>g0!ZL9>3u!;QEO+OFGQ@8M_qr&m4-HOR!>vFU8eFS>sivmn4 z_h9_Wq^lDgF3-^eKSzmsRj1Qs(4({waaK-!Qy*>gd;lWkbdAeq%sLv#UWAA9E2lSDL30+DnC_ z;dalbfPXx$>y4`nB4VlSmo^4PD)UI1B?U{Nl;u~7gL73b?7@YGeP@V_B?XrZAdQ$r zvMTizoDv=*k6`m6Z3;P`zQ1iLx!X8ZNlB;2_`K;^{!H#xmQ5!Yhlq~eK^+6SNmpMq zisH(wq$br?h^k&$)AS){ue3ew*>t#;zlb5p(*8Q*z8Gy1t(oVORa^2^ta!)mK3mut z+OB1@*W{c`ork%5l+jO`$?h%Lmhx}!Y5U%`p00($KhbQW!)+R}p_WJ?sX!n=rcuD=;^ zZ{5ntCgNHey39_KiZn1kDre#5rspL3e~mcP)ka|?nb95}&?HOvaeNJP$s=~vT}MG+ zrRSxTR>_q;$_(*+R#!gDxpQLWZaOQr#-aH0xW#cS%xy4JDW1bdjhAVt1Y#s1yRF3NHLv%YgW;J0EgSgvL`}vEREm%_;EVDD>8(#|5X`gID{F}IzTbrNDWvORz%vp^m4ywad z=PJJdM4=CASEGH2W+Xa9GWKd2bgn}0u^z@35oT5B__91yLg-nFN#t=j@Mn0dM9cEacL3VmbP#|Zn(Mj90&CEOD2GQTqGQekS+1%=c8f)6(A{ z(qpM-#seesW#qPZ&9^$j@xtG)gM4cBOd^>kh?8nC&rAoCWrZdPFf(pTF`R1tMBG}B zMg^9bDoT;$59B)TGL>_`0-_rnBIAyzsIQY$2=6IEzah?3jw?lym$S?svC2Dvbp+7dr(UaOfnnFMdT78lpfAj+l6TJ~z}v;{)QK9x=x9AAKw zf<V)uxKh+2chUDi!4Bq(0()icX6z2m+N4WM$cCwhGDHU^* z&|5(|n22)zh_r63Uq zE%YuT9fA-Dgcg-f=z+u#lAN&i-lyzu?DOl4@BEm_nD3u=&UfC=bwA~et+ko(fztb{X;o${yuYLRXaaV3BtUc!b@j`By8S)h4&n$9p1iY?WUFYE`Lmk|8|ATuk z^vE0p;o&(7-Me_FJf)uS@JQXcVSN4e6W5hVz3Ag+V_!DrU0t-g_EEkBmo8K+;IBGH zDa##^*-xr_9U1>U3mVLKR7l{65zm|RnWHJuaj(F#Gsm8P|0P!;BXLjA@5{a_{{80i zP1RWiON*#Q)KYrZ)O$3?=JaTK5qdSh08v+0hskcu@ zP8*OPIYFuzA;ZtP-Ci=&q8;MV4-~G1Pk(S84^!xWrR_1}*4kj*)3;XAGuKkRxy?#t zSH@b6ar}4v&D>VLt>cTG<1j%Cnk?r)>@7rOLx@AuS=WS~xsB!T&B1=o@%1?_jGyg3 zoQU{3H{v=TMmpV)EdK65`}G}c>pqKdhv}uL98N>RMtj@UvEyZypqg0f)sz@Lb->&D z(#t8VHL+`NGX!*E{R$+@n+p8dyG4hpihCwMAcf83-#)$80J*8P+aD?#(;3@)g7MH- zdYUCQ>pDLD7+PFcqFOd!6`oY~n4NVb5oJH?5f~ic(|F&t_$pEX5H_AJ5Dj%*t;{_A zN%Bd9n>uHaOkq(m=jPSA!#+fZtCi=rlICjVk!~{0)&W^s7qd9dv8!@836HyZlen+B zFwm8UMXpkJ*!0yvdD!G7sd2cZQuCAsp5@s#=s}Ck$2|uZB$2K56NsYHi2=c6CIu5^pIt8ce_dGF6&~K z>bXc(czu?Q3FdUAhCHPRRYCO;)Rt%oKlYooc6Qm~Cxj7W5F(OD|7}7Ho(OxXraa`M zQ}3gNZ5`Qesksk-exs%-=rMlJL%2|Rjmk?W)8fB^(xU26z`wVRMxUK^zBW`+Lwz&3oj4=yPf?U$FtGl|yK7b`B?84z`p^m;P&aS+h3 zh<=)0sh3S`v|E==(c$SkU9Wvr6+HU<1cUF&(QAWe4Od_I9AOY+vU=NpbVC~<-m-by zLPf2JZIS~_Rks;irI4FiDfLmgh(9Rk>yJz6f#rv_9frYn;p4wwM8Bd>csL(+ijLjN zeKDEV`!iFuoM6+OH}nzBx_e?q2sN~|jnnb1c zMdfHG*KJs*3?)%5rx|%JI}K*B`c9O%`i4RIzA<~6X;NDXTP-iC5_Jb|ZO7G*2{cY4 zItQo{n6ok}zY~0q1-|dU}7a-FbOv*Urw6 z);t~`UVCEj=KYerUu^#iCsMVyqf#UA|H`|lpUey`FvZJrqcFSwi1uJT$2&i=4 zivr`atoK!FOu7_lg#G*0gO^Ab=U#JQcxUiHKP~xnNaVF$Oi^SjIZtbYv~yO<$DlE5A`o)(@7Vu2b>7rpTqIy7Y0+Kfie}W zd~611Q#a!)`Hv)0(_{Q{a-WEzM%ZXQCkG@&IMocLXzUI~%k{pV#h3(sLBPqJbX7Am zFslFEH4WX1qJ%775B&?KB|4EqHnvWY-W&Si9QgFk+D{65?yl93->D=@3_ZKzuBR7E zAs5jL$hxAtoF6~C;5o;DqOJYivL-{V$Jn15u3oCtcTBXRs?0zn+h~16#VOk;^+&X!zgaM*8ySHtLVo=BZ&Pa@P2_i}G1M!NpD`ZRJtQl=NX395u4kTY zf*RL73QMb29w8zw%f2d*1e>RaYL1}%OX8~b56r<6L_KJiB1D%L`m(=M?c`QWiITMJ zr#p|$L{7XY1+W|6;dBwRvB4E3FC&U`NKNb|PPJ_BL_^GJ=L&`4%rc#8$dMcAag5?4 zRbNMnGpZxbA7YPX}sc?_%b5NJIN1n&bKD6}PCg z;g{UU7!(a!#bWW*X(K^YJzaFN(Bh$RWRnKR{>;~a;&i=5M}4ppUWNV)G}_Mi<$S9- z0iTe;Po<(l)n=!(+4Nw1zTa7Fajyj9(w*w`C><sr;2;m}pd^+I%BP&u=42$MYK-l5w*x791hyQn(aj=fRivX9VUn z7QNLksk=6dT*b>WhO@Sn5VWoDYPpv6FETd!=ec5f(_Qu1$^Oll*05}3G4tm+l~PX9 z5K1D_DjRFlR|B^aVmKchZQ}c7^9|C8n(+#+TD~8Ezd?@^*XsR%Z^b35)(H|DXN78Q zX&+WP@1o<%CE?Q#pUi(m|3m zEJ<)3eVf#hBUv|04jh>kjD{36M4f{|H7KbqgpHL(2R! zC<@rDJ1m@MnAG^$m8zJys<;I8@~zO}A>C+sDNz)+WD&1Kz zHsgd)XINUfZ%Ny6h@%E|OX!j~`7rC}75d%l1Kn1j-WL}R^1L(NvuiBzj5?3;-{q9F zG{1q|{!X4FLVTM_gMo))<{BpD>>ciKHcAp;_GXqr;V0ULzPYk-64g#0aEn@*(FS`6Qb(_twi>ESlMPB(X0NdF5Fu`xe_gKf* z)*Z2!ypL1>UX^kiZvkhPW~$QALBHLFl`K2HL`*@Yu&a`i7Q5?J~(SiR%OK0Wy#@;#%myq zM0c-mWx4hEvCujf6)a->VX+j>+KV6O`7TR99T@Ktl<=ug-AeQ4&&rF){Z7l@^(kA= zswTWv&u74P9uREbqbNVTwfK^uDZB2ehYi^2ISkHj`$wv+L-QkuU4jd}PF=O-m#P1x z{VbmokL0JcZ9??m4yhTxd>pd3ITQ`6YeF2A@fZDANKa2ZW>P3rdsZRgsD6;+?Q zOeu64S)rCv;>Aaie=bE~2{-#?5@B`umLs6Y^U2u5APjnwepxINcDLkfTINRfwM~aN zkuIOE6S;>Y{(r_H@~Sb>hhDxHSFXXv#6@RT7cBwYOt^|Q>;#%es36^^qGd50xD^N5h9dQ6CZ+j^}To^+kKxL)PB ziX}+y|Bo@DiqoOo&Ffmiaw3ONLIGg3>wPeqXtbXjKfc9MSM~ub}zgC{+Q1D zP7fMbd2FGSBQS*04U(o**kxAV)Bq>RQz}+LJ@b-;n~kI%u2eqsHrVS@pw>8lO7P&k zwKS#{(Fw33F5=Il&m%`?`QwmtkzmDQ<>{kb8r1!1&XTL^7MmPqLd{27MdHLF0?wPm zS#dDH+<#W=QT>JC*++%dU)XlHfM9fNm`FO7VC7MVf2&&phIay1lA2LvKd=PiM2llQ z>^+uXl6QF%GRP3I4|DPL@Y{cb=4g~-7-4kW&tNT`Fb8UA^M!*GB9W2tpHfBmvo+@8Jo5i#a@3O zUi8;%In2dN9=!MB_vrm*_&v8idoB8JrJ1YAPRxga%<2q*?>cGEH5OGG^-4U?^}R>%C#rWrB289(CG zsRxR(_Y%%w=Dp-kyr6Pxo4F?E4xEFMrR(@2*0NKPc>WspYUDNu1F7xSq*Q=LZ|fIl zomY4Uy(`P=4Palkp>h~xCKyFh6M!}&E*_oD?ib3>J__eXh&k}v<0Bhq_N;}=-xDFOGN(Qnbw^US zUE+o6{ai&CIEt7k6?!Z?}d$p%5$fRNuA|50KsYjz}H*;3~}g~RI@{da1hp)Nzw zeCk+aZa_5ZbK!o{*JE!5X10QItElZf-^IBL26FbkBHYT|^xrD?&=ZT=ZKf0QM_&tb zk!IN}X2n&X)IVv~uZ7e#YP8|!(rm_TWSG8F6sV?G{}hgz=wT%-84d_f2^u z9~ft?ohn0ta^?Pjq_TZS>|a=srD&$uoQ_LWKDON2U)vXV6Oe1^pb*#z@Mrt>7EEYs zTNw}+L1e)~6=ALdSB-;?nq#gE_FL|m3xD4)G>$8^vmlH`9PD(51vg~{qXU$Th(2y) zFuMIR7kOd{i?7e1oAHwDyq-r;N$%%!vNTV>*S4ctIf-uisa*yjE zZO#ykrfGxDQ7Q_W%biKMrw=z`Y5S{Cr+KmL{0bOK^#6Zg%`bPF)oApu-Yi(DWKcS+!^GdQQqmFRs|$KqgN zM0$&o#a^PM8=omK=o7Q0k+_FTgYy3+e(uq39Q~)_<6vVW+91qhOD;HGf&u5u=1U+^ z&5P=1T)0Wnyx6f@@{VOq@BGJ|f$rN_ZZ5y8pUgT|7|WGWO*0pGPum=qdZzAb$R69% z^6(xAhbH#cKXWB+t!DO6H}DV-oU8f&XxjgOx>f)E{jvYYJAQLxvr)~gevS%`+jgt@ zyQ_4nIYE#-k*vqj9QwNhML}Pa*z1uAoB0h^1){2479M!F(o^aEYF$Mqycc%&hprVz z=rzct_Dz$x0}zdxb0KE+o2@YfHbZ^E2c24l+9u`oj3U3kG|y9U7K~_kZGE-Di(I|4 zu{UqPb&%wa6feCFdImqVV1Ar8lv_ml{m!NWPF{!(7#m0nk5FblppN|{^!n-sm8@*2 zr&zMIpCspbF-?`TH#a=M<4y87p`g+a+DOKdr<>4a^O>Tv;8*i zHse|WGvkJyRxhc_X+Ca8NZdlIkN{_G5s=H_{!N!*%=(Bs4nX1U3?h_|t6Z!2cAnv+|Iuv*=%=4wm+l{Eal=l*v* z)+WhiNM#A}*$sL%_;LBcG0})pS~jJn>9~ICno6xGO$}EyP3$Qygsivwx^!tP@ZYTo_aQ$d5S zyxV7RcwP^~C9mI~NRQvk)?|;ZK8cMFn2Vz$Qt9lDAt%Na?Q@|Qklr6!-usQsJIp9U zmer?_M}rf(Vz;0(j|^3zh;yqInUk6wH={}pQhtquvh1p#G5c#DBdRYQaC)krI;>cV z5X(pDYnAV3qVC)T!dC8J=i^`jDg9lG~S}l-VIL z5&c|2DVkhQZ+L65nTLXh)qExNe@<1>8=HWaKcoAT7sKY`xOu;oAqArgr(H((;MEFO z-prh2+N8~eiGb$w)LHawk8KAIvUKK~5h7u-PiE2G0&V4=ydiOF@sqa%-~;)Wt$)yF z%NZIJu}G8{Sb37O33ek|)Y4bh z3HL>cm5<#5y4ZwY#H7fAkqhpolECWKmen}pDUNDuzjc~auOj_naNr`XH*D~F_PnWL z-Q)CqM8+qb1U?NS#2lEZ#NBl^n}kFl5}jNhxAvbMv>LfNeEiR{EFA2lJQ&1K-(f0jz5%VyJ#(^m%#eRitgS`7 z|2EPwme!2eSpt6AzIF%5yX_Z=g^bQ~3;A&Wuv-R#?$vGV7}q-Sv5pkbthf=6iki4| uEn^V3IET~b`7-g3W(&8*ygtL>eF%Kpf64E-CU@%2bHl{ixY+RC^Zx Int -> Int -> Bool -isCongruent a b d = a `mod` d == b `mod` d +isCongruent a b d = a `mod` d + 1 == b `mod` d filterByPredicate :: (a -> Bool) -> [a] -> [a]