aboutsummaryrefslogtreecommitdiff
path: root/advent-of-code/2022/03
diff options
context:
space:
mode:
Diffstat (limited to 'advent-of-code/2022/03')
-rw-r--r--advent-of-code/2022/03/1.c50
-rw-r--r--advent-of-code/2022/03/2.c47
-rw-r--r--advent-of-code/2022/03/input301
3 files changed, 398 insertions, 0 deletions
diff --git a/advent-of-code/2022/03/1.c b/advent-of-code/2022/03/1.c
new file mode 100644
index 0000000..447fb78
--- /dev/null
+++ b/advent-of-code/2022/03/1.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#define BUFSZ 1024
+
+char buf[BUFSZ + 1] = {0};
+
+int table[53] = {0};
+
+int decode(char c) {
+ if (c >= 'A' && c <= 'Z') {
+ return 26 + c - 'A' + 1;
+ }
+ if (c >='a' && c <= 'z') {
+ return c - 'a' + 1;
+ }
+ return -1;
+}
+
+int findcommon(char *buf, int len) {
+ memset(table, 0, 53 * sizeof(int));
+ len = len / 2;
+ for (int i = 0; i < len; i++) {
+ int code = decode(buf[i]);
+ if (table[code] == 0) {
+ table[code] = 1;
+ }
+ }
+ for (int i = 0; i < len; i++) {
+ int code = decode(buf[i + len]);
+ if (table[code] == 1) return code;
+ }
+ return 0;
+}
+
+int main() {
+ FILE *fp = fopen("input", "r");
+ int sum = 0;
+ if (fp == NULL) return -1;
+ while (fgets(buf, BUFSZ, fp)) {
+ if (strlen(buf) <= 1) continue;
+ int len = strlen(buf) - 1;
+ assert((len % 2 == 0) && "len error");
+ int common = findcommon(buf, len);
+ sum += common;
+ }
+ printf("%d\n", sum);
+}
diff --git a/advent-of-code/2022/03/2.c b/advent-of-code/2022/03/2.c
new file mode 100644
index 0000000..f91ea46
--- /dev/null
+++ b/advent-of-code/2022/03/2.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#define BUFSZ 1024
+
+char buf[BUFSZ + 1] = {0};
+
+int table[53] = {0};
+
+int decode(char c) {
+ if (c >= 'A' && c <= 'Z') {
+ return 26 + c - 'A' + 1;
+ }
+ if (c >='a' && c <= 'z') {
+ return c - 'a' + 1;
+ }
+ return -1;
+}
+
+int process(char *buf, int len, int n) {
+ if (n == 1) memset(table, 0, 53 * sizeof(int));
+ for (int i = 0; i < len; i++) {
+ int code = decode(buf[i]);
+ if (table[code] == n - 1) {
+ if (n == 3) return code;
+ table[code] = n;
+ }
+ }
+ return 0;
+}
+
+
+int main() {
+ FILE *fp = fopen("input", "r");
+ int sum = 0;
+ if (fp == NULL) return -1;
+ int line = 0;
+ while (fgets(buf, BUFSZ, fp)) {
+ if (strlen(buf) <= 1) continue;
+ int len = strlen(buf) - 1;
+ sum += process(buf, len, line % 3 + 1);
+ line++;
+ }
+ printf("%d\n", sum);
+}
diff --git a/advent-of-code/2022/03/input b/advent-of-code/2022/03/input
new file mode 100644
index 0000000..167796a
--- /dev/null
+++ b/advent-of-code/2022/03/input
@@ -0,0 +1,301 @@
+gvNbShZZgQfWdQhdPQmggLTFLwmwjFqjVVgM
+CsJnHllcsnnnnJrGRnRwPPLVmFLHLBjFFVHmPT
+JlnCtctJnJDcJlDCRpPrSSQWfphzWZfbZSvfNfbS
+WjvRSdSQjvpjWzNlnZlNZqCCMzZZ
+nJtJsbctPBPwLNcDZNNGLClC
+tsFJHBgJwgJbnvSHHWVWHhVhpQ
+zRzPhCCSHVZzfGHZ
+qBsWBpqBwBcvqqWgdfZrprdggPHHVZ
+WWmvwvBbnWmnwvWcbmWWnqNCRSDRRSSjjSDbPJbRjClLhC
+rQrznfHHhrHzllzlzTGcJgtJ
+jhhjjSZVPWVZvSFtTttLTglgFtvm
+dqSCqVWdbDSSVqbVVSqhNdrnpnCnfsnnwfnsRpMpBMrf
+rTnvrSSHvHtnDQVDtfmW
+ZjCglhcCJschpZbZgbtGmRtbGmwtQtbmtN
+FFZCghFJhlslFpjcdFTPLHHmrqTMTdzBLHLH
+WzDfrDwwDCCDMnfDHHJjTHTtNdngdHtQ
+FmScGPPPPmpspchbGHtRsjdJJJWJWNttgH
+bvhFlVhPchPvqWLwqLWqvq
+RcchVlCCvmhDRjNJJJjbjllZlJ
+wPwFGFMPfpdtqbpwFFfGPQZTWTZjtzQWTBBQJzZjZZ
+fbwPqqMPwdgvmDVDhmRCgR
+SSQggtQVQQgQGmGVthVnWDGjCBLLzdDNCCjDGWCW
+RcHcHbFqbPMZRFTvHFFFlcZZBNBtNjjLLjDdjLjDqWCpNLpj
+sPPclZcsZtMPfVsnnwwVJhmQ
+jlrwpVPjMwfzZfhfwddH
+DbQBGgBJPPBBHfPZ
+ggGSQTnTgQGbSRQRPrNlsjVjMrpmMLnrrW
+MzNNbMSrZNSSvGWWznwGQlTG
+ZCFCJHqJFjqTTqngPwPG
+LCJLJCCFtfjsJCMbZSMSbbcDdBfd
+LCdjljfJJBfLDCCdJqGqsGGtmBsWtbGmSS
+gpgchRcPgRRQNZcpNhgNPzzmGrmrGwtSSswqrSGbbTzt
+QgQvNppRPQcggZNccchvNZgCjlnsDLDflDdfjLfMDVsMLv
+jfSfTWfwTJffQQNwTCHnGGGgHbgqGFvF
+LmspctdsLDlBLPmFFgqbqFFbqlnSRS
+PSZZsctsDDtdBmzBLBSmpJjMzWwjVfwJVMrNfwrfzf
+zFZqbRNRHNHhqHFqzNnzzqDQVFMggMgDpmJMTgpVTQFJ
+SwLVsSWBfStDGMfDTDGGGT
+vlCBVsSvCRrHRjCqrn
+ndGVddlVdrcGlGcljdVGjCgfffPCCLfCMvqWvPnqgn
+FNtRZBDDSNSNStDhFRNQtLgCMTCBqvLMMTfJqBLPLP
+bwQwZhSDFhZbFSNccwzwHmHHjHMwsd
+BrSDgqrgWzWDwJBzMDWBLjpmVLFfFPLVJjVVPLFV
+cNnRlvNRvQTcnZwmfQGPmfVFPP
+dsCNllvTdnntTlTsHcdCRtNRBDWBDWDrWBhDBqMBDqbzWwCr
+stLcchcTwRcsVTtftVVthchqmmCCFvWmmgSgQFCwGvWSFCrr
+PljDbZbzjllHdQNWHMFGrMMHMFrmmM
+njjjzbPdqRcRQQns
+BTBLwzmqWNbpzqNzLppLBnhZJcJSHThhnnJZHHSQnr
+RfQgDjgsjVfRFDdvddtvhhhJCnrSnMZCcMSCSJ
+QRtjtRQQlzlqqzzzBW
+FnzllplJMntnzptLFzsjTVSQcSjSjQFFmdQQ
+wgwrBrwGHPGBqHrDcpmjddSQTmTGVmmG
+DBhhNBrCrMvNvzptpN
+LgSbLLRJQSzLCgJRJhWCCzRBdZdcMfcHsMdFFjfPjsCHBc
+nrVTnmrrrlnGGmrlVwVZPFHmdsZHBmjMcdjfcZ
+wrnTlNpvVVrqFrtnwGqwwrTpSgSQQLbQRzQSQRJbQpDbQz
+pgvmcpVcpwJppwgwvMWfHbRGRHDBJbWGfGGb
+hQqFqQNhqdCPNhTQCCFbbjmBHBbBRjGHBDBGFj
+TtdCCNlPCmssnqgvzzvvtVrgzzrc
+JltddTSgtLLvgvdldgvWPZPPSjWMjCfWNjNWPG
+FrwpbwhbmfjGRpGPNM
+cmBrBcBnmFBQqcFbscBhQfttznJgzlLLDlnglzLLlg
+mDhRsDzWZzGhhhWpZwzwGdfbFsfFTQTLcNFfFrNvvcbT
+ngMHjjgVgqHnPlnqtnClMHbfCJFbcLFFJFLbrQNbFQcQ
+SlqHqVVqPnBHSHHljlMndBdZQphRhdGpzWmWWwBh
+hVNhcfbSSNMfjjMlqRCqpdzpRJdnhl
+sBHPPwQwttBBssLCHzDBlDDmRmpJdqJJJd
+sHHwtsHTWwtZPHtZbbVSgMbGCNjNvN
+SgMtSMVChFBHBFdCwhdqPcPsbRVQqsblDbRmlc
+jlrLWfvWvzWWzmcQcqcNbmNDjR
+JpLznrnfGrrfnWWzTpfvzvdHHCgSBwdlTMhCTMFhBBwg
+fptnFPLsttddDdRhQShQzC
+BqGHGlqmmGmlJmNmqlbbCzSCQHDzSjHhfSShjfVh
+fbrrMqGGBlNMGNqrqglmrLZwFcwgFwsPcscctpWLgn
+TCMMTtWBqCMMMWWMSWhNFhlNBNlNHwNDsvhw
+frfdrbZJrVLdZLbnJcrmvhlhHshlgsZsHwwghZ
+fLRVvcvRVpfbcfVVJTqpWCCSqCCTTtjjPj
+vRCGzdTtvdBCTzCdmVsQjnVttngthgnQHs
+rLNZlrwrjrFLMsggsQpsQngqMq
+NfjZWcbffDrLZfNLbDczvmcTvvGCmCBBmSdP
+DSqdzrHgJtSHMgvmnNGdcmCnvssN
+ZwQLlVlRVVWZFZhbJZVjRJscvBGcpssLpBcnGpBsmpBs
+TwwjjQJTjlhwMfTDgMrfgtqg
+HhvVhgddvdvqTqVqHQgjgmCPWGrcWsGWPcvlsWrWmC
+lbJBBFbMlJFRCmsRmRPtCtwm
+FMLLpDLnFpFJbDfLnZZSzhqHVdVQjgSdlQTZ
+mvBrszzsrrrGsBDvBvszDRQDhjCwWdLhJdCjjWZdqqdZdW
+gMlfFVccTGMGPMSCdcLLdqhjLJWWdZ
+VfggggPVltVSlSlHfgFtTpfRGmRrrrvQpQsrGmnvnQbzmz
+HjtMgWbHBtbtcggVcHwMwcdzpZFGzGZFpvFFZZWnnpFG
+RNNrfmSrSSzdGBzFfJFq
+mNsSrrTPPRshmsBClRClPmSccVgQVHjHwtHwTMbTVwMHgg
+pZmmLpQLDJBCPCssJTsCTc
+SwlLwWvSwNSSSMSMfWLvvVdPFzjfTscdjcCsjzCPddFc
+vbVMqGbLSVMhDQnRRQnBqH
+lNmNwlmlbhhfFNgpJLnHfTHfTdnTML
+BGvCwVGVPSDWDMMJTHZMpndH
+rVcBrPSPCwWqPwGCBCSrqlNNQFhsQhtlhhhgNQtb
+HqZCQRQgWjpmZHRHqQjttGGJQNQtwQGGGbGrJz
+SlddfFVMLncbJJMzMzzMwD
+ndSznsdVHsqgpZvH
+sNStMtNtDztrvrRGPRRRRrNzqcchgJJLqnBScBcJThJggJBT
+QCWWZbCbCVjVbFVFbVwbnhqLqhghBLwwTqJJcpgTBL
+ZlHjfHHFWFjCdbHlQFnfdnZFMzPzrrlMrtrrGRMsDPrGvGPz
+NnDHhNNldhNTdHllpptCRtftzmGBGmVRVGRH
+wgZgZJLBwqgLSWrBvZVVzmffWzRmGsGmmssm
+bgqPBBLbPbrrZBjjlpjccjDdDchFTNlc
+WRWNNRWNfLZtsmtSWrtLmWgTcMcPrpMTcVMMPPBBqjcg
+QJJDFbpnpJdlcwcgBTqlgPwc
+GJFHJGhHnpWWShpsRS
+DHDZvDQWdHJMHlJf
+RhhnGLnBtGrnLjwwJTTMTdQccllSMQ
+rmFrrBGQLQFLjbFnBhQLhrRGCPVDWzgmpsWvWWDzppWpzCvC
+bsrJrWgWJvQRqbbRDNGGZDlwNfNfwS
+ttCHThhhcBVpTBcdhdpfNGDSQLwDLfDGfQllCG
+jFjzcFhzQTTjHFvJsrPPnnFgPb
+SZggDgNLGCQzSgRsljscPvPPbHsBNc
+TtFfTpMthzhFFTpdMMJPfjPPWjBbHbjPlPPBjj
+dpdttMMTJttzMFhqFwGLgGRSrrQGSZrwRrDQ
+JsJntWmghjgJTpfgFCczlztzrDZDtDzC
+QddBBdBSPPPHBSVHVHvNdPVRClvlcclCDLCLFRFrrDLcZc
+NVwBVSNlSBNHngnngsJWhwWh
+hQVWJGWJlJQDGJHQWHpVWJVHmfPGPcjfdLdLSrcCmfjPjCPm
+wgwnRwMvNvBvFZMngNvFZCjdSSfcbPLjCbcdCbSf
+wgnRvMMvjMsTwngTgnnDVDWJDplHWhlhQWlWDT
+WGswWFGsBFwHvjnbnnJjbG
+gLDrSrPpLfmmDqqbbJZsjvmvRv
+DTldTpTsDLgSsLpfPTslVdVVdNWVzcNwtWdWhzVt
+sttWrhWZsLVtJVZrWhgbCPQQbDNVCHglnnlN
+vvRRRMqpmTjwFqmfjFjmBMwNbCwQNgHgDnbNnHQHQCDg
+THpvmBGfzWGzSzzS
+nmZwwfPmNggwgPgNmdvPPhTRHTHBJTsvSP
+WDccMzVQzGWcrllLdsGTvTsJJBLTdL
+pWtzQrzDlrCpcQztlzCCCpCVFFFwtgmfbjmbqwZjZfmFwfdw
+bmMNNMVSRWBWCSmVRdMRmMnvZZscvvszGcnZClpcGsvZ
+gfLfDDtDgjgDtWTjFQjHsvvpZqqplfvvcllcnnvG
+TFPjDtWPNPwBBBNB
+QcTCHcTwdpQgcWzWwvMPRzSGwW
+sDNjfhVmnlVffmLNfLbMPPDbqGtMSRWtDMtP
+fZjJJshhhLNnrCJScHSccTQQ
+qfhBhLLjvMqWWBWjsQGrdrGzpszpGrqd
+JTSDHFtlTDbHTcFcDbTHzmrNRdRRbNzrmRRnRpnQ
+PHcltTgJDlplgptScCfCgWMVfvfZvhMMBV
+rttDPglHZZDDDPHgZtgWBswdsTfpfdplLqfsFfFdfd
+cRVvpcmpmRSCGGCcMQmQFqNNqdVdqTbLwNbdFfFs
+zhGjRhSvcMtnrpZjHZBg
+STNrrzVdTJwsBggwFgBN
+WbtMWJJpwpDsLBfP
+cbvncCCmWtCGMcZHVVSlJVQrzvzVqQ
+MtPVBHVbBBTwbvWgRgvF
+LhZjZpnnMRwWfhSh
+LQcQCLCCCcnmnqZpcrpnrjQlsBMHddtMGGzrJHPPsHsNPPJz
+NbZtmZDmNNDBHBhDNtNGcvpmgLmmFrvprgrFGv
+djMjffMdqnVVTdMfTPnQSFScFFVSLLFrvccvcllL
+PPdPwMQwTMWDwBDZLHZN
+DqpJFdhtmdSwpqSncljHsnfjqlbzlc
+rQVZLGMWPCNrCGMwNVMcbzsVgfHHgfncfscssH
+NBCrPLwMTrrMBLQLwCFhpFBDFdFFtdvDFvpD
+QRwGBdGwqRTBMWRMMzBqQHHhngspPFFbHbzgbhZLLP
+rCNmDjvrCFpvLZsgPb
+lDrmpcfCtVDtCjlfNfQQqVdJBQWRVVRMMMJQ
+zcgjlRcJCFtlnTvppn
+BLSHDMVPVPHVHwFwMhTvgnFZMh
+DsLSDdmPVNVdGgrzCCdbjc
+tjjRbNQtvJVVsvqsvdTsGqBp
+wlFLPZPzzzrzwZPmZfZPlrmpLDCpWDWCSTCpppDDBssdWG
+rwwcFFghFmgTcNRJNnnNJtHV
+RLhbzMhccqLzdjghdFddNWPN
+DmsTZfvrfJLPPWwrdFgw
+LsmDtQDfLLGbGQbSzcpM
+qwhmmHlHmlwChcCWlpPCBzjPVdBzLsdLBVsT
+DnJDMqRDsPsjRVQR
+tSGSnNNSbrJJGfDSSfbchpvptFwmpcvlHqZlcF
+rdQdBRPrQBBnfdBbzLLgLgmbzSLCPW
+TcRTcFDTcjvswMWzzgLSzwwSLJbL
+MNTRMNGTsFMMqqqcMDTTnfpBhQhNpHZBZHBfrptQ
+ZZFwcQGwRGLTGLTl
+rJtMrqBVvhBCnlCn
+WWWMttbqqzfPWqWJVzmDQwFQlwZwjQfjgFcZ
+RhgmdBbLLmRvhGZwhZZJDwGq
+ldPpTtTPtVPpfTGzJQFGFqJsFG
+MPpCnrlCVfPtrPVtntllnbdHSbnBvvgdgHgnWvSv
+nbnfjQbQZBqBvjQdVFGHhsQhsFsFzGpD
+RSJSTTcCVTTMlSNcSTRRwTccpwDFDDzFhHhtwppssFGGpsDp
+clcTNJlLMgrcgRvBjfWVfWfBrrZn
+LHQdpQLQDRcDBQccVQpnNRhllzMtRqzRztTNnt
+mrvZPZvZvZbPSFJrSrggFvrJzbhlzttTlNtqtsMtTntntdqq
+GPfJPJwfZFrmFvrPmgHHQLQWdHQBwWWCHVVC
+TvTTLfflhZmwZLvtJmhdFhMpnWrpnbJcWMnpHzMrzbcn
+VqRRNGCBjRmqPGqDzbHMcMccWnzngHnP
+jNqNBjsDsDRCNVsmBRNQNRSSSddhZvLhddZhvhwvLTZwhSfT
+vjpJvpgpNwjDWvvJLhFLLhNRTmPTRPRF
+HHbHVrMHMmqzHlGmtGqMtdLCLQthQQPCSPTSFLLPRT
+bZZzbHszMrqzGmrHMBzbHbqJjffcDgwWjDJpnjjcscwgnw
+fBHDMNhhHMrBDBrfQqfwwvvLvfjLZZ
+lmppmGJgPPpddJVdnwsQjLttqtjZTpcsvT
+RndRmlGWJgdRnWQJQgWdQPlFFbhhbFbHbHMhhBbRDRFrrS
+tVhwlMdMWlhlZMZMlzWrtRpBNpLPpmnmCPQBLppPPPBz
+GvGTsgjcTLRQHmTQ
+gGRGbfbgbcSbbcRggvfcwlZVhVMfltddVtrlZdhW
+PwjPHwWssqrHqCqprpCPjwrrQnnDbdnQnGQHnbZbGQZbBQdD
+WvNtLhfLndnBNbJJ
+fvhvvWfTmtzTmjpsVVqsPzMjjq
+GjHMMTMfZbnqHnJNCN
+rlpQpthdlQbnlJqRzqVL
+spphwcpBvcvdvFTqPDFfwwPZTG
+mQfqmtpfBHJCHdlMDB
+cbbPPsZqjqcSvVsCrDllsrdzrzzD
+TSbVTvShqnVjPTPbggSPbNFQWGtfNLtFfWgGmGgGWR
+HJtwgJJwJrcjRRjRnwhVdrVbmGhPmNNrGhdV
+fWFvTDssTDMCBCWsvszWWMCQhZhLLNvNNbhVGGZdRZRdmhmd
+zCTBzWzDDCDCfFCRqCJHcJJctjJSgHpqHqJg
+dgnwgbcwVGbgDWnQbjdgDnBRBBNNqRLBNMLFRMRlqNsc
+fTZHmTmzJMmSSCZChZvZTHRlBNBFqtqftlqssqNqftts
+JTHJvhzCHpmPCSSTzPpPzJHgQVdQQjQdQwjgdpgdDMGgQM
+qPGmWLJWBRRdvqvvNq
+TnZHsTZsZsZZbDtbrNrdnDft
+SShhQQZCHQCSTVlllVVQCjQWNJGFWpWgFpmmVmNgLgFpGw
+TsSmttWMVstNfbMfBcpnFchFwFwZNrrwFp
+DWWCGlHWdhddwpcrjh
+gQvPqglRCHCHCPCPCJbbtSVVWtTVVJvTbs
+ddHSZQHDStZStLtsdDpbCbBPcjGGCqCMBGdNPb
+hWhvmglVznzglgzvzfznwfnfscswPjbMBMjNGBMPGMcjcPwP
+sJWsJfVflWsnhrltrZLFDDRRFTSSLT
+qqCqLNjnPPLZPjqnDjLNgnNrcGwtgddGrhprBJhhJtBGJG
+lTMDsDHmlRRbQQbVfMHFmMBJhwcTddrcpBBGdGGJcJdB
+lHFfQFssFFFMQRVWQVlssLnDSLLPvZZPqWCLWSqjvS
+pJPZRpQtpPQpGPqWbqlWTdLVLJbT
+nnnjCwgrgcCFBfnggBCsMTVbVsWVWdCTTdbb
+cfhcnwnrcggrncrwcjBDcGHmNPRRGRZZQRRdDZzmzH
+NqTrrzLpTNdLLJBBcBGGZGpFHB
+sWbgfHSfSgVgZcmGtStZwBFG
+VjQjjPjhbbfsCbbDQCgsDrRhzMdlNzHTRdRhqdNTrq
+GlqfPdvdBqPgfqDgFMsMVDppbsNJNpMs
+WnmmWCTCjZnmzRjTZRRnFBMNpbZZpFJMSFSNFSbS
+TRRrnLBmzjttRRCmTRjjwLlvdhQvdrhqqlGdPqGggPlQ
+McjMPgPgGPHJWjhPNgPqQbpQSfqffnWVnnnpnZ
+BwwDmBTLRBBLzBTBTvtVqlfpqfbQqpqZbnQFlt
+rDsDBsmvRTBRzCTZsTmCsCrLPgNcPHNhPccNHHrjMNrgdNdP
+GqmLFDrcglvQGZwwzj
+nlHbSNBhhslJfsBfvdZHdCvRzdCzppzR
+JWShMfWMMthSJBBthJsgtcTTcFqcTrmTLrrTlr
+CsBsShBWsBWhvFJWCSsJpbTZdTbdBRgHffRlHHHBgH
+tqmnwwwDmVwfzZblzTRqzQ
+DGtDjGMcntMGnnGhhjJJJsCpFRRSJJ
+GQVVcGgFGcSFvfcFfJVnQmdbTwMLwTTnbnQMws
+ZqZrDWDtNPPHRNPzGCdndLLMLwMWhwbmLddn
+DRqRHCHlCtDrqtNqDplfpvGFjVjvBSFFcj
+zfSfdGPdMVHHdcMThhpwqqrwrqJhcF
+vlDNTWDDWWnngNQZtgwLrJZqLFZLFJpFJjJJ
+NCtWmnvBmDnWQVTmTGSRmmRTPz
+LLvppVLDsppGMGCLCCwNmJMNrNHrNmNNmHFjrh
+lZZfvfgRPZQWNNmlWlFNHl
+nnRtndRbcPttvTpswLTs
+trtzWfszNPlhPlgrWglhZjSLDBvTfSDTmSvmLvfS
+QMdVVGBQMTJDvSjdHJ
+nBppGVVnQQgzgPsPzzhp
+fVQzVrQVtVzHwjtMTjcTCjFgcDCGCd
+JslDPWLbLbZlJBMgBTBPdcFTFd
+JNJmZsDLnLDWmsVqSrHqnHqQwQSq
+mLMZRMRmZLmHLLjNshrrJjRsNNsj
+PnqnBVBPcpWrWfWzDhDsHW
+qpBQgcQncqpBcVgtclHqcSMTLZZQvLLZdLdwCmLMSd
+PZgMwZMjPgBCWgZFgmBGSTtwcccztTzbnGDcNT
+vJLlvvlfdsVVslVHrrpLfRlDcSScmbSnnRGDnbDTSbSSDt
+fvVHdLfLQljmmqqMQPhQ
+DZRstNGrDWGRMlzLHLMpNSpp
+bPgCrCvgnrCPgwplbMSjfHzHfj
+CgnFnBVrFFVmdVggmPPVTTcZBGhRqGtcZqqJhGRGssWs
+WrrCGrDlWhBBZtHB
+ggdcnQpcPRSpzfvJBTfPJvtP
+gSNnSBFnSMBNjpMssDmCrrGmCLqq
+szZGZGGwNdVtpwvbzptzVBQQLFclTJQFlHJNcFBRRJ
+CTrqSfWThWDjJCcLQRRRFLlQ
+rggqfMqPWnDqnVbZvTtPZpssVw
+GJHqPPcJnhthNHnL
+rzzlVDVTQDzSSdsSlzpBspssLhmZNjhZWjjffWBLZhgBmnjt
+TSTQTsnTbDsMvCGwcFvbJR
+PPjtzdnCnSjSthPjWJgJWjgMNBsNrT
+bZHfLLhvhpbfvLhHfQbqpNJTWWNsqNTrTNrgWN
+ZFbZZFvlRvZwhQwLDSdGnmCGmnlmdznD
+RFRRhzzsRsszRlhbrhgBcbTfHgBT
+pJtNmSgwZNtSJLgSqHcbBDDTHPfrSqTc
+ZNWdpNCJtLZpQJLLpmLtZNFGjVgFnsngRGllVsjjCnvs
+sJVRJmmmwwlmzcszMzjRjJVzspCZBsZTTFpTTZvSZTFBFbtZ
+GhNDgNWnGGqDvFSCZvbtFpvg
+fWrCNNffGnhWdrPhWjwjzRlJmcjRcPzlmV
+FdncmqmgcZztLWFvFFvjWLlT
+RsMMJVpfhJVsDVMfJpvlTWTvhjQSQvCbLCSC
+jDBjRrsVfNJgzdZrZwtmZt
+THDDQLZTGQQLQDSSTBCZSZHfFrvvlVRRlPVFfVrvqnvnnH
+VbWWcgbNpjgPrRvrNfqnzv
+swggwpJWwsWscJsDSLTJTmSVZJTBDZ
+wGsznPGGBHdzHhtHDD
+WMVSWqVmrSBMpvWVMFtdClhDtqDDHhdtQt
+RgWVRcmgnPPnjJBg
+BmfPBHBFswLLjQQnLCnzzW
+SRdvvRSGrdlRSvTgRrMVCjVWCZzMnVZhWzTj
+vlSRJrRJvbGGrSSJgWvlScptFmwbmfHHBfsNFmBbfsFm
+