aoc22

2022 Advent of Code
git clone https://git.parazyd.org/aoc22
Log | Files | Refs

commit 54494bb55617dcfd6aaa8c144fdabcfbb7e0374a
parent 817340456f1f55c470dd29d382901c57f368df03
Author: parazyd <parazyd@dyne.org>
Date:   Sat,  3 Dec 2022 11:22:56 +0100

Day 3

Diffstat:
A03/01.sh | 29+++++++++++++++++++++++++++++
A03/02.sh | 31+++++++++++++++++++++++++++++++
A03/input | 300+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 360 insertions(+), 0 deletions(-)

diff --git a/03/01.sh b/03/01.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +priority() { + case "$1" in + [a-z]) python -c "print(ord('$1') - 96)" ;; + [A-Z]) python -c "print(ord('$1') - 38)" ;; + esac +} + +answer=0 + +while read -r line; do + first="$(echo "$line" | awk '{print substr($0,1,length/2);}')" + secnd="$(echo "$line" | awk '{print substr($0,length/2+1);}')" + + ffd="$(mktemp)" + sfd="$(mktemp)" + + printf "%s" "$first" | fold -w1 | sort -u > "$ffd" + printf "%s" "$secnd" | fold -w1 | sort -u > "$sfd" + + common="$(comm -12 "$ffd" "$sfd")" + prio="$(priority "$common")" + answer="$(( answer + prio ))" + + rm -f "$ffd" "$sfd" +done + +echo "$answer" diff --git a/03/02.sh b/03/02.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +priority() { + case "$1" in + [a-z]) python -c "print(ord('$1') - 96)" ;; + [A-Z]) python -c "print(ord('$1') - 38)" ;; + esac +} + +answer=0 + +while read -r line0; read -r line1; read -r line2; do + ffd="$(mktemp)" + sfd="$(mktemp)" + tfd="$(mktemp)" + tmp="$(mktemp)" + + echo "$line0" | fold -w1 | sort -u > "$ffd" + echo "$line1" | fold -w1 | sort -u > "$sfd" + echo "$line2" | fold -w1 | sort -u > "$tfd" + + comm -12 "$ffd" "$sfd" | sort -u > "$tmp" + + prio="$(priority "$(comm -12 "$tmp" "$tfd")")" + + answer="$(( answer + prio ))" + + rm -f "$ffd" "$sfd" "$tfd" "$tmp" +done + +echo "$answer" diff --git a/03/input b/03/input @@ -0,0 +1,300 @@ +tdltdtmhlRNCBcwmHr +WDzDPnvvGnsWLWpGJJHRzCCRZNBRrRwMNwHH +DsDsQnJDnWsJnJvrQDPJddgShFQhjljqhggbdbbt +LqvbLLTdvlfdqTLtbvDSRHPhHmRSnndHnHRM +jswsGgzwsNgNWNwGJzVrgSHnhHHDmShmmGShnMDPRn +JMNWzVwMpjpLpTfTLLTf +HnQBjMjPQmRMmJCmBPGSFTSVWcNNGQQGGGTV +dgstqdtsbwrzddvrvdwqzhrWSFllDSWGDWFGDNsDDWSTHT +gpqZwwzHZhwzMJBmfZnnJLCL +PJHbTPCmLdTtLtRtBvzBrWffft +hnpTqhMncpFDppDqqNVFVvWzvNWNvfBfzs +GwZccTpgnDSDDZQdCZbbClbCmm +bnZnRZZZRlpGBbfRJjBbMfhCHwfsHShschMsHCww +LqVtqVmtLQvVqqLTFFvLDMhDMpMhwMSLDhsDCH +mFQWtNggVQQgmdgpJGpnnZJjbWGBRZ +GsdGrGqvLZqWvWWdrPLdfvsvSJDDcQQhcTbFbTcCJLSJShcJ +wmBlnjwjgHSSDQjfDDfF +wggpmwmwNnMlHRpttRHmlPfWzdGvvvzrZWVvMrPvvZ +jvlvTvTvTvcqTdZrdnGlVfNgspslpfGGnM +BWQhQzQwmhwWHbWCSRMRgjpjVDDRgDgVffgV +zLHQSBWmLcjdPjLLLZ +BjjLnRzBnRmTSTBhpBmCjnLqNPGGVNZgNgLGddZVNVdf +wDDJJQJlJtHrlwFFPNGGfZbbbglgfPSf +tFQssvcDJtJcFcvwHtBmnSCvRmzzhpSCWvmC +GvPVvVHPgzPMcFvDHssdpCpsnpHnsj +gmhmSRZBJTTTmSBZhhrqSBLRCnsBjjnbjBdbdbbdnbjwwBsj +WlrgrRgJSgZSJJJTZRtvVzvGtfzcVFcMzlGM +QSZwwsBZZwjsndFsMPHLzTLLLz +tpJfgHghmvqpNWrrTMrMMRzPrMPJ +ghgghmlvmgNWgmWwBQcbGGSclGHjjb +lhlnWGGFWZhDfgFfWDfrhgrRwcccqcZQBQMwcqJMTMRMqJ +jVdpSLPVSjtNdjdPtptzLNPPzcBzwCQrCcTBTRqwwqMCJTcC +PNHdpPLHtHtjdLghnHWvrvnFlFnf +qttvqPdCtLrqRgfpgpMgSfSWvM +TJccnTDjjDlDhSpfHdhpTpZf +wldwmJdwmsstCsLzBsBCGP +ddpCGpGpnndnpWqdVVpDGfDGFzSsFSZzBJShJsVtTstssrsr +jbvPLwFjztJBtvJz +wjggcgPFLlLwPFNwHmNPQqDRQfCRGCGqnpcRqQnn +PmmGhLLcgZbPQnqH +DlVsvvrvvvrsDJLRDvvCHbpBqpnbQnggbWZbggVW +vJRTSSRJClCCDwTJRfSfCsGzMLmGmzmjGcfmdFNNNtfh +vcmmMvfctfjLjvvRbLdHSnQSgQFnghSgQQSSjT +WzVbszVNHnTsQFgZ +pVlGlzrbDNrDrPpJNNJpVdBDvLdqvvvqqdBqcfvLdq +gfzgzPDVZQDDSqBdtFfdFdvqBB +MrwmTcJJsMwNmJdvFqdFGGtvvsGt +HMmTTwcJqcrTHrjjczhZQgzghgQHhnhhHh +BffBVgjPwPPPJwBBVJfDDsgrdZdcZqlcSnSncRNzHzZljNqq +CmWFbCmFvMtLLQCTbbbLtRqdSZHcdnqqNqNTRlnqNH +MpthtSMvFbvWPVDrsDgpPggD +VVRntNwmlvhGccPNfS +QZcgZppdrZQTzrBgCbrbdQrBvjLssPjSssMsfSLhTPPGvLTP +ZZcpJZHpgCgpppdrJRtVJFqVFVDRWJmtVq +dpdhtpjHtnpFRHdjRnwspMQmqpqqmVqmTVJQMmff +gSCcBCBCcgwDBLSvcLQQVTMmfmMJDqfTrrVV +gSwPzLBbNCbFnHHjhthh +dLNrRmqLqRgCNNrCJrSqqSQgjDWnGpGjDjspnlslGHnnjsQj +vVTzZFVttVBMFbFfffVVmVtHWpDspjHWWWbGjjjDsjWllW +hwFFwztTzvZmBzVfqhSSNPRPPCRPRJCr +BjfcmzCCTtNBNjcTDWwzPzDMMQPDPMws +lGpJFHnlSlnZbGnQQSBLwSPPLMsDQh +JFHHpbnZbGbZgvTmqfNgqCcvjB +ShhpqjhhVZmHhSJSSnLzdNRNTjLwNTNTzv +QffRWRrMGwLfgNcNgc +GQrQDPRBlGlsGrWtrtPDPbWpqhZqSqJJpHZSVhVhhmmBZF +ZlVVDTtTrzFDrFfB +NNGbJNNNNmpWBNbNWmjMfdjmFfPdqFMrMj +NQvRNvSRHSQBgRGQJJQQHTtcVLlVcTwVTllnRsttZs +fjsDhJsVDcVJVljFDqLqFlnnCFbzbCCCZCzCtCZrnCCM +HwQNrHWNPGPHMZCvMCbzzvHZ +dBWwWPPGrGwBlcjDlcjcjldL +NCLMHJZqCHHHMFlNBZtTZRvtStZdcRbc +wDrnpbswVgsrsWmGpDpfpBQtRSTmdvBjTjtBScctRm +gwzgbGDgpgFJMzlzPJCC +SpnfPVqFnGfPGggqfGbjZZrtWrlRlbHpZjRZ +mmJmdJBsBJsDwhJBQhTZtzdRltrrRlrtHjjl +NBscQhmsmmQLLwLmhhwmcSSGfnfSFCSMCPfHCMqG +hvVnPwZwVzQrhrVhPPPrpQVDBgMMlSTLZsgdDTSTdsssLd +RvFCqCGfbFCRbRmSBMMsLBgdFDSgdL +cRGjRWbWjvtPvrQcnr +LzLNzhpcRRcTmNDzRhTPDjMvMnVlMgjngSMrMzrQQr +tfbWfWcWddFcGFwfswFFFCrjjvlVbrQjSglSQMjgvlgl +FHWGCHCCGcwfswqHdHqwwmPqRJDpZZNRJPRPPTTJNR +gLHLLhTjZVMwMRSZZS +GdqdtlPvnQPPnsRw +tNNGvdtbdmJmHRTRJrFr +QjjdjGDvdjwpZsssvsPZFZll +mTWWMWzbPHmZwHHw +JwTbtBztMVLDSpjVtc +SZSBWtBSwnTDFSDD +CsrJWmmPrPQmpzsPmssssvnTFhvTnPhnFDFfDFnwqF +CCCCzprgrJJCgmVcpJmWLQZddHlGbMbdZMbtZNNcHHBt +fgqqrZLqZqFzFFWzZzgPPbnMNNNvQnpQnQbNbpcHNP +SdwdmwCClCCwldhRSmsvpbncjQbNNQMtjQnMvS +mDlwhMRlCwDCTVwVJRdGgfzLLzzGzGFWqGqfGD +CnVvCqvnRqHVqnWcMFnLmLnMMm +ZrdzbzbrdwtQdSfdcmmFMBWFNFWLwNNp +QFrQtJDdSZdDVHlVCPssJRll +qMpGGmVNHMGVjRJJGfRgQtjQ +flsTZCwDwWcZZPCrPZZWgLLjdJJQSJTQFSgQJJRt +ZcChshwZCDvlCZCsPHMHzqNzBmMfmBBMfh +wCtZtzCnPldZSdZp +VMspbMHspbshbPBLFsdcsLBdLs +pRrQHpNbQbrqRqJfnwfwzR +DPPcDlPwNdNRJsccpgvwBBvqGGQtqrCjwr +fMSVrMWmLZqHQgLggCHH +mZZWVTbTWWfnMWrbmznfZfsPNcdsdpRcNJplbJNcNRNl +ztlNSLhplhBHwwBBMBtv +DnVVfcGbVnGRZGgvPMpHBpCmJMDP +GnZdZZnbdpVcQjQQFjjqrlNWlrsNrFNLLsWqSF +bJQgDRfjDbJbRMTgSSPzPHCNhzQHHszz +wmnwFmDcwFGvpvwGnSWPNPWzPHhhcWSCNz +GpDtmvrdGvvBmZrLTjZRTqTjblbMfL +gBhZmtHhhhwTJqwDFqGGqPWqDb +rRLRVTrjCrCVdFjMbvGPPGDPvW +LSsVdrRNRCCffCSllQNBTNgNlmhHBJ +lCzCCDMDlzzlZtttWDnDCZPbVGLhSmSLGbSgGPgVZm +sBcNsqTQwRQRrBgbgSbPTLVSnLmV +wcqrjQsBBjdCzjdnCv +ZgHVtMQVVgvQjjtzdzfdFHppfmzwpz +CsBrBLLJSrsRCvnGvfRdvF +DbBJTJDLrJDqqqrrhJsJqVWthWlZZlZjMPZltvtMjZ +bsHlrwlnwwQJsqmJnqsPSLzTLpPGPSgPPPWmLT +fdvBtpMDfpCCfBcCcCBtDfFSgTMTGSTRPLgPWGzGgVgLVz +NDcjcDZjBCdvvjdvhlbJnprjnnbhwrqn +zRpLMMqjgMggqLDqDRVGNGdhGtvGGnvGnrznGB +VScbcZPJZWZlZbbHSJQJGtrGvtmdBBGmdGBrdn +cbPsZcPCcWfCZPcPQslljpDqwfqVgRLMTRjwVqLM +QtRWhjtsbttQtnbbQvsrRBfDNdMGBLZLVVNVGNLGWd +JwllwllJmCwzPFSJzwwTBZLDLdBBBPLZZBVTTL +ZwFSSmpwzScFSmggHQjbQvjvscQbrtnjbs +WMLWnSHSMnHjPVMVMVVJGM +zQzRcmttdftrtrdZZRzDtPZppphsVbjGbQbJTTsCbsjppG +dmrDtqfzrmZtqDvdfmZmtdqzLNlgnwgWLNvwFWgWWPNFSFNN +hvSrMwqljjBHvqhHsHshqnrZcCCpfCZZCCZZCcCfCZ +QDVTRFWlmDnpLnnPTPCZ +DVQVtmQRWRRGFVRWVvlwdShBvvSqvtjMdd +pnMQbbnDQMNMDQsnTplNTDvqPGHZGcvqmCqvmqZqmlqP +dwJdBBwdJJwLJBLSRJczWmHPzqWzzHGmvPRHGG +LrdFgSSLBsDMFFcbQb +NSnwvSPPVNnPTLVpRvVvRnqhhQQzHhLbzlqcqHzmHHqh +DFMMfBffgZJtFsJgwdDHGHHzzmqhhHQzDQGhcH +dMrZMMgFfFtZJZfBWMfVPNwPpNwPVSNVjjVWpN +dNlLSvLSdNlhphlhlWfVFFbZHqjjHHvqFZQHCQ +BcrTcJfRMRmrcbqcQgcHVCVF +fBzTJJRmfPPmnppdNwhllwlz +GqfSSmPSFwSCmFBwfQfQBfGnggLrhTrJBDDnrddsJDdLTL +cHHvVtptbzbrTQJTggnTQv +QRVbbQWbpZbVQVGfRmwfFwmjflPP +zzBQJmzQPPlddpJWlzzfdpfjvLvgmvFggMFGDVvLGHVFvvtM +CCSTrCncrhcCcwhRnCqCttFDvMFvtWtVHvFhvLVv +wCTNCSRnbnpWzlBpJspN +PTzTPlrrfrbzmftTTrrjPMsNNFZQgQHVgMtNVFMgFF +DpGBcpvdZhccdGJhqDBphZhdVRQVQQVsqFwMRwFgFNHMHwQQ +SGcLGpdGnBhDJppSDZlPTTmLrmbTLTmrZL +PzmhTqSzdDGcDhzdJDPBmJnrdVppNVVtgttMVrNnMMnV +blbQbWLvlWffCjlGCWwsnLpnpMggnpspnsrg +fQRbCZRfFZvZRQHRvHjmGmTFPcBmDhBGTzmGqS +JJVJfgJfVDdfDDcpTBgdwQMQZQRZQZwmlmWwQGcm +ttzzjjzSqPzqtqzFrPvzwNwMlMRNnnwnllSmmmQG +FCvvChhsRVhhJBdB +rbQZdRzBFTBzZZcclntHnlfJlrNgngfS +PPqGjpPGqpmDmDwqPDVnlNpnJfnnnglJCHlNfC +MMhhjMwwPvZNZTvLTZdL +ZZGgVgwfQNVNLfZsPqRsVTDspTpsqs +jdjdSbmMdMBSvMgBcWpsRpTWDHWTvRPs +httmBMhbBBjCdzShfGzJlnQLlgGGZwww +gLSLMCbVSGRPdTwtjtVfdt +TpzJpFFqmzpscslBtddjlwjjDhhldhvP +WpsTmJpHssqnHMGLnGSgbH +RRBCpJJplCchWJJHCHCvjdpMzFzrNvVgFrrMzz +btLLPGSQctnZnPwwSjgZjjjNNrvMvVrrjV +tmLPGmnbnsLLwqQPSwqGbwDfHlHWBWlCsffshDCBfWcJ +GhDFZFGZzzbCdZbZVlfv +bPNWSbSJSWSJPBBLLqClCltlwlNmllwvCQfC +PgPLqgqpWcWJJcnqJccccGrjbHhDRGMDGTDbpRhbFF +VJRffrVJvDzcRcFFbpSlQLHlvtlstbbt +NmNqPhPqPZhsQLQwSRpH +dWRnRdBmMBWgjCgVGjFcCDzf +nhhQFDmVmDGhmFpgCgBpcpHqncCt +fLLZbljhjjscCggBCLCL +PhMRhNWddWNjfRdPRfWNfVmvQFVQzVMJJDJGrmQGrQ +PNQtsHvZtsQgQLPsPtHZbfzRffRzMMqRqpzbfqng +jDwCmhrDlhBhBldrzJMmfFFbSfFnqpFb +jdljDrDrTBBnGVNcGcQLQLQPQL +MjzrjZvWQRHtjQdS +JFJlDJbcbvtRQmQbQQdf +JqNDBVNpqCBqDBCBVDcNVBqNMWgGZTPZgCrPzzvghPwrwZgG +gzggttLNDFztFCNWzrLttmFddSjsdJsgZVSsJjwjgbgZVG +pPPcqpnqHMpcRbhhMMpThvnwZSjZvdwZvwdZSBvGZSGVZZ +ThcPlHbbPHRnlRTHnMhpfltrNLWzCWWCztzffQLLDmDN +SlNJRpCGTmdFFDcbqJZFFJ +wwnWPHgsLPlVVfssLcZcjjzrDqcFzcgchZ +WVvQHQPfLwSGSvCRlNSd +wWnWcpWDcwHcRdJQTdmNsT +hprqBSvZNjFdFjsq +fSfpvhLBfltMCLzWzC +fdPfPwPmdmLZfNWjWszQNjjN +MBRSBBRBChMRQWhlmVWNsmzm +FvRcSrcRrtvrRrvrrrmcwGwLnTHHqGtwZwHdGPHP +tFPlJcDJdvLZvFlcvlHtQRthbgQjrhsgQgNr +qCnpGMnTTVwCCMnqwWfpChQHRbrgQjsQmmfrrHgHrH +GMnTSBnVTnBGbLlDDvFBLDbF +rJhPGdLSWnnrdqLhPPWGjcZZffjcgNdgNgRcNfwf +mHsDTQlsQBvWspTHzpmCTpcZgwZjZfZNRFwRjRRNMHjZ +vCzDDQsDDvbllWTllCDCCTSLbqSPVqSnJLGSqrPLtVnP +sSRdHHHSRhjShVHWVFJdQPNFpGCrQCCfflqlPvfN +gLztmctMwnBtTzMppBCCrGfQlQQqBN +bbbncfzLmmmnnZLgHZWjhsjVJjHRVSdR +bRgwCHfgfCCttRbdRLHzzGDnDnLBhmBGzvmFZD +rssprQlqlTQGNPcJGVsTBDmWzBnPnhWBvZZDBvDm +MQQTJTNGNcqrNwMwwHRdRbdgbj +sBnnsDLDBCsLTngnZLcdmppCdmpRJwJJQdMRMP +NlrTblbNNbwRPpjjbPdJ +GlztrhvfGqltqzWrcZgFZVSWWSTSncnL +FLJqLFRjzFqzJddlLfNNCjPrGSHCPHNVNVSH +TWTpngssgcPgNGPc +pGMDZpnZBMDsTTTnTsQWWZTRlbvdfZlLflZzJfdqvdRbqf +ClsJpCgsppMbFFFbHp +PvQRPqQPvRdwLNZLZqqwGPPPNTbjMcFcfHjHcMNfBNHrcDDM +GLRnzqzdRqwdZnLLPqqZdQGsVtsnlWCVVWsgtWSSVVhFWt +LNLSJjQDLlzRGwTTzQfT +WbZqchqMZqZWbmdZbhTrvPmGvwfHRHGTHRwH +dcfChsWWZgbfWdhCbgDNFBBDjFNBjjVNpD +HjCLsHJHCjnNVHdCnHtJdtQQgQDhFGFDLcwFDBFMMDBT +vWrSWSbSrRqmzlWlQgRQQTcRMgMTMFwT +bzrpWWzbqrpnZsJwZVpC +FhlfrNdTrtFdtrrrfcZBMdpZcHHHZMcccv +PmbjVDjwQbbjjVpDDvpzBZSSMsvG +jmbVjPVWqVmgJgjmmPPQjmqlCMlftnftnNlTTLLfNfrJtN +PwMWzqwWbFwznqNQQhffQjJfnhfJ +mmdpgmttDrpgpdmZdHmgNsQVZvJNMQvVJffsZVQf +pdcBrMgDgcgrrHPcFSFzzqzFFbPS +QRJJtSfJtQtjQRnSnNssTNdgsgdwddRWcm +qHMDhPBqbqZVzbddTcVwSmNWNVcc +BFCZbqPbHBPMhCljvQSvGCCpnj +HSzHNHlNHmBSHSBFrFFgBHVVqbQLTTcLtqDsDTBTDcDp +CWQZGCWfMZGqbTbtpLsbWp +GwjhPCRZPQPPCPwmzSNzzzmwzlzSgH +GgTvJbpJGvPVHZZZLW +cwWdnwmWnfwZDBHHNzZBVf +nhjjmshdwmSjsnmwrrQrtbtbgTTgrWth +lFBTtcnlcFlppVpttcFZVhTTDDLCHDSDCjDCMSLZDWdDDSjD +mrfsgMfRRwwPffJfbdDdgWGLGLSDjSSWdC +MmfNPwPzMzlhlFlplV +pRVgVsRzdDVJJJRttZTnnLrGsrGssG +BjMvMBWmjWNWSWrLGZPTHLSLTrZr +LLMWQjfvmljLBRVJfbChfVgJRz +RPDsdnVrVnVzScStjpFSjV +BTLBhMMBpSMsMjZz +hwbBgTsbBbGrGHvGrvDnPH +nzwgtSFRqhDphDwB +CmWCrrmrVPGCDTbpvvvhsZDG +VdNrlWHpmQzSMgJFdRFz +jrhZtczchvvFCTmCDlDMrMDT +bHbLnbbwLnWQpLQgQVpQCTDqdmwqmDqCdDCSlmdd +sgVgglblptsfFthtvR +LctzWvrzTWsvWBfvBzdJQSdQhQQfpDJJmmDD +lMRwjlwlLnZwLHLggQDRGphdFDJQdSdJJQ +CjPZCVCjgPwgWqWLqzzcWsVq +JNWHsPNsJNHBnfnnqfqswcctDTmPCRmmTRtgCdmD +rjGrLrbhGRZVGQhphbbmDgDZMDMwdwDcCMgcDM +zvbLvVpFvjzVhbQjGjHlnflJFlWRqBWWBJBS +NfCMfGNdGqVDhWBvncLllhBgcmgL +bJbRbHHtRtJtZTpSRtsLDLzvcvBmgnnnJlsm +SbbbTRpbQHSbbwHZZTHqfCNMfqFWGNGVQMFGDC +MdzwdMpVwVNMHQMJNcHM +mDtcPDqWnDqgnGJvLHTJHJ +mmjhhRBRBcdZrcdRCz +lvldsNpNGCGgCvCGggDLMbMmrdwnjjZdLLwrjM +HWHtPHSHPBnrmZjBbwwC +tHqWRtfttNlDClvNqs +BTRNQTQTTBFRTglDwzztDgCwLF +jZsMjqgdrrzzSbsDSwsw +jWZrMgMjGdvrWWvrWMfMfZTBHTHQBHBQNpQRfRHNpnRT +GRgFCPhnBBhPwZPnwdbWMJMlcJTLLlTlRT +VQsvVvvVNzqsscTVSLbWTStTJW +spfDNpvsnPCfhBbh +GhWSgWphprhQqqndQd +MvZRjjLcCzwcLnHfdTdgfFHQ +wCczcCgRMwRRNCtjMCtCvlBmVDGslmPpmWWNVGSpWV +PZqgTbTZvFgZbZnFvPlBsVqsGBlGVzGsqVls +MMhSmHHfrfrSrjMNfcjrSRBlBVzGVpVGgGVCGslGNd +rMhQQmDSQMjMtZvPTTnJvtQg +TNGWlqVpmPssnNssWLtRfCLbjCCwPgLjfg +ZSHvHczFBBcHhJHFvhHcSFgrCgLbfgfbwrLTtbjwLwJr +BMzSQzcQznlNQTQsnl +FVWDZDZHpDdtZlqZqZqljfNmsNFPjbbPbPRbFFjm +MJSGMghngrccvSrSzMrsQbbRmjmQmjtNtbfB +CMnvczGChCCwcgtpDDlLLLwVHdlHTZ +fTTzbQzhDwwbCnZnpbgnHncM +mGtBRBFmsRpVGMzpnnGL +lFNqtdsssrRFBltSFRFlSrvfDSWWvwfhhPJPjWfQzPvf +GWWWQlpSZzrQnjQdRHVjdjTRvddddB +ztthMtCmffcChJhChfCJdLddLBBgvqdvBBVBcgdq +smbsmbmChCJmJffPmhNthDtZwnFQZQGpSrGWGQGZpQZzWP +ZDzsjjFLFqsQzFsZqDzBHGtBHpmgdNGmGBtLBG +hbbMMTcWhbwnJPlwWrnPbbVGVNndgpVVHmdNHVBmmmtf +bCTPTclcgRZQZCgs