From c87173ba4c5b9583de316494f11b441dae6b89a3 Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Sat, 3 Dec 2022 20:32:08 +0000 Subject: [PATCH] add solution day 3 in python --- day03/day03-p1.py | 44 +++++++ day03/day03-p2.py | 46 +++++++ day03/input | 300 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 390 insertions(+) create mode 100644 day03/day03-p1.py create mode 100644 day03/day03-p2.py create mode 100644 day03/input diff --git a/day03/day03-p1.py b/day03/day03-p1.py new file mode 100644 index 0000000..37a39b9 --- /dev/null +++ b/day03/day03-p1.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +rucksack_items = [ + "vJrwpWtwJgWrhcsFMMfFFhFp", + "jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL", + "PmmdzqPrVvPwwTWBwg", + "wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn", + "ttgJtRGJQctTZtZT", + "CrZsJsPPZsGzwwsLwLmpwMDw"] + +def item_in_both( items ): + n = len(items) + compartment_1 = items[0:n//2] + compartment_2 = items[n//2:] + extra_item = set(compartment_1).intersection(compartment_2) + return next(iter(extra_item)) + +def item_priority( item ): + if item.isupper(): + return (ord(item) - 38) + else: + return (ord(item) - 96) + +if __name__ == "__main__": + print("Part 1:") + sum = 0 + for items in rucksack_items: + item = item_in_both(items) + priority = item_priority(item) + sum += priority + print("%s (%s)" % (priority, item)) + print("the sum of these is %s" % sum) + + file = open("input","r") + lines = file.readlines() + sum = 0 + for line in lines: + item = item_in_both(line) + priority = item_priority(item) + sum += priority + print("Sum of the priorities is %s" % sum) + + print("Part 2") + \ No newline at end of file diff --git a/day03/day03-p2.py b/day03/day03-p2.py new file mode 100644 index 0000000..380468d --- /dev/null +++ b/day03/day03-p2.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 + +rucksack_items = [ + "vJrwpWtwJgWrhcsFMMfFFhFp", + "jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL", + "PmmdzqPrVvPwwTWBwg", + "wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn", + "ttgJtRGJQctTZtZT", + "CrZsJsPPZsGzwwsLwLmpwMDw" ] + +def groups_badge ( items ): + badge_item = set(items[0]).intersection(items[1], items[2]) + return next(iter(badge_item)) + +def item_priority( item ): + if item.isupper(): + return (ord(item) - 38) + else: + return (ord(item) - 96) + + +if __name__ == "__main__": + print("Part 2") + index = 0 + rl = len(rucksack_items) + sum = 0 + while ( index < rl): + badge = (groups_badge(rucksack_items[index:(index+3)])) + badge_priority = item_priority(badge) + sum += badge_priority + print("%s has priority %s" % (badge, badge_priority)) + index += 3 + print("Sum of the priorities is %s" % sum) + + file = open("input","r") + lines = file.readlines() + index = 0 + rl = len(lines) + sum = 0 + while ( index < rl): + three_lines = list(map(str.strip, lines[index:(index+3)])) + badge = groups_badge(three_lines) + badge_priority = item_priority(badge) + sum += badge_priority + index += 3 + print("Sum of the priorities is %s" % sum) diff --git a/day03/input b/day03/input new file mode 100644 index 0000000..1bba85e --- /dev/null +++ b/day03/input @@ -0,0 +1,300 @@ +dWlhclDHdFvDCCDfFq +mGdZBZBwRGjZMFgvTvgtvv +jwwJrzdzGdSbGGnNlzWczHzPHPhn +cczcbMBszhzzDBTBPPPGjtvtlt +LqJLfpwdLnvQLRGQjGtj +gSgnSJJCGSGpGSrwgfhchmmmHzcrHDmbrmMm +bVjstCsSstCLCrbSLnMpdMndcLddcqcpHR +wPZJQJwtBfJZmgBwPTcpTdcnfHMppcGMdG +gmFJzwPJJtszvNhCNC +DmjZDMZWDqGRqqRpHmmRLTTNTPTfCQJQQLJHTClc +FtzfvrfFwVgtzztgBLJNcNlTcTVNNQLN +vgsdbzzrwtqWfWRpZDdZ +rJhqRhLHhdcQqdHqfQGfPGstgGPlWttM +DzCpDDmnNCmBZBZnVBmZzBGPfsbglfNPwgPGPMWsWWft +BZFnlmpBpBzDzVZmhFHFrrrchhRqTdrc +DWCCWFNqdGFdPVcb +HllttQsTRlJlsblrHlhdmPLVcVcTccndLvPLmL +HSlstHgJltghhRrzNBNDzSwMjNZwNb +dzGSHCWSsGVVSdHVHHWWVVDCgJDpQqLTTRJpgmTLRmJTTpTR +BvNjMPZMBtBBMvvNMNttlhLQqCJpLmhTRQqQJgRJLQQg +llNncBlMCwwMnwPZrGsVHzcfFGdHGFGs +JfZhphMMQmFzDTDjSdrQjQ +sqHCbCwBVtbqbCqtrWdjzlSJTlrTSWBn +bHcwbGCGRssNscwtHNbwvmRFvpFFJFvLZMmPLFfv +qBCrzznVmDCmMMDNgrgcrvHHcgbQcW +TTTsdJRTRhhlsgbvbdCFdbWvbQ +JhGGlfRlJsnCMDMqjmfV +rqLLvDLtStDLQhQDQrQhhNdsmWdmmjjnssPnTMnTzfTsWT +ZRFFpgCgppcBcnjTsjTMTfPFMP +GCZpGlwJwBgGHcJhSSHLDDrNqrMtNq +FsPFqsDNZFNnZrcBmWfWWQ +lSnRlRTvgrWtctTmft +SMbGbbvnGlnSDwGqLwNCqNVD +dPQDcBwJJDgDTPgGgQTBVjSsmLhLTrLmjSLpjSLh +MvvZRHtMtbCNvCNCNtNvbRfBSMSrjmLpjnjmVhrVSLsnnmSh +qHZtbBZfRztbHbCzNRHPQgJPJgGgglFPPFqdQD +MsBsVDspRPfPlhMl +zWnCFzHbSCwqNmPSjmGlsmfN +FnHnFbFzsHHCCgzCzbBptVppgvvVgVrpBrJt +pTLntptZjQLfVDjQTDlVJCSWNCPSCCsSNmFlNslm +BBHbqGHHqgwSWSCCWwZWWZ +qRzbhhbzzrHdRRHhRHvzZjfrVTrppVQttDfcQTfp +DHsdHPHHsHMsRmhMZZQBtljgZGtC +NFnCbFznLVJbVrjhQthjGBLZBjGL +wNrfFJJbCpNnfbdwDSDHsvsHmsmH +jLZRjnMMjJhJnvtQbdHfHZbvHQ +mBzwptCWlcFCwsHSTpQfQHQfrpTb +mNltzmsCNmFzGwCBllGRgRgqjgLMnGqjnPjV +ZqqcqmVVtbcBMFfFMcQfgphJ +HLWLDvWjjLwTWzzvGLThQQshQllgJDJgfbffJQ +vHzLvrwwzGzTRGzzLLRPRwRdSVdnBBdSbBSVStbNmnrmZS +TWVVvPSgwWSqcRgRwbRRcqshsfFzzzChTGNHzHhhhCsG +njZrjMLlpmDmGfSGtrNttzCF +ZQBmZdDBZRRPRSBgcb +TpntvdpnZDptnbnTDGtSFSlFmzCzzmSFRjqlZj +MWrNcWRMlgqzMjzq +NPwsPNrBNcVHNNcJHBNBcJwwttDvGVnDptVRtbnTtGvVGtGG +tsbbvvSfnqvzQLLBjfMLdd +gJRmRNmJNchgmmrFJhFgWJQMwBnjwrMBVQwQTBdLdVQj +GcGpGGRGJgqstvpbnCqb +rsHcrbZHBTTtLtNSwwHLLJ +mFqhWVsjsVCjQlNJGMwMlMMGMh +QggzffQRCfgVFWzzCQffqfZpZDcRvTTBTvvZnsdnddcn +bPFMFFBpMlFfMZMpHGNSrNctJcPSSchJchPt +zCgwnmgzQDnQgdWWQRgqSrqLSqSgssLNJhgJ +rQCQQTrRRmDBFfbHBFHZbT +fzfPQsGrrMMjtHtBHs +SwNNDqwhWpVTwbDGGDmwSVhZRZHdbCtgBjCRjMtbBHtRMd +vVTGvVGNvPPvQvfncJ +cwzMJbclHDPqfJQPfq +rrqjjTBrqqBjRCgTjrRjNrsGPDhDFGCfWGfPFfFPGWfD +BZTTSTZgjbSwVptvpq +PPPPJpvpJsJwPHHPsJdTNZRZZZjTFFmRRRNjZd +qbWVfChDCDnVVDGfnSFNNjRLmNfBNLQjLjmBRm +DhFDhbnWCDhGcbJPPwrsrMwrvlvc +lFSDTwHTSwlTNwFFlwNcFFpjLZvZqvnqLPnnWbgngbbncqbZ +rzQfMzRGrRGJCffBMGdGsJZWWnqWVqdPPgNvvVZWPWWn +RJrttBtNQCsNzTpShhHFDwFlth +QNzQFjNFrQPNbmPpqTTDGswWmB +ggHRcSlcCVCSzMVqDGwgqTWpsmqwqG +cltzCZtLClHRRtMZZLQjfNvtrJfhvrddvNNd +mcfWHffBFnQRQlTFdv +wssSLVbbzDVbzbggzSzNshNMnvnljRdvQRlMBjvQdnCj +bhDzVSSJDDJhDLBwtbDzzbbWppfpcmWGmprqqGtqprcHPp +rpVFrZpgHWSZrFPqhzwcqPwmcVBD +vMTnQJjQLCbljvvQzTMbTjPNdBLwwDhmhNNqPwmmhhBh +jvGjjQJnrspGHgFz +sjssjtZlcphZHwWvcrHTwWJH +qDdzzrFNNNDGdFDzzVBVVvfWJPfgPmgWPgvwVH +nqMQGDrnLGnqqLNqjtCZZjsMhZhCMbtl +JJJsLFmzsrFlSpzPscjgHhnRnmvcjqRvvj +fCMQbCbTjjqTGhjc +bfdbWdCddfBbtCfbfbqVWQQpPlBrJLJJSSLwppFssFzLzp +pdbbzlffWtJbgQwhcphQcCCg +vHvLFvVLvSfFRLnRFRNHjPjggcssQcjjsnwhsPCC +vGVGGFFVHLTvDRHDmBbTzfZWMdJZlfMm +wjCbjQgjTQhNNzgWQCWrDFMZmZDZDCrrMDpLpL +czGSPznnRGGJGGlVVRVBGGlBmDDcMDFDDZLqfffZFrrZqFpZ +JPGlvBSJHVGnVsjvQjjzwdwjzd +MFlWQHDTpnpsFNNQllWFWlhzjGgrgDzGGhGGjvmZDZrh +PtTPcTLbBCVPTRVcvhjmmhVhSZGGgvZg +JLPfCwPbTbBPJCfblplMpqWsMpMwWHQn +QbHVBBzWtzHBNtBwQSgqhqSbFgRLjhmqqj +ZnCnMcdsDnJTncggFJwRmSwgRFmL +sTMZpGDvsZcMpcvTCPHwzrfzrpzHpWBrWz +PMdJWwJWHFWJnNzbDlfbCfMvbl +rZgttrFptFFcBtccbbCDvgfbGCGGgGDz +QsZBmsrFscrVrjQJjJQRJWWLwq +GwNNJwwRThwrWfhh +SmQqmzsjHssQzCbvsmSSzsQTjWpFTTfFfThchhFTBBfppB +mmbHbmtmCzzQZzQRdZJhNMdMlRMglh +rrsPbncQvvgnnrTdGDVcCdpZHHZp +RwwwhjLLqtJFwjzwtwmwwGpDZVdGDVdZBZDFHdHZCp +zhzwLhhfffLtjNChgWbbrbnMvPrMrrfv +tQMtQtTSBFtSmQSttMggMtbtnTnPrZvrnzNNTGZvrZZdLdnL +HqhwDpDcwlHqpVrrFzvFGpZrrzrP +RwlhhjwRCjVfjDbMtFWBWJMgWjWm +WpWVlWzsGlBJpspNclNlhhhmgzrdtzQMQttzMmtt +RfnPRLTPDHRdPbwvvntnSrFgmvnmtm +CwqRDCCwqCwbCTqJcJBNcZqdVcBlpJ +tpfnNBsGGNRppRCgfgRRCRQJGMPPWdwMJdWFFwjVzGPJ +chLSchLTbLqvqcZLlvvLqbmldMzFFWdzVSFWFMzQVJwjQjdM +rLqqcjDrcvhRsDfHDtNNnN +DjZjvTTDqrtTZZSMcdRdmRJrcJNc +HWgPGVhFPgnSVtnJcdMs +FPLfBwCWGPfCwfLHCCDBZlbDpBjvqTtDzzDj +FJNqNFgNFssqGGqBsTlMVcgVrCwLwlhcrw +fRZzDmDZvvDdZbtdpDZmbrThrLMCvcChwwlSTrvMSr +zmfZmtZmpDmbfWRDDZdqFljqnNQjGWnsjFqGsG +rMdMWddmJmvdSdmWfWMddpVRqRFVHRRqMRRPQMRqRq +tDGtGGhLjLLZNLjjNgNthGtqHTVqRVVpPDRpHHVRQVRPPR +ZlLtzNjgsZZlssLgtjNpfWfJvlJrrvCJfBmBfn +hqpWvFJsJFNHhqMWNhWvWRmmDcDMLcwZnjcwnjRnjn +LdrlgCCrSSTrTnwRjmwRQZwdwG +PVlfClrLlLlfggtBPzHHhHFbWzJNbvqJFNqF +TbbQtnDtbGGjGlGsGHpJJmFWFJJrBWWFlWrS +CZzzNzzhddNchhMhhRVjpCBwBrCvJvpmSCvrwJ +fhZZhddRjRgZzMZRzPjPTsLGQtHLTHTbDPQTtqPT +nHnWsQNQQWTWQshwjBJJJmHwFBwm +VZZpfbffZVvbSbGfBhSwmtmmJlmjJFJJ +bpphpMfMvMzDbMGZgQNrrngzdTsNqWdd +VPNddVTPPmdnVcPVZcdTmcDbQTFjMpjtFzbMtFjzsFTssT +lJCllWCrgvRlgwlJfRRvSzjSjQpbzMHpbwMQpszM +fRhGBBJJCgrNLsNPNVVhNq +pLrVDgbNbjVplpsltHBqWSqhSQcHDttH +MCdCwCGTmnTmmmvTTCwCqNhHQhRWcwHWBRHSqSQH +TNTFFPfffTvFTJvTPCPTFfGdzVjspVLZglJbsbZpVblrzjlb +cdPzFrldgcdCrnlznPzrBNRssLLBbVNVZsLHRHdm +wTQQwvvtqwqcGvTZmVHBbVLLBbRV +GWJSGfJWcjQwhQQWjqJhhGfgpMnMzDnpMlPpMnDlMrzl +pMhqTTsSpdBPpNBshsdMMTQFvFlQtQWCRQlCllVFqVqG +dfcbnmrnjzRFvGQQGvfv +mDrjLLLcJjLhpZSSJMdpph +NGZNwqFqZhhcFSCfRzwdzRfCzVRw +QTTmBTsWQWJPPCvzvpHPzdvVFR +bsmWTBbQDbmbLQQMsWWQchgqLqhGGGGZLhSFjhqS +HgmGlgsvBBDgBGCdHHvHwCGwhZJWhTjSdhTSFFFhJtSJTJhT +RQfVrfQNszMQfpMzpNnfLbtjhtSbWJWFWtFFtFJtFSZq +PNzLfnLnBCPHgsgC +mTZGgCdNSNmCQLLpPnDhRlGhpV +vWJHWFsfHMWBBFbBsjfjHrFfLRRLPPnpLthttRVPLSnhSPbS +fzMrBjWfBrzsZCZmSTgQzcNN +mgmCZCMgmnZmZgBZpgpJfbQfwSQPDTdfdwSDfwhn +sHhcrWLcFlzHcHRNNFvNFcFPwDDTWdddDdqWbSTWDPTTQS +RNsslsRrNcRNvNRFFNvVsghZBJtVCCtCtGghjhGBGG +gchrcRRdnRwPPnvQ +CVCCSrDjFHjVDbBLFGGBSvwnwNMnMsPPNsNPvwPQVM +lHLCTHGDCbbjFTTzdWlpcqfgcrdzZg +fRDPsDsqqJttttJSzPDgJWQCbQQbGMWCCnGGPVGVQQ +rTTBvZhrvBnWWDWCbZWW +cwLlTLpjTwBFLLhgfRRfmRqRDmRdjq +sprGGPTrJTsGPzszqGzNtTtpfbQddQSQSDFDFvvbZvwFbbfN +LWWCMVmwMmgWFQfFDDvZDgdF +mlMmRVCWVMmmHRjVCmjHWRhMzpTtlrlPzrtzwlsGPrpwtrJp +tsfwwfjfdfrtrClfvwvvLnTHNmvLHcNccRNcvNWH +qQSqZqFQRBzghDFncHgmccHNmWcNmM +SQJphFJzRDSsdpVlllrCrw +vGQqLQFvBvLvdNnvjnvNDc +TRJwmWmZWlCCmzznbNhhbDhRgj +CCTtDTlmDTWTmDmZZlVLLsFfstfFFLsBLQfF +cfWflMmWWlWfPWBhBlQtLmmvrrrvCLjvRTjLLwwr +gSgbsbgHdsjzHbqbdVDLZLvTZwLTvSrZrFvZLw +sdbJqDNdjJNdsJBpBWpJlMcfcB +FHlMHPqDLlPctgHSnttCSC +zhrmBrTwJTjBmQcSQvQqbtwGvg +jBjmBmJjjjRZTBzhhrBJLDdZqfpDMdfWWlDDLMlV +zPVdbsBzZdwqJGhrLTvNNJqH +tmmCgCPCDDnptHDjNvGvhrDvLv +pRWRlpSpPllClnpbQVQwFFVSQFVBZz +nDrCvmvMnMSmsCvblBzzCZplbJlTbZ +FNRtFWRfcGqFGQbzlZTQqQTBbd +GRwFfNtwFRNFGMvBsnnwMMMBjn +LVTBjjlJCDrnJzJNQR +GsGGsggGpfhgpchgdqzbMzzhzQRnnMRrNzzR +PwWFqFGpwWpdWgfsGggdmjCVHPHlCCCVZNCjVmVj +qVTsCWwbCsPlCVfcbvfPDgLzbzDDhrzRrjgZghgr +ntmHmNpSQNGtntNttmSdSdBdjrrDLQZQLLhRrFFFRDTFZhDF +mtMtBNTSNBpNJStMGSdHppNcVWPsWvqVcsVJfwwqlqWqlc +vvWzLvvdpZDvhTpcrLcTTLpdwSPnCfJwCMnQSMwSnCGJrnwr +ttHVmVNNsHBBRsHbMMwwnjnjBfjJwCMP +tsVllgNVqbRlfplldDvDWT +mLjLsQqLQqsBRvvlRBLRlT +bhgtDDhCtmptmTTS +nfmdbggwGWrfsPzfWq +JpWDcSGJpGzsHPSSlbbd +wVRqVZwwRwPDwbDddH +VtVVVLthLVtVgfQLRTNtqDcCcJBmmWMWWprpFrcBJWNp +dhhhDtmLdttdPlslGlRFjfzBBpzzRpGJ +QMrVMwbVrrbvVVCrvcnqQQrrSMBJfpjFSzfjJFMFRWSpjjFG +cwvbHHbCqVchRDHgDsPTdt +CgVNCtDsDtJGZZGqMMGhDq +cLRnSHgWcRdLHWSSRLjQdlHBTTPcPwwhzqzTMBPTwhPPwP +HnnnglnWWgdRjlmQNsNFmJCFJFvsJsNN +hfccLbjhfSRbfDZjFRJzrlvlwwlnnFrWwzqr +TCsPLNtQdpdQQVtVNvJNJWlzJzwlrvJl +pHtPsPtPtCQfbRHHDHhMLh +nWRWgLtWnfTcZNNsscfd +JMGzMVJwMVTvzVQFGHMMmPdddsPsCjldlHPcScNPsP +vGrMQQmmvTQzMJpghWRWgpbbBqLbLR +WSbhFbPTpRfTfPdhpfbhSbfPQLzlQlzlHvtQsvlltlsgHdgQ +pZcGJDZNGcVrJwrDrrnvtNvlNzsgtgzvvsgt +qmJZZJcBqwrMJcVbWfSPPWpmpjmSCF +jHVjjCcpNrDgjsfB +ndqllRvJQtqlQQTRWllFNDrsMZBfDBLvNMNDfsbZ +qTFnWJqdWRdqWRlnTRnQGnTmwwSHCzpcGNmHNcPVcHGmCz +pZCpBhDfvgBVZQGMMVZVlq +sLsLTTSssjPnTNbFGRGFPVHqMMRF +TsNSccnjLdcsLjdmjWvWvBhfmvWpCGhGhD +VWFFFPMpPVSMbTppHTnHTbRH +DtvfNdBNddDNSLjsvDTTHnzzHwrTrwsrwqbT +dgBLNffdgjjtfBQSvgNjNDlvMcQJmJJmZCMmVVVZFPFcPMGG +VWsQLHMVVSNRShWLhNSNLjbbbddbpDZDddcbZdDRztpd +FPlhhgPvThGFJndnnCCnJzzdCp +qrTfmllGvfvGqwNMMMsffsQsNh +NsmFqNlmnQRbCFsmJgSffpPcbvSfrVvpgS +LhZGDZhhwtDHMwDdHGhDjDpTzzPdzgTvcPvpSSpPrdrv +jgHMjBLhwtZMHMHmJNNJNFlBqlBJNn +bznSQggscgMcSTTfJbSQzQFwClMhmCmthClvMwFLwhZL +BRWBPBVVPjPNVHpVqlqrvtwFqmmLqltZmL +WDVddNHNvRgccgsDsgbT +sNgnQLtLLLPPnsPpqdqjBclpGWjcWjBG +rVCChSZhVrrwqVDVHSHmMjldGfJGfHddJGJlfGjGJj +CVZmDvZCmmhFVVrCgTNbbnQFgbsqNqNQ +WmMmSSfJNRRPfJRMRMtllCgdStgbgttgCdDd +QGBrvzwBczlgqCtDbvDq +QQpBGFrLQjQzGVVRNjPmNNWMbW +gGljnJhnJtllpNVCHWcccdTdjdmB +bLfSQDSMSHmBnwCB +LFMDrbFfFQZQRzLZnbgtlsRGtltpgNhgPpPG +cRThZZchCThtgTRhZTRtjWFjWNwqCjGmwFjqqffC +DPDPGzPMHDbrpqjfwrjqmjmp +JVHHDdVdVbvGMdnVdQVdDbHcRZllhRtgStRLThRSTcBTvc +lQWPSBrrPZGgPglGssDfHnWsfDFHHvHh +TDCqpttptJNLtwNpbwTqzqHshsvsMMFnmHMNfssmvmvf +JCjqVpDtrBjQjrlj +wFGWGpFLvCczNSWWsz +tlfgtftjlbtHHlDBsBzmQQnsQDQsCn +gjfrsVqVgPlfqhvLdvdwZhGq +pHpZHBSvRvRCBBZCTMngRnWndnRmWcgg +jsfrfrjJFDwDDMMggMCGWGcfmG +qbCszCjtCjQsQrtZVBHBHvBvqLZvlp +scFzsPScNgNPNgQzpttlCBCwpLrMLCrDdljLwq +TjfGZZjVwMZwMLwr +vnGbWTvTmFRjQFQPsb +bVLrzqrzJVgJbbtVrWJVgppcBCzBvdzwBCCBHDcBvc +hflPQnMQmQSRlQMPNRTHwwHHHqpHpdfwdBCp +hFhZMhqSNMNbrZgWWGWJjZ +NJsgNjJlMHQrwnRgSRPwrP +tqpQtTFpFvbGpzTTWSrnSbrhwChCnRfrCf +GtcvGqQpttzcqdFzWppDsZMJjBBsBJcBNmBjMsLJ +lGfZGZhFfhdSWqmFFWSS +wDRDPLcDnjtWbSmqrSCSLC +MPwmtVnVMjztznHPgQhQfJfvvHHGggQZ +llTspLllCHmLHHndldqHdlLQQPSBQczZSFDDQZSNGcGG +jMhwvVrRjbRhFBZNGPcGNN +wVtrrtRwrfrwftjVjwWvMrRpsqsnsHsBglslCmTsdWdHTd +vPvmTGgDPRvGpDPGPqGHQnWJQJMBBzJBlBQWlHWl +bfbwNsmwFdLjbfrrLsSfLNQtMllznBzJQZMQtMlZZnnF +frssSscssNfScCjfSCwjsDmRDpGmDRDvvvVcvRDvRp +LtlPZPjBTbWsWJVJVzdT +nnprqhrqmzfrSrphqfCChVVGVDJWgSHHWgWsRDVHWd +nrmppNqhcCrfMchcMCncqbzPZvlvlwbBNjPjtNjZjL +FPWsFdSspVbbbtWVvl +CCHnnfHHvCwtVMhzlzDllC +LrGnjGfgfvcwfgrLrBjrBLgwdBTSRBFsRZdRsSqFFSFSSPPp +whGCLqsrjgGhhGFqrCCFGCGzTRTZJcNnzlLTnznNHcnzTH +ddvVmbfvdvVbDVQdvvdSzpNcnJzlzSRHNJpnJcSc +BPdvfQdWtPDDPfDvDQVVPmbhssCGGMqgFCFMqGMWgMjrRw +PSLbGmWPSPLQbMTPWGFWltthdDdrmBDHhdDdczzDRh +VfCngVfgsZwCftrZdhcZrdNDzz +CjVJJJqnJwQhWPPLQlGj +ntnnQmTQTQGVWGNGNNlClG +jDffjMSvqjHzHHzwNVwNVcCddPVNdD +ZszJsrrZMjsHqqvZJLRQCbTRQbJmThbt +BgLHgFDsJNWgQgflWd +mnVVcCHnCGRcVnZSjmlthftMQddlfhQctNfW +qbSGqmHSTFprvpvTTL +dvdTMvvpdLpTcSLvdLLMmhfFBftwCNhRwRNjtCTRCf +lshQWgsgrHHqlFfRqFjRFfFwCB +rsgHQbJbrsGHHlgQHgJrlHrPZdhdpMZGDSDpdPLcZhdvhZ