Day 3 - aoc22 - 2022 Advent of Code
HTML git clone https://git.parazyd.org/aoc22
DIR Log
DIR Files
DIR Refs
---
DIR commit 54494bb55617dcfd6aaa8c144fdabcfbb7e0374a
DIR parent 817340456f1f55c470dd29d382901c57f368df03
HTML Author: parazyd <parazyd@dyne.org>
Date: Sat, 3 Dec 2022 11:22:56 +0100
Day 3
Diffstat:
A 03/01.sh | 29 +++++++++++++++++++++++++++++
A 03/02.sh | 31 +++++++++++++++++++++++++++++++
A 03/input | 300 +++++++++++++++++++++++++++++++
3 files changed, 360 insertions(+), 0 deletions(-)
---
DIR 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"
DIR 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"
DIR 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