From bb4e3b9b704ff1980a30095fe1135a01646e72a9 Mon Sep 17 00:00:00 2001 From: Tom Weber Date: Sat, 3 Dec 2022 18:12:00 +0100 Subject: [PATCH] day3 --- python/day3/bsp.txt | 6 + python/day3/day3_1.py | 19 +++ python/day3/day3_2.py | 17 +++ python/day3/input.txt | 300 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 342 insertions(+) create mode 100644 python/day3/bsp.txt create mode 100644 python/day3/day3_1.py create mode 100644 python/day3/day3_2.py create mode 100644 python/day3/input.txt diff --git a/python/day3/bsp.txt b/python/day3/bsp.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/python/day3/bsp.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/python/day3/day3_1.py b/python/day3/day3_1.py new file mode 100644 index 0000000..ef3f193 --- /dev/null +++ b/python/day3/day3_1.py @@ -0,0 +1,19 @@ +f = open("input.txt", "r") +lines = f.read().splitlines() + + +def score(char): + if char.lower() == char: + return ord(char) - 96 + else: + return ord(char) - 38 + + +summed = 0 +for line in lines: + first = line[: len(line) // 2] + second = line[len(line) // 2 :] + dups = list(set(first).intersection(second)) + for dup in dups: + summed = summed + score(dup) +print(summed) diff --git a/python/day3/day3_2.py b/python/day3/day3_2.py new file mode 100644 index 0000000..73c1cc0 --- /dev/null +++ b/python/day3/day3_2.py @@ -0,0 +1,17 @@ +f = open("input.txt", "r") +lines = f.read().splitlines() + + +def score(char): + if char.lower() == char: + return ord(char) - 96 + else: + return ord(char) - 38 + + +summed = 0 +for i in range(0, len(lines), 3): + group = lines[i : i + 3] + symbol = list(set(group[0]).intersection(group[1]).intersection(group[2])) + summed = summed + score(symbol[0]) +print(summed) diff --git a/python/day3/input.txt b/python/day3/input.txt new file mode 100644 index 0000000..53d6524 --- /dev/null +++ b/python/day3/input.txt @@ -0,0 +1,300 @@ +lDDWVvlVVQfDMlWjGJTRjQCgTGLCLj +ZLZpwzLBhwZhSLBsjntGCtgJRjbnJgSG +qppdZzzsdsmZphrNsNwZhllDHLcVVDWFPvFWcWdFlv +ztdhgJDBJghmQtPFQPpmbw +lVlLRcnfllcfVcccGnSQVLcsTPFbpwsPFspTSqmbpswpbF +cCHRGcGcCRGlGrGcVGnrdWHWBDzBNhhQZWWNBhJz +NfnSSQpdnRSSpvWdSsjZDGNDjGDwTGTjHG +wlPzPqzPFbMmqPCFCJmbsjbHLDDHDZjDjbGHsT +gwMlgmtmPcqVVvhVnvcRnn +cBNBBCHhbhNhblBcCCvcBHSwTwDQSqRwDQpDRsjHST +dPmzMVWdmmMnnZJtZVdqjTSrjTjrpQrsTTVwQRSj +qzmZMmdZPtnGqclblGlbGvgBFc +ZfpmNDfRhzbbqDnD +SFtFjTTZVTFvVTjHrsVvqGBJqhnSSnbJznLGJwJq +TjdPPtdMPPWCcZgW +qsbmGCsjHNhmhmhzTDznpnlQZlbWlZ +LTSSfSvggVVgBgfLtvvtTSczzpWnZQZnlnzpBcnWpQWc +FrLvrrrVPgdPftSHHdNsjTHjmGThhm +wGQlMjvMwpvjvZjZTZlWjplWJJTggDTgfCnntPgTJPbtPgSP +qNhJmcVmdJqhHnPnDNtnPDCg +LrrchqhRdLVzRdmhJcFFQWGGMjpGlvZzlQQv +ZqZMbZMfQZptpjlF +PJCggvHlwWHvSSvCJNvSPvDBtFDQThFQjtRQhhFTsVThQtsF +PwWCnBBCClcMMznMdG +rNwwQJrJrnQswrQrRRwCShBSLndZpdnhpGFSdhBp +PvzzWVzbclGFhLFGdZll +VWjPWvbjcVbVcGVzjcgzgwQQRRRrqwRJQwwstCRR +zjBMMzznjbssrBrMBbvHDmrlprlrpwGpwQDV +LhRwPPTLLNRZqScPWPWPTSmQvQQDGGdQHVDlmVpQGD +NtfhNwhLLNwRwRNcTBgnJMCBzsBFjsJfCz +jZjsWNDlPfClfMlM +GjqbVSqjhgvgSVSBCPmMmCmfpwTBfh +nGbjqtqcGzsLDFcJLs +ZQtmZdtdQcLndRncdQQLFjWWDHNPfhpnqhqsHNNDnpHs +TrMBGbJTwwlmDPPPWshWHfJq +wmVzbrwbwvBlBlVGtSVLSdFjdFtdjLVR +LBhZFhRPbbnPddMdPPlD +NQszQNczlCSlJSsg +mwmrVQwpQVWwTlvBpHHHFhZj +pzzDffWpQBzMpHvzMfRnTNhZdrdBcnLrcdrTLZ +msgJgtmbgmqJJcdrGcJjGn +bSVPgwntmVnngQWvWSSMpMMHWH +gmGMDHHdpngdrGmGcwbNCCnNcbbCSLwL +zQPPPffQQlVlsPFQFzQchZZbLZNVcbqbNqbZgq +PRjQzfRgRfjQBTfJQTlPFRHWmmvmWHGWrWvWWtjrdHpD +vfrHfqrLfLwwNHdvnthpnnFFpstn +gWcMclgmcRcWgDMWgBgGGFnntqQnGphdQhtbdFnh +qRWmRDlcDqWBBPwPNrZHrwSHjTfr +HVVbhdCdndhZSShMzRrzSM +qBjWqvtWvDJjTjjGJtJtnqBvZMrgSGZlgfSgSRrMQGQRMgMR +wmwtJsvjtTJwsNnVsHpdnsHdds +FCJNZDMPNCNvzqQJHqzGqv +hwjWcSTHwRpSWnQtGgQgGStgQQ +WpwhRHTRpcLRjwlwwTWBcWdlFbCrsPrrLCMDrZCFsCDPrZPM +DJjjShSGhGDSNdpfrWWcLFzrDWrDlF +wtqZgwMBBPVMCBPQggMwqMMzfLlWrWLLzsWcFzTzVTzLss +tgtwQqZBQQZbBZtPgbHpNJnJShcmJppSHh +tHrWmrdzzdHflmHmHrSmqswlqhqNgssMhGgghssn +pJcCBPPQPCcPpRpgwZNZBMnDhMsMBw +RJCvRRVcQpjLpCJPWrftWvSnrFffWbrz +jzlwwzDzTlQftzlWjfrBGBgVHBgpgBtPGVtP +vhsshbMbNhZpgZrrrpHcZr +qhdMqqSLSSbSJMqqSwwjzFzmjFQQFfHzLQ +gDhHNnphPPPNCprHFhHFdbdczzjNqbzjVcdbQTcc +tVJWBtVVZRWtjQbctjqcdj +RfvlGLvLLLlLMZBmZBRhHDVPnVHPHCgFCnhlpn +RFhZFTZvFdjlqqlRNCPwSSPCNPBSwC +spHGswpnWgJLLJCPGg +cWpDrVVbWfWbVfbsdQqcQzjjzlhdwqll +WWJPpQwWdQQPNpQvqlvvCblbvbvwLL +cmRMBMBTbSrTDRMcGBscTGfLZfvfvsCqhLlChZlLhfsC +TVbzGSMGVVgdpdPJpQ +lwsFfsZWGsGmsnlGQcPdBBdMbcPHfcCN +RVvSLtSTrTVrTFPcBdCHRcPHbNNb +LrqzLFTLrgSJLLLtTgJjVJvWlDDnjDWnWWlhlGWGhZWZhn +GQJCMGbrMbbCGrrGtcwhctGjNSvWpVVVRjNJqVqqBBRRJq +ssnglHHsnHzFmHnzHFPVDDSDRgVjvWDNpSSNpB +PZfHmndFzzfPZPZfCdwchwGcbwwhCdMW +DRGVQGmGQVnnGVmnnFpNbzCNRbRttCbpLztC +qdqHBdjTqPlcTchBjJMvvvLtLCcLggLvtmgb +fqhlHjdwqjjJTwldDmDmrGrrWFrDGZwD +wFscLVLrrVhwWgZPrcswgZWFTnQdtTMnpQtjdpqdqvqQMt +JRbHmmbDDSzDmDNpTnBBdpMHQtqtvp +JmCCbvRGzbbGJsLgZsVhgLwwGW +WDQwsBzWbBlMjdVpzTJVMj +fncRngntnPCpJgmdFpFWgm +RGZPZtZCfvWSvRZGSLvPccHwsrHbwHLrwHHQQsBDbllB +PlNZhwgpppccgrqVvttbBfrlls +CznSDDdHDRnRStVsVfDvfrtDZq +QCddZFSFLTmccQmw +rnwfVnclGPPFfSPSqBWZvvBBWqZvqWFh +zLgLQgJssspmQTJmsgjZNmqqzqdHbthDdDDWHbhqBBqb +QgmmjpNgCCZpjJLpmTrfrSrVRPfnrClfPwnS +zDzPPwvwqvPPBqjnqvDqBffSfcSNJpNVfccLLNffBR +MdTMZbgbmmTWGGdmssRCSNsSNVVVcJsNppsC +MJghbhHhbtMMdWhbJhHgdmWvnFzHDQPDjQDvHHwvQwvzwF +gGbqqRDrqDMdcBpVlpMG +WzhPCnWfqMcpBnnNLZ +fCqPHHJCfJhStwhWHbrrgvjFgbQbSbmbQs +fhcchnSpfsNpjVVqnqjrGHqq +zzlFLlPLWdggFqRBjqsrHrBTzz +FDwgFLZWlbbchpwshsCNcw +CmPlqqRJDHRDDsFv +MfSpBQQNNfBfrfVZsmVVdzzrHZmH +QSBSLSgmQBmwPCtgClhjPP +NPNsHHHNsPsvHwDqgpwlqt +rTRWSRrWRzgTzZrRVVLRQzjpbtmmGLlGDDbDwwmtblvDvw +nRzSRrjSVRrnjrgZfrfzNdPdMPBfBMhJhhBcPhcJ +LLhzQSDHDHNpNzHHJBQBMvMBqBRJBBqw +rmbdtmlWCCMnvJrn +FTVdmVgtjdtbWsvjjmdLSDcgHpDzShzDLPLSHh +VFFJQVWHtQVHHWbJRRRHwqPvpMLpLZZWLwlwMllL +jsngsdGssLvlqnZqZw +hhmfDjDsmDNjjNRNVqNVJRtQHJ +jvTnffrgFTwvqMzqGdMMSW +sPbCtCCQQLffZGdWNLWDDzLzGM +PQPBBtfZCZsmJPPplwwmTwpcTcmcgj +NBmBRCCsBTRNTndGdswnlwvwnw +fvbqrbPLqpGwScGGwbbb +HJDPJFJLJtpJHCvCFBBBBNNWvF +HJHgNQJBSlRRbJDRDb +RptsfnshscWMLMZDZp +njmrnPznnsTRTtPzFzRTswgQwqvVVwBNwwvjqCHqHq +CBMgBJCTNgQcsQspPpWjRrWrsWsn +mwLvHLGbdHbGzSHmvmvHzrhjjjPptjWGqZPPZhPRWWGP +vbbrLFwLFDJFDfFN +TnPvZSnQgQPHnnnQvgMSWppWNfWRpWfMtthMNDhN +wLJmLBmGFBFdLBbCBbVCVlsGsWhtHqthRRhqhtHHGqqf +LmHLbCjjBLVZzZSgzQgjrc +wdSwfpBhtFbStpftjSVhBwFrGrsQnQgnGrQmqCPmDrmmDb +zJvzLJLNZNscLzNHHLrGPvGGPrDDqGgDPDgC +RWsNNRMsHTHLHTlMczLHZLWtpFwfpthSjFtwFhjSVplwtj +QbrBDLGGRJMQJQJDbQbGvNscWNnTdvnvtnLcccvl +fqZgpVPZHPmfgPPjBFgcscvNNccdddtdNvdFTs +CgPpghfjjPgVmfBMMCRJQQJzJBwM +jLWDqLdWdwLfHwJwzSSfwS +gCgRRltMrlrCcCMzcBSVfZQfVNZNVSBVNNNh +gMrcPntccGgzgTMlMPrtDWFvLqqdLnDsmLLFFqvp +ttHJNccRRwmnsnHnHWMSwqfgvgfwSQZfQf +ShpLhhzTPBMpQqQgvM +zhbFjVdrjFjVljrVbdPddSTPHNssHnHlRNCHtRtsctJtGsRJ +zMVTscVhQhGGhClv +LfMJmgSBpLRfHmBPgpmJPSBdvQNtlHvrHvNNtNNNClGdGN +JFJmmSFFbFFbRJPBgFPmSBPMzzWWTDjjTsTqqwjVWbjjVVsZ +HZpCnwnggfFggbgLDcTb +SjvWjGzNGGzRjSGmMcLhvhMhFMCcmv +rjrVJNjVrzVNPrwtPwPCHBPB +SWwFbTzsSjPzpjFbsWPTWTcWLCLgLgLBZjGVDjCVBBgCBGCZ +lrJJttQcHqrHrvggHVBgBLffBC +lnhhcqNRJWzhTdsWFz +vzldvzlclbFjFvmtjZ +DDNMNStMsSsGnhSMwQjTQVgVbwMbVTTQ +DsDSCNNGpLtsNLpnNsqLppDzCBcdJHBzllcJfzJBPBdBlR +qWNfDvffbJBFDpNfmpbwhGhwjLgTrGwhbGGwrj +ZctMVCcVVQtTpthlnLtppw +QMcRSPMZcpCZqDFNRFHNJFFF +RmztpGSssNMzJRpCvqsCrqdHCBlBdw +gffPFDcqVbgqWgjlPlwCCrdBdllnBH +cFFZcbcqfQhgbcNJZRSMRtmNJptS +PZthPBWlPNPSPtmHHggFGgBJJbwg +qqzDvLLrfDpvvDLzqvnLzqpzbrCRGJRHwFCmHRwGwgwbbRCj +nnpnMfpMLTVqfmthmsMNSScMhS +dflvbdvpfffzpnNLNbWqtblqHjmVhVRhHrwrwrswhHnjsmwh +gSGMdMcJBgMTGPSPDVZhHhHZmDZhrwwjVm +CPJQGBGGPcSTFcTCScFtLLdWvptWLbNpNzvWQL +WThqhvvRDJDRhwcrscNDNFgDHNct +fnrZVnfVjrSGGLzZbnLzZLjVHstHHHQtgQbPpPcpHsscsFpN +SVjZSzZdndVCdSSZmTRvMWBRWvvWlrvmhJ +BcllhPPmMMBPcbRwgQtgHHgtmwgzmt +rpLqbrbTnNvqjLqLNqrNLvHzDtwpDCzFwggttFFHCQFQ +LrrrNLqjZSTsZZsvjbLjPhcBBlBsBcGPPcPlPVGP +HHhrggvSHDtCDsfF +ZMpLblppNZBDBwLzLLpMssCntfWdCFCnfCCtRNtq +lbmJlzzLMPMmlBzhSJVccSJhTvSTDh +sdjBBFqHscFnHTzCnRSnzgVTlC +LpWWtvZfrpbLpZpWftprLCCNMzCZMmmzTNNTmSSVSM +pLVtrtbGvpbpGLfPddHBscBQJJGcwsQq +hLcLnVVcfQBLZPVZnThfVVmjqjHNjgvNfdvpNdrrvvfp +lbRlWFHJtGNGpqmrqrCN +DzRRDFsbDtFtDJtWRztzJZVBQMhTsLhQZMZHVLcLcP +WgbdmgMmWDDvcPcpbz +jffpllHSpHRptRRGRntSVwvLSCCJDzcCcDLvCzPP +tRFrnlGfZrQpBpgQQsgF +TpbBZbCCHCGZNHbzGqgFdNlcFSdNlStSqg +wvWnWwLCPjJPJhMWtWdMfFSMgcdM +hhmvmJrJLJJJPvvhDjswCRGHHrHzBBHGVRQBzRRQ +zChCSBbpSsQscDHHQh +LNJJRgGltJDvfcrfgHfZ +lJNRGlLnNJtTGVMlFTbwSWqjBbzWWHSW +NDTJQDVwCTCJhVGDLfbBbBfbGqbfHBfBHb +lMgMrggMrmmtzMcgWdlmMlbsRjSRBsTRBWsSHSBTHRBj +cMPlgztzrPMznnMPpgddgdzpwDDNNwhNFCTwNZQFLTVTwV +ZgshQgzQnnwMtDwBwv +SFWFlFZRRcmlWmWRBCDwvwwftBtLmfLf +PjRFdTdWGddrGlPjcsJZpJzTqhzQJzNHhz +PgHQgddszgdGPWpMjljMcj +bSqTqnZLnDJSmnmZmtllGsnVtnWjGGWtjl +fqSLDbRSfBdHsRwsFdHd +RwHWZpCWhHvwvHCBMBpJMJGPJJnJgc +lztljTFljRRBBzBnBMnJMS +QbRljFtQfljbbFqNFrdZVrZfdCCwVwvddH +sHzztVzLTgnssPggHHsnCtzBmfBMrMccBBmqmrBqBCRqMf +ZhDQJhFDqjmSMrRF +dZpwDhNhhZpQJdDQpwnsGttGwLtRRTLRts +QJNhClVgPTTtPNCJJCtJhlNPZZRVZfvfzZzmvvzvsmZsvmzR +blBWBpdbLBDqBpszzffRsvdzjvvd +BLWpqBbqnDHqBbGlnWGBPcPJcHTTPrhtgNtCtgPc +jWVJqVwgsJcHCVlQVVQNBp +vGhGhTPtSSNCddSBCH +ZCCDtbDftZsqrrcnWW +hJThjThhVzVTZZwnNZRdgmzt +lrbSSddsrbPQpsvNtgPRmtHmvtnR +GQrspWdSGbDcsFFLBhCGVBjhjj +rHdlHdZDlTcflcNfcrCgcTWWpWQFsRWsFjRCsCjWCmhF +BnqbvQPLGLBPwqGmsVshsSWShGms +PzzPPQJPMJtJbbznPnDdrHlNldDNltrgtfDg +SmmMQhPSlmTwPpmnpllMSMPrccFDqFrDFGgqrDcCwfDgwq +bVdLLNvdQWVbJbQLVGfGDGfDgrFrqgqJgg +vjjWsbQdBsszhsHlhhPPSHsM +PqzJqNzsJgsgNqPdLJPPPNVpMMVWGlFWNFGMpWppGF +ZnZBjttQZcQZRTQDjQwGFlWMlGdGWVrWWlGn +ZRDBRSZDSdSLsqJHfSbzzL +rljJqtZlJqlJcvBNJBNQfQ +TVMWznvPMTFWznwPFFvwFbbBNBgbcNpQdNcBFQpb +mDnLWsPLvLMnnnmTzLzVCtlRRtjSljCZhDlhtqSq +fgWMHClGMWfgRWWWGCfmfgCSVQNTDFHTtddVQQDZNLDZtVVL +wSqbsvzpwpbpdFTNLQwLNTFN +zscjPnPqsJlmPJCJSC +GZSwQjGwGrCGwrTjdCTwdTBpqqlmNmVpNrNvplJqNNpl +zMfJnDcbRRDRFbzDFRLFBtqNmqqtNBmNBvNm +sHcJRRHzzfQTjjCjQjCH +wJCVVbJgCLCwGsMbbGTlsRWHsztZPZWtPrPrWrHzrz +DBqdvfqDBqFpWZFrtppZJp +djqNfQcjDQjMgbbwLjlJGn +TSwfZMfpQwcCCCCrbbCZ +PLJmGJnjqjrsCjMMVj +LnNNLLLnFFWmLFMGNMDgfRpDQSfwSfgQzBHwTS +CdjNCMmdCrVmCjJdVjFNMtMzhWwpGbpBhPZZZDbGPpDhpr +QSfHzlvgTQffSSHHclgfHnqPbPPPppBhpWDhwWvPhvbwwh +cQfQRgQnQsnsQSgHRQJsCFMsCjLzJJFjCdNC +ltLlJttmQdfVRhNmhB +gWWDrPSvCSWgMMMZBVBdTQPQZNZVPR +vCbwQzcQrCrLFHwJpHHGpp +VbRVvVHRbJVTzVLBVPtt +cSdgSZSZZFhnFcFwdDQcZZhgzpTlzLDzlWTvBWLztBtpLplT +hZZvdrcSZQZSSwncdHCqHmGHqJrCJqbNbq +lwWmsQlDbCZbVWZq +rRShhhhPjTsjTRvHhqfzqfqvBZZvBCZffC +scPThhRSjQmmNpplcg +FChtDTThDqZtjppjvgNvjl +LBwsVdVHLVvvpVGjjgjS +BbHLBfRcsHcBdMbdWJQPWFCQCZZhWrJPQp +zMtWCstzNrQLpbplFwQwhb +gDTDHGvvHVfVdGZVJGDGdnmbwmWFwfhpbnfjwwjpLl +GJcHVJdvZJVGZWHSSvTZMCzrzzRNSBtBNPBMqNBB +pLzZVVGGZmZVlmDsQglgsllc +WSvrjRjrMMFFnFjnrnrdjBRRgdsblQQPbpggsclNDDbPstDs +SMWRBrrrvSRBSSvWWWBTMTCqpZzLCCTCwJZwwzGZzqHL +TvfGwGZpPnSNgSSnGh +srLVHLcjsjVtHqjjrjFjcCqPBggqNQQnMqhgngnznNNB +VtdmPHLmtVHFLdmZWRJlWpWWWlmWfp +SbSbdTsrVrdhfSdDGJWGmNwWWPwTGP +BqlRpBMmllpmnpvvDJPZWPJwZcJgDD +FFRMCnRFtCMRlMplqMBRBppVbtzdrdhssrmHzVVSsVhVHz +dNrhhLsrshSmmRcPhm +WMCngCzCvzvMMpplQvzWlRBPcVStSmTSQbbVSPQmwm +MpzvWnllglJfqfMgsNdZHqNjdDsPHqqZ +rNvGZRsRcRRBtBCttB +DwPPQWnWWnPQnJlPhmTtBFBmqzhpmnFh +QwQQQlbPPMWwDdDwlVDJJPPdvdSjrjdrsgssLLsZLNBrNNNr +VjMMVzngnjQQfJDchZqGNqFPcg +SWBwTtWSFTHwFClHHmwBPcJJDhNGPJNPPhPPGhJt +CBvSBBBWHdmRTvRWRQFLQRnjnfLLzVbs +flSpvLlmZpCpZmVSBtlvHHjFHTdssZdjHFdTWdNh +RmQMQJRQJQmPgrzJrPcRQRJcWdNTGTGGFhGTdFhHThHGMTsF +RzJrqqcqPRqqJDDqttCpmtlwBpDflSLt +hBjPZbPBbWvTRnLRWntD +MNGQNsQwfzsdGfgTGfzQwwffmnCRDVmJLRLCvnvLDvJCDgRL +wTTdFldNHzTMljjFqphrBqhrZb +wDcMCbZbzPDcZDWQdrJLrQrZBLRBQr +FFSHStjtHgllgFdSNmlfFStBqRRssRsRJrLrjrrJBRVhLJ +fGggtfHtgWMwbCGdCT +RQrQDDbVGrRSfbVbGtmGtwHFWsCCzsJSJJHsJPJvWC +hphQnhZQNjlBBcMMpCsHwFjvvHWHWsFvjC +ppcnnBZqllTQfmrffbtGTDGt +dsDFsBZBhCFhshFrpBFnmLQmHmRgRbLqmmmRQDLm +PPBBNNNtGTwJNfTJffNttfLQgqLgHvHbqRwlgmblRvll +NSNTGTJTWPjGWMPSJJzrBSpzdFSddCFdncrs +bPzRlMPTzTMldJMnhswcjzfQVccQhc +HCCqNmNmQQmQssJn +pHptprtgRStTtMJt +nTmhrsPMsTfmHHGcSgtj +bJJwdlrJQLlvwlQDDwSbgffGVNjfgjNtVbcf +QlpDQFJdvdFqJdFpLvDFpLLnzZMnBMRRzMTqnrzqTRPznz +qRVRqBzgwqRpqRgVqQRPpQJJPrPhPGJnsGrCFdFJrZdG +ZvWDmMvmSvCndssrsJ +WcZcNWlcMjBQpzNTqVBp +DpLPZLDDlcgmDmhVgfgfWWRwhwwt +VrVMdbCrrBTjCMQQtMwQNSqMQW +VCBHdJHdvrrFsbsdrBJTdTzZcpmZGDGPlmzmlccFDZDn