diff --git a/elisp/day-3/solution.el b/elisp/day-3/solution.el
new file mode 100755
index 0000000..826ada1
--- /dev/null
+++ b/elisp/day-3/solution.el
@@ -0,0 +1,63 @@
+#!/usr/bin/env -S emacs --script
+
+;; -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022 notroot
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see .
+
+(add-to-list 'load-path "../")
+
+(require 'ert)
+(require 'advent-of-code)
+
+(defvar solution-input
+ "../../input/day-3.txt")
+
+(defvar solution-example-input
+ "../../input/day-3-example.txt")
+
+(defun solution-letter-priority (char)
+ (if (char-uppercase-p char)
+ (+ (- char ?A) 26 1)
+ (+ (- char ?a) 1)))
+
+(defun solution-part-1 (input)
+ (let* ((char-lists (seq-map 'string-to-list input))
+ (split-into-halves (seq-map (lambda (char-list)
+ (seq-split char-list (/ (length char-list) 2)))
+ char-lists))
+ (common-items (seq-map (lambda (halves)
+ (if-let ((intersection (seq-intersection (car halves) (cadr halves))))
+ (car intersection)
+ nil))
+ split-into-halves))
+ (filter-nils (seq-filter (lambda (item)
+ (not (null item)))
+ common-items))
+ (item-priorities (seq-map 'solution-letter-priority common-items)))
+ (apply '+ item-priorities)))
+
+(ert-deftest solution-part-1-example ()
+ (should (equal (solution-part-1 (aoc-read-file-lines solution-example-input)) 157)))
+
+(ert-deftest solution-part-1 ()
+ (should (equal (solution-part-1 (aoc-read-file-lines solution-input)) 7878)))
+
+(when noninteractive
+ (ert-run-tests-batch))
+
+;; Local Variables:
+;; read-symbol-shorthands: (("solution-" . "advent-of-code-day-3-") ("aoc-" . "advent-of-code-"))
+;; End:
diff --git a/elisp/solution-template.el b/elisp/solution-template.el
new file mode 100644
index 0000000..d6a3c25
--- /dev/null
+++ b/elisp/solution-template.el
@@ -0,0 +1,29 @@
+#!/usr/bin/env -S emacs --script
+
+;; -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022 notroot
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see .
+
+(add-to-list 'load-path "../")
+
+(require 'ert)
+(require 'advent-of-code)
+
+;; Code
+
+;; Local Variables:
+;; read-symbol-shorthands: (("solution-" . "advent-of-code-day-n-") ("aoc-" . "advent-of-code-"))
+;; End:
diff --git a/input/day-3-example.txt b/input/day-3-example.txt
new file mode 100644
index 0000000..f17e726
--- /dev/null
+++ b/input/day-3-example.txt
@@ -0,0 +1,6 @@
+vJrwpWtwJgWrhcsFMMfFFhFp
+jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
+PmmdzqPrVvPwwTWBwg
+wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
+ttgJtRGJQctTZtZT
+CrZsJsPPZsGzwwsLwLmpwMDw
diff --git a/input/day-3.txt b/input/day-3.txt
new file mode 100644
index 0000000..46aefe5
--- /dev/null
+++ b/input/day-3.txt
@@ -0,0 +1,300 @@
+ZNNvFWHqLNPZHHqPTHHnTGBhrrpjvmwfMmpfpjBjwpmw
+sbdzQgzgssgbglRtmjlwhjBlfrSrMt
+zgsCRzJbsdRVQCDbcgLGWWLnZNGVLLZMNZnq
+tvHhRtZGMvMHvfsrBBCTRbwbccRc
+qznnlpzzDppWlDpQpCrcrwnBNwTZnBTZrn
+PdVZJJqVZdllDPFtMjMgLjGMHvSgMF
+csbhhVDDvzlVDcbccGGvfRjDHCjNLRHRCLfmnZfR
+dFrStSTTmrrrHVfV
+MMgQMMTMVTdgWtwTPwSgWSgGbbppJzlplvhBlPbzhlhbzG
+FDJSTtSGhpPFDmFTZDpTFPmCBBrHqsCBhgBlqqrqrlRrHH
+dQwMtfdzVwWfwctwnfnQCHllzRrsNzrrgNlCgqsr
+fLfQnVjfwQfMdfvfnVvWDvtJPFGDpvZGbZpmbSPP
+TzzCrJcDrTDdLDCJDvGNPCFqlZWlvNvWpq
+RRHfjsQBFsjgjBQsWqGpNvZQqQlPPQPN
+VnHBnRVssnnjsSfBwbMSrrbTwJTcwSDF
+HJCgHCCFFFVGJWTlbqDdlqTDDpgl
+cZccSmLrfZcrmmzSQftdpDtTHdbQTDMQ
+NZZccrrBwZRPNNzmcLSSjJhGhVWCnsFnHBjGChsJ
+qwwwJHTHqdFDtZBFPfFBZFzM
+gVRcLnnWVgggnnnQgVWWNZtZrBfLBzZzBrMPPrZvPv
+GQgQSVRtsVnNRGSCdpmwspmbmDpHmhwd
+bhNgNfgwpbLMhCZMGQBmDm
+FrcHrSllcqcFFMGLBDQlMDTGlT
+FVSddRSJRjLwbjJPJw
+wzhhrTwwTrSsdHQjjSHnBjQj
+gRDCmVgRgMvtMfVMRBBBhWCHQQHGJHZJQZ
+NtgVgttVbMNmvsNlpcrLhLTNPw
+MCgjsfnscgjjgnGgJHHqHDgdHbGr
+QSSmRFPpRtPFQLQRmPzvBzzzDWqrqWWHJGGNrJJbdtVWHJDV
+BdSFdLQzRFlSLmQplffwncfscChhcsMj
+GfVmfnmJVnNVFhnhGmbmhpHvqjrzHZBjfvrtBHHZrwBt
+ddWQldlMdWMlQsLWTLQgMNwBrvjrZjNrwzZjswHqrv
+QQdTRcgTRPDlMQlQPQdhcNNnbJmbGpVnGchFmm
+CjjZCCZfvWZRHHhRtwhvPN
+mrnqlqMqBlSSLnBTLBwmHPPWhPPHtFRPWzwt
+rBVTrrMMSMLQBrndGcddWQbbdZfCZJ
+LFtdjHjLjLqHqstLTjFLFqNMnMhhZdDDNMVbWdDDbhnZ
+CrBpBGnzrzmczcllrphCZZWJMDWRbbZNMDMR
+GwgvzpzvrcmBrnfHjTgqTsgHjF
+rMPPZcplCZlZPwtSwhtBwCQQzB
+FvDGffLqqmQFwmmhzt
+TjJjJfHHVDVnHVgZZlQppcVscP
+hVcqHwhgwwwjHjjGWbvrbBGrsWVWGn
+CttPRpMmPDTWbWltlLBnGl
+pZmDFMmPMfnZwqqwfcqJdHgz
+bSJWhWJCbGGWJPStWTgRQwzDjgQQjsDW
+nFBBVQVrVBrNFMFZVpBBZFZrDgdTldgsRsslsljsRzTRjzns
+rMcZcHcBQPvbbHGP
+mSfmwqfmzrfHwFfmrwvPHqPmMFRlMDDZBCVVRCVZVlZpMRRR
+TWjdTWhTsssLTGsJNWhTQddjRMDMtNNBSCDBllMMBVtDMVRZ
+QhWTQcdhjThsdGbTLGjWHmffnmHwnwHrwqmmfcwS
+LmrsMQnnpfmMLllvTvqvFFzvFHNN
+WGRFVWdwZWZvCbJzcvJNzw
+VjGhDtWGSFRGjVVSFdjjDPBfspPnnMBLPLrrpMMm
+qqqCCJjtqtqCtqLZspHWBdSrWWSzzbzHFWBldb
+GhwwcwPFVDcNFRRGwwzmlBrBWvllrvSzlrcd
+DGGhQNNDhTpZZqqLQFQQ
+QfZmgQQZCCMLfNrgprdNvvdrTg
+hhttsBmBDcFRBlJshJcRrnjnTvNqpddNNqvndp
+JtsGJGtGGJJJHDbctllhZHmMwMQSPVPzHSLMPZmV
+DScSjZcNBZqjDDcLLfFtPfCfjfPvfv
+pTmRlWhdMwTLGwCf
+mRdWCVVglWrCmVHVrVCmdrbSzNcBDBqBZDNHqssscNzqNc
+sPMHGFMsrPNCPnNS
+ffJzllbzpZBllttBtfglgBTbSCVCmmrNFmmbFNvCFLLb
+cpZqpfgZZJtJqJJJfWHWhHdHWHjcdRdFHD
+ZZPfppvzMrlNBFcvFB
+shJgstJwWLVJwcrFFVFrBVNNqFFB
+HwWJdLHWWLcQgssHwwSQSQtQzCnZZMpZCmdzZCzpPzpCPRCj
+QCpLRbsCCQQLbQzCBQDQBBfTTffWtTctJVRNVtnfwtWV
+GvlqqlGlmMrdsvrhmlcTvwJtwNwTvfJfcWTW
+lMhgqGhddjqFFCzBBpbsSQpD
+JJwGJwVQQwVSsSMhQMQgHfgfTtrrfVTNgNNfrt
+dFDWCDdFppvDFmWWWnJTPllHmHlgrqrgggtH
+DzFbWjdRpbdFCjjRbnFbQBGhhQBBJZwMhScwZwJz
+HttvHpHmpJWtHmFNvlvdMSVdPMtLVCCMMMfcfL
+GjgzhGSGSSdCcRMVjMdc
+QshbnghgnGDnqsFrNSJFrsNs
+wJpjMwzjzdVbzPPVpbCHnqGnBqnsBrNCwgrC
+ftTLLDTQtLTGTGtFrgHrvqgQnrvQsCHH
+fTcFFfLSfFFcGFllcFhPJPjWWJSjSWzMWPdS
+ZjNdmjVQVZmvNNZNNZHWZmWtsJnwTpJJswpWwGqJhJqGpp
+FcRRcDblDMLRcRMLFFMDGsJnqhwpqTTJGwnsfnlp
+LRBrcLbbgLFgBbFqDvdHQvCCjNzzzVrZdV
+BdbLWrgdvgWvVJgWnDfNhVnqhCCpDpcq
+tSQPSTSGPMmlMPtQQPJGtGQRCcnqqfnRhCcChDqnCfRScf
+jTssPsjMQMmszPjlTtsJdFBFrJzrbJdHZFHdWH
+vCccctvvTTtZcgLGcZTbssbMWnpMpmLWqnNjpfPPfPjMPp
+wwBBlRBBwDDVFRhFlRhdRRVWPnnpMpffmmffrpWqVNPm
+ddhddRzHlQHFJcGsCztTgbNzST
+fJctfpVWcnfRLfrRwP
+vmmnvDQDZTNTmGGTqTMTvMqwBdLjBvRzBRrRBRLjjBPzBB
+GMnmqSTFFQqttcbcJWgsSt
+rHNfmfRsmfRGfDNcRmcmMQlLCGSnQwwPPCSnzQlSCl
+bsJTBsVhFsVpqFWFgPCwnQwBZzwQzZLlzn
+qggTTqvqgqbbTTFqVqgWqvNmmMMRdffftNfMDMmscR
+rFWQFszrwjsjFWvshPTCmLZLSTLwSLlgSP
+BQbcqVHNVqVpVpmClJgJJHSmZLJm
+qBNNNVdDMGBpDcDWsvdQsFrFnjttfj
+qGhmttmzhtMvhbrLdSHbdSHRzb
+WCBgQJJpjCQlgdHZrfPRPSRbNg
+jBTTDjlnjnJDJTQCVntcwtwMSvqcGFDhcvsh
+ZTrnTqMWWWnfrddMGJPgPLlPbw
+VvmGRVpBpNNmvNvjVjtpNpCNLLLJHHBdgLPdwsdsbLlwwlwb
+GmCVSCRVGmpCRVvttmpDrQZfhnzhzqnDWnrZZTQq
+DQBZHHtWHzSvZvDQWchgqsqqhrrhhcqrcZ
+jdMfwlFfFlTfndwpjjwGnNrqhPTmPSPTPPhmgrPSrh
+jlGbwGMdlnJpGFGjpnFCSJzzDDtWHCBBQBvtVC
+RrbBWBRRWSRsBBVvsPHZDwSjjPdnHwtPtH
+fTgfzMmNJpmJgfllgpjVQtDDndVQpdnHVtPp
+gGmlNclTGmGFhLVcVrvLqrvc
+QcpCTVCZVcCwLcCVvHvvVsCcNzNNSbPRzsDRDSBlsNNzDRtb
+fggMfJqgrWFpmjWMggmrfMWNSbRSPBDbNtJRtPJzlStBbN
+gdnmpWGnZvdQCvdv
+tqqcLqqDDqNtDrqHrrPWlTlTWZTMzTFzQlMPSZ
+pfnpmmppmppRGjwbjmnjwspWbQQQTMWZbCTSZCSQlCllZF
+gmpVnGmmmpjDvVLBFqqvrH
+LqBvJHZvbHGBHrBtGGQTmSVprVzhpVPDPQzQ
+CRdRgwCfhTVDzSdQ
+fRCcjgSMjfNgMMLGbGZtvBbGHv
+HgvtDDzDpvwgvvqdHPZWdMssTTddSs
+rJFrGNFVQmNFVmRnWhhsrTbhwhZTrdTd
+VQGBBBVNQClpcBvBwD
+PWlSzZGmdmGmlGmhggBpvMjvMjFgPJ
+TtLRDtQQfTVcQQQRtBsJFFccFjWhJJFMBs
+HqVCNtWHCDwdnlGwGqSr
+RwdRJgCJRGGmdMbcGbdnTnTtttLLnptMtMtMqZ
+DWsWPFrPqVPPLVCB
+zQWWsslsQHFhDSszDSFQzJJJmvcgblRgmNvCJmvNgw
+tpmFrWTtRpRTtggsSlnQpsnnlSHPsn
+bZwZjNNZGLSrVsGndPPV
+NvrcjCfbvvLBDBWfWFgRRm
+WWFMgWmMhhwDcMMMDcmLWLtQwwsjbsQHvZHbRjZfsZzH
+PTCplTCdSJJCpvPGNSvsbsfHtbQZzdHjQtjjsj
+vNGJPpqJvJvqghgFgWFmLD
+RlRpLTZCjWRjRWwpRsjHjbSbqMqMvvnbnGMnGGqQCq
+gddfDNczmgPthNcDdgPVnbbzbnJrJJGSSVJJQS
+BmDmcDmcmhffdBHlRwjRLpwlWQ
+prQlfzlWRPzgQWzlMPMRppssHHsDsHjwnHHbWDwwbwjL
+vFBJJtZNShJvZFtdSqtmqjTDVHVGDHbwVHDVsDnThH
+vcjBZZdZqvCfpzRfcgRp
+cggpqgRlSpNsgNggbjjj
+ZZSSJVLVLFDZWNGjCWWbCjsF
+vZLvfZQQfQtJVJDQShLrLfMmnldmwqwTqqMcMTMTndrm
+bQBMtBPddtMFbJFhRGzMfzvnRGRSvWnW
+TmHTqlVHwVpQqjmwGvSgSpnLpzfWGWSn
+TTrDQCDrrTmDCCCVHHQZBdZFPdsNdFBtFDhtFB
+fjpQvNZcGhGGTtQS
+DVJzvbVmHbbtSTSTRStzTM
+VDvmqllmJfjWlnplNs
+ZmdHZJjvQLdRjpmLJrqqZBhhtCschPfBPcrDfPffCD
+MWWSMMwnwlSgzWFFgSwzVwzqcfDCfChCbbtssbfDChcD
+NMqFTwGqMwgwwgjHRdHRjdmQmQTm
+TTqWPCWRhTWqPNjPJMNtrlbJFttQwwrBrlbwlc
+GfpSDGZvpQffSHDgggDZrHctFmrHncnnwwbBtBrt
+SQGfLsSLZsqMTRNMPT
+HdBdnBZJTZBBmsfwwBlh
+MjCVjzwqWrfzplzW
+vVbqCjjRgjwMbnbGHJScScZHLL
+dwwwtCdznvDDFrMrrw
+GmWLQmgQmHgcdGcsTgTDqDbSfFWfMDMfbSNqvr
+QhTLmVQHLmdLTjGGVptRnZpZBZVRpPpP
+CzjFpzRHdtBFBCqNqSbJZWcQJTSbQjMTWZ
+wGwVLlGrdVGwDnwsgfMSZvJMbWJcWlvbbMSc
+rDfsgggrGnGngsPwdVLfDnmDtzzFNCPHtzCtFHpBRqhPztzR
+mrgWzBcDtVCcQcCCdscf
+LRJhjRjPZvqSRGhGjLgMCdHpMNwQCpMHpHMS
+GRvGJRJjqPZbvGGhRjnqLJWtgFgtzTzDrFnTWrlTlllW
+cbmcddlffvbTfvFflpZzsMVNznNVlnqnzqHMNM
+StWJBQRWLRWNPNMCswRVHC
+BJQBhSWhjSthJQGGWWggJDDDfbdbbfHbddbrFrddvFvv
+jFqvqvWZWDtBJrrlrq
+TzGcbHcrmVzMGNSmTcGDtBthJCNtsJDlBCghgP
+bTrnTccnLSrrTHbnwfLjfdvRRwZFdwfR
+drHVrdVDfsDbVsdVDbVqRwbZZwCRCCCJlJThwRgT
+jFPcFpBSvtNPzSFcjcQpcQjpThZCRltGRRRJhwCwGhwgwhRm
+SQSzPBjjPPSvLqqssdnqLZLMsM
+bQTWlWlvQclNwwWlCCLStCRSSjStpj
+zVZZDdBnBmgzVsjsLthSpshdCL
+DfBnrmBmgzHBfDHmnGrNFCwQvTPvqCTwqTFGbF
+srSWJnrbmlWlbhzsWszSvPGwvgDhcjdjjfvhjvGv
+BRRQFLtNfQNMpqpQHDjdDjDcZZcvwZZHPH
+NLCNCtRQfRttRFRCTqMBqQQrzrbzrlJmVVbsSWmVrTbSzJ
+RHLfLcSRTFSghLRHGbwZmMZddgJswZsbMm
+ptqjtCzzQztqCjDlBGpDpbMZdwmMbZsdwNmdJpbs
+tttzCVllDCtDQnQBVHGHWvWTLWcLSLHf
+FVlNnPqbGTHftghggJqf
+zLcZWZpWWrcrZLLZDWrwMcrhBFBttChBmBgptChhtFftmf
+LZZLrDrrDDMrcwrDwsWFzdTlnGQPQQVbdbnsvnvsVQ
+BbPNMJNbQvDbvPLwHflczlwwzf
+pZjWZGZjFGdgpnVgZhghdmcflrlswzzcstlrLwhtwc
+WZSdqFjqSqSWdGFjZpdMTTDNTvLCRRLLqRQMCN
+FqgFGtbgTvRwrLqhvw
+JCCWJWCdJMQNNsSWsMPQRDDLDSDLwTrrvnwfDvnD
+HdPJlBBHCCQdBMWdTtVbgHczGVGjmtzG
+PLlZDLZDsFCvbDQv
+HVcTmVmJqVzqczfzbjvvCFMRfCsWjMvR
+cqHzTqJTTTTzzmnmrctrBlLlvSlgLdZvSwSlpw
+SbMMNJjmgMnJdSSbjVFZVSQrlQfWVQVWZh
+PtqDqPGcLHzHpqLcRzRsfQFfZlfRfZfRFVsl
+cTDLcqGCzDTqzzDLDzqPTtJvbBJMnmvjbdlmJNvmdgNC
+tDJDlZVqJGbvHNQbNFFsFPmLns
+ppczpzpffGwfBNLGmn
+WShzgTTpWzhWztJJGJSvtvvtjq
+TbZFTFScnCZFQRTCqQdBjdJqjBqjjQDB
+rmmLpLLfzrlmslMBHvdRddNDDJDrqD
+MWwLPzmWfpsMmmlMPMWLwRTZTZnnTcVCcZFCwSnZ
+SqmClqHssNWCqPTcWcGhBTchVV
+ZnnnDflRpBVTTVhPBZ
+DpgfvnvMfCsqlMtSll
+ZzLMRZpLMwwppZqnQGvQgBSvlNVlBFFNFVrg
+HcqhTmhmdDTPFTJgTTFBSgJN
+mccPdDDHbssbtwZMqpbzCRGM
+TgqnTltgWqLRSRnlqddngFfrvHvrBTfCCFrFVTvVCf
+cwNJmPzQwNzczzNsJGhhHfhrfvVHGvtvVVfC
+jjtbtDswcmPWlbgRnRdMZL
+TmpTBBwvspTptRmsmTGLQDGRHGgVGLSQSMHQ
+ZlPWqjWrzjPqdrlzbrbrwfrWLHVMLnHDMVDQnLQfQfVngQLS
+zNwbrrFWbFJpmpmvvt
+RMQQMwHMMzcFsWsDrWfcpJpS
+LLhZmGVLhVlTZfWWfWpCrDsGSp
+VLVTnqjjZngtQRFjvzDM
+gmRBpjrpRvCfRCrBgvjHShnbnngbgSJnNsHMHS
+ZDPTwGWtqwHhSnbcMNJw
+DWGGqtVVqldWZzMzWmvjrjprLRFjRVvvff
+tCzVzsVtDFzssnSsgdqJdCNqJhmgmpqq
+PZccPGvQfRLMQwNdhpwhNh
+jLrcbRjPZBrcPdjRHFlWnVtBFslSWznW
+vvvbJbWrLvFWHzZzZRhB
+chtwTmCNlRRZzRPT
+hmcCssCswrMDGMSrsr
+LStGBsQLlllhzMzs
+dzVZDNWRDdZNDTZTPvWVhhphpMlfMccRmfnlMlRn
+VFvgTrNPdFWNNFNFTzTFFSjSQBCqrtQwSBGLLBGwGL
+qGJSJhWStdSfWvSvtGRRnzRDDggrgvnzsmRP
+lTTLpcljjGlLlLNBpjwFQDQmRnrRDPrPscRrDDng
+NCNjFlHNCTVjpwGqGSVbJddqZZJM
+MbWdgvHFlMvmzTzShvmm
+tqjqpLsNsrrsjstNLpQrGVhVBzrhVcfmchDcTPVVmc
+RqwjqjqsGjjGGQNjGpQZpqRFJgmMHwdbFWgnHMFdwmmCFW
+HHHLcCcVHjTHglsB
+wDSRwzzRpMSdNSPSwSpRbqvgBsdqlgTvBFBjgFvvgB
+RpbzPssDMWwNRbRNRPDsDhJthLQVGLJcctQCJQfQJCLm
+WsZgbNgZVCCWbVVVmgZbCCRPccGnzPBqJjzWJBJPzvBvGz
+SpfThHtrHFBPPzJvPntj
+QHDhhrhpTQpHhQHnfwnTCNlbZCCDLNllZlVsNCNl
+QtzJFRQLMRnZcZsfcphlPQ
+qSBbjmWSCNmVldSqqSqmjCSZshfwfrPPZZfcPVZfhgsgPg
+HqBbHqBGSlNBbltnLLHFJMtRvRTD
+tcGtDdMcttttHNBlMctldlwjwwqqCLCwDwZjFCZhmnwC
+VrJgvWWsPvRgVgrJQvfQfzgVzZwCbLZmnmwCwZqmnhjZbnLj
+sJpffsRWWRJVWWpHltSpnMHGcMTl
+zNqRbqSbfdcTLLfS
+ZVPzPnVvdLwLDPfF
+VWnzQCVWZVMzQRHgqgqrHGtGMp
+PbHpWfWPvRfbzWPFfRpPDtBwSHMwCBgDwBjDtMMM
+hTTdZQlcnTcmqVTdcddrDgBSwsjjBgqBtsCgMD
+hlldTmdJJmJdZvzfFfNJFJgRzR
+PJWvJBbWsfLQWsLvmCqHCcNLHqHLLcwDqV
+dQztrZrdwHhptqDH
+ZrMGjgMSrdzQGQRJPvGGbm
+RmjljZChlDZBCRRvlmNSLSqMNLzwLvppwQSQ
+sTnVnPrVGsGTPddJrfgQgqLgGpMNQtgNtNzg
+sbbTfTdcJPnHbsJfHsdcmDDmmqBZlClmjBRDCZ
+CJmHLmHFFCFbHsbJsJqvqhQqLDhQZvnQDZnn
+wGwppTjdWPdgFpGcScBqNnNqNhQlDqnDlZZW
+pGcgGgTpGjFdwpSFVgSdpPjrMCMffzJzRzztRfHCRsVmtbsz
+CgBClZfCflPflNZRvfQswwmwmwQsQhgppdhm
+qbzDGrjLLNLDHDqtJmmhhmQdhwpQhhbp
+NLGqVqjDjjGrMFrvFWPBRBZnCvfFnT
+tbrrHsgsVmmmbtgwVsQRqjJMmqMjQfJfLFLD
+ZvlBGzdvjGfRFJQJ
+dBppnnBBhdzZncBPlznpnNdWHSsbWthbSCgHrVfgSSwVgr
+VRvMtRVFHQLvMRQFQtBctrthshTTgCmhTrgWhWZsZZ
+lzJlGBSPPhzjgZsTCr
+wJlpJPfDSpwBnddqJDdpPpcvMFHFMvNbvnNMFHHRVVbR
+CPShbbdlGCdQqlRPGPdlDWDFzjtFjggCDJgWczfF
+mrHrTrrBMBsmNsrwsBpnfpggDDcjjDDpjzFJzzjtJz
+BvsNvBLHrrrNvwBTNNsNGbdQhlPGGfqhhRGqLGdl
+PSSlPtlStGhPNMtwPMPJzDddnbnDNTDDnJqjbz
+FFVHRwVLvFvVrVHrZcLmRHggjDmdDnDnznnznzQjzdmJddbn
+WrvgRgcRcRrrcRvgcVrHVrwCCSfsCsGsllhMSSSSMttlSCpG
+hBPJqVZTqqPSlGlfddfddZvl
+JWWMJCpnMrmztzdjnzld
+RbWsrwMrpbRspbWgpwhLJPccNVqLLPSVgVPV
+hcTrWqcfhwGfWrWMjHjGvDHPmJMDzF
+ZtlsnZZtLBSbSssnbndjDJJFHFHJPHPsHMTHHM
+ntRZtSbtZgZStTqchwQfRwNpcq
+GfLqrsqQGgPgjjQGVcNvTpTpNFcWPvPPpT
+bRnRLnMZFdCMcpvT
+RnRhzRlmlhhHhhmhRsqLrfzrGVSrGBSGrL
+fbMffwdZsncrGcfG
+qDBjSSLqhLBSmDbjqNhqTLjCGrCHGrvcGWcpWcrGWnCrpm
+STLDqbhTLqNTNSRhlwZlJlRQFFRwMdPQ
+TVVGNFggcjPPJzwvQlRRwRvSlcSc
+frsBbWhtSRzSLfRf
+qDCqddbsWrqzhsdNmdJNJHjTggFFVV
+NTWTDrSdFTLtPTGf
+lZqjHlVRvRltLtRWFMtFLL
+qvjWzzvVbZpjqllggscdchwDrCphwsdhrD