Compare commits

..

2 Commits

Author SHA1 Message Date
Nathan McCarty aff4844a1e
Day 3 Part 2 2022-12-03 13:52:10 -05:00
Nathan McCarty 501494ad29
Day 3 Part 1 2022-12-03 13:29:11 -05:00
2 changed files with 375 additions and 0 deletions

75
03/Main.idr Normal file
View File

@ -0,0 +1,75 @@
import System.File.ReadWrite
import Data.String
import Data.List
data Item = I Char
Eq Item where
(I a) == (I b) = a == b
Show Item where
show (I a) = show a
-- Define the priority of item
priority : Item -> Int
priority (I char) =
if isUpper char then
ord char - 38
else
ord char - 96
-- Spiit a list in half
splitHalf : List a -> Maybe (List a, List a)
splitHalf list =
let len : Int
len = cast $ length list
halfLen : Int
halfLen = div len 2
resultLen : Nat
resultLen = cast halfLen
in if len `mod` 2 == 0
then Just (take resultLen list, drop resultLen list)
else Nothing
data Backpack = B (List Item) (List Item)
-- Parse a backpack from a string
parseBackpack : String -> Maybe Backpack
parseBackpack input =
let items = map I . unpack $ input
in do (left, right) <- splitHalf items
Just (B left right)
-- Get the duplicated items
duplicatedItems : Backpack -> List Item
duplicatedItems (B left right) = nub $ intersect left right
-- Shared items across a collection of backpack
shared : List Backpack -> List Item
shared xs =
let combined = map (\(B left right) => left ++ right ) xs
in nub . intersectAll $ combined
-- Chunk a list
chunk : Nat -> List a -> List (List a)
chunk x [] = []
chunk x xs =
let head = take x xs
tail = chunk x . drop x $ xs
in head :: tail
main : IO ()
main =
do file <- readFile "input"
case file of
Right content =>
let backpacks = catMaybes . map parseBackpack . lines $ content
priorityTotals = sum . map (sum . map priority . duplicatedItems) $ backpacks
elves = chunk 3 backpacks
badges = map shared elves
badgeTotal = sum . map (sum . map priority) $ badges
in do putStr "part 1: "
printLn priorityTotals
putStr "part 2: "
printLn badgeTotal
Left err => printLn err

300
03/input Normal file
View File

@ -0,0 +1,300 @@
pqgZZSZgcZJqpzBbqTbbLjBDBLhB
wHptFFsHttHFLMDQDFTbbj
fVfvsstwPHwNwfNGfHWRSnlpClcJzCWCzddSrddg
bdgHbZJHgMHgJgJctDtVssVcpFtq
rNNQqBSzTcBPTDsP
GWNNrhGnNnWNzRfnRQRbhCdqHMbdmbZddbmCmd
BSBDzrSwrqccDDwbfcBjsRwggClslTRWGWGMFlsF
dnhVhLJtzNZdgCRlsTGWCRJG
ZHZdNzptLNtPhPdnprPbbDBrSqrSQPjbqD
rlSwlrGvwTTSwSggCJGQJdhVgJGQ
jcrHrMWfNHNzQgVH
WbfjmBMrBrrmLtqMbwwsPTvPpwvBPFPsws
NRNcHzbzbMRcNPjPrrlBPlbtBl
CZwVCCpWggqprwtlHlssHtPr
WpmLghCVCqCnmVTLnccRQvvQQHDhNQzzzc
NvGTmNGDJsrCmCWPHpCP
nqfVfnFQnZQfFqzMZBPtppcBPPCBptcrbF
fhRSSVfqMZZhMnQfjVzShNNlLvldsNDdvvljGpllDT
JGRNWRGJbGmCGRbLmGpqShhcQpQgCcncScSQ
FFdtjvvpvVFnQhhnQhgf
ltvjjtjHlzBtWRmNPLZRHLpH
FFCJFsvgLsjLgWzJFWJgGwBDbwnbwlDddqffnjnlnd
pTpTMQpMZHQhZQpHPZMmTMlwhDNNddbnDqdDwwlbVNVd
SHpmrHPZHQpmvFrqsFvgCsRq
TtWpWhQlVZrVptJhtrtdbLPDPbjFbCCWCvFFbLSN
zMGlnlsgSSvjjGSF
msznlgcwMnRwznmBqTZQJrddhfQJtBJtZQ
mwTwLftmqqSHWfCfLHjWftBthNNNVrlcFRVNrNrRTrMgrRNg
pvJPJQPGPPzbpVpVlMBVchFl
bzQPQbQQdsDZPDGJnBGnPGnjHDttqqqqmCjftLCmWmfftC
ZNpfdHcccTfdwfMFNjBttMgMbBnvlvjBmB
QVPsGzhbszRLRrgvtgjWgljlRtgt
VJrVLsSrzLzGPChVGzbrrfpTSHFfDDHSdpZFfHpDTZ
NPpvDbmbsmdbNvQvDdWQpmWSnnQCLBnCcQSCnnLlwCBlZz
jggrtGTFhtGfjhDVjrjgMftFwnZcwwBCnzzVwBBwSZcVwLSw
JfHftHhgftgFJWPdPDWRPDvPJv
ZSLLZJGglDSVNDGGGgGgngGmHrfLzmHvvjfjwLhHvLfHHr
QqFWszFMTQFdFPMqBmWBHvfhCwCjhHff
pTsdppTMPtqqdbnlNVzJVbSSnbZR
gBqDccrrJDwmpTWHHTdWMPWWZFHF
RNfnfSwRjlLSWjQMHWvQZtvH
GRLbnzNnzVRLCqhwzwBmJrmc
CcGnZGnGlRncsspmFmmcmGRJJzCDTzjLBSDfqjwDDzDLDB
hHrNdPWhrbPdhPgVWvvrgWdfwjfNzSqfqjLqzfBTzJzJTz
HHQhhvMWbbdRswmlsmwsQc
rrwhpZPrccRpQdcFDJNqhtqtqMLhqfMh
lTtTllgbzTlJsmDMvbLbsf
VVWBTgzlzgGnngrtQRQRtCtwZRQB
HGnGvVdLhlFcmvPWmT
jwBLqZgjrtjqmFsQTscPQs
ZBNZtwLwztLpMrfZBLMdbdnfSRVVfnGbnfDVGh
LmBBBzQrBgBhmmggmtdVdhJNMHNdhsHNDd
ScSZbRplCcMnSpvCfCCZcpPwtJPNtHPHNVVNtPddwlNH
CpvpZGfnffSpnvRSSbcfScQBWrMWmjrmFFBzTGQWjMmL
sljSjSgsjcCLllsjVgSjCtspQwvNNhdFwFQvwpbtmhwhpN
hDqqWzGRHHfRrJnrWrfWfHBdFmBFmBbdBGBpwmFdFpww
TDnDHZrWWHhTjPClClSP
wGNQGQDGjqqmwHHs
MWvvrzgfsdWsvMrSdqJqcpgHgnqLFLnjpH
fvsPMsPdrTZhChNDhbhPVN
sbMgDDtttVvpMtcJsgcGGBBfGLBSLclQTGPS
CWHWzhhRRHjqRmSGPfBSzJfSBnBB
HjjRHWFWhRRwHNmCCRHhhFdNDNrdptMstJvsbMDtVptd
RnSwRsLsnSswjDDDBJPrJv
cpzCzlczHTJVQhvBQlDVDj
WmGzqTmHSsffqqnJ
vQSPHMwpmpQMLGfTPVLRPRVP
hsWhnncsJqbGjGfcfBMMRR
sqdNWqqghbsJslgsJqgWllMWDppSvNCHQHDSSHrHrHCSvvCQ
ZWWnWMmmndQZmffcdZcmssQqrsptVwwTtQHTCTHH
SvvrPzvvFDzGzTszpGGwHT
vrRLjjrPhLjrjPDSfdcMZnmdcmJcfcRf
HpqWhDJjzmcTSbmMBVBb
nCzfLtFnZZrcbcVVfTBfsc
FtRFzgrRtnRzrFwzDjljpjgHNJDlNlhN
gtNRRSSrRmjshHmm
PQDMwPwMppcQQcvCFlhLhGmjflctlnHGjf
QwDMFFdtwFDQJZZZNqSqJSqBgBqTNJNg
cddzbbzQflTDcDfRbcfbJVsplVsChNghHNsSsVpn
FBWFWjFFCjWPBSPPJsVpppPSVH
CrCwvjWvmqmvrBvFwZRGQQDDcGTcfbddZdRc
ZBQqdGLFmmzDmTZz
PvrVMvGgWmwSmllglS
NrfGnvWWPhfpspsGvLJBsFBbqJCbdQcLBq
DrwTrlfGThhQTpDdWSWgdgwLLgBSZH
bqbPRVRmzJCLWSgCzCLH
jRtbNVtNjNqRqsJtbjbMDQHQGlchfQpfsTcHpGHr
tMnRcnpDcZtpQDSCCsGGHvcGPGqGsr
mzJmjWJNlbfmbhzVCCPmZrCZqPGCgZ
JWhzjJBdWnMLZtSBTw
tvdLttzvtHLztnQpssdTPbMqbqMTdTss
jhSRGNjjSjhSDCNhRgRgclNjmfZTPnbTMqJJfqqsbMflTfMs
WnCjcjDRCChSNSCNDjNhGVDtQvVLHzFrpFwFrHFQQwQpzp
fLbLLLLQhVPhBVmDwmCfwsdwwDps
GNtctFTSrrJqGGpHFcTJFTwsslwmlmWsdsqRRCmqwdWs
ppctFTTSgHcSrGrrTGFcrrnhhQbPLbQZgzLvQQVVvZvLhv
mBBWnnBbBCtssmRThRDllR
wfwFQcpHFpddFrwpGcHSHdcjQZZlqqDTTjZqssRhWllssj
dWfrcSGFpgrSzFgMbCPNPLtCtVMV
llLlGLJJMjJMGVSvVMSLRRHvjCZtgZccttnmbCtdCcmCCztn
sBQNqPhsrrqrrwrsppsHswsZcmnNCzdZtbgntcNgcctnCt
WWFBBsPwpWPwBBHpFFrWGRMRLlJfJVMJRJLWSJ
vgMvQnPMntnSQPSgMvSMpNJfJDNNRpfZmGQmbDND
HlbjHHBLjCHGZGpfJLpfwm
qdHWqBbbbjrTzdqFqssvtPMSSFFg
TGDfDHSgtTzPPbnCtnNtVn
WQrWMFpMWMQbCVNPRWVWWv
pdpMMrhrprQshlMFjZpdjZMgmlGJJGlGDBmgmHgmJCSBHG
zWWBjZZjWPFFPPnBCVdsqmnCdSLn
rJvpbvbpGgTGrNJGGpRRhsCqSsLhnsmTVnSLTLHh
gNNNJDbpvGNfvNSDPPWQWWPZZWtjlQfc
RRVbWWWvvZVWmsFSsDNbHsDSsg
CrTwJQJpJpCCwvlJQTTPsfzDgfwNhszfszFhzFDh
ttQJtvjpPvcqTllJTPtPRGMGRGLWdVZLVZjWdMjj
NnPCTQWMMQNNNWwWnMzpHczzsZcCscddHdGs
mqRgqqVlLgqmfVzcGpzzSHGZcgcz
tjmZjZmhqftlJRJhlTMPTPQbrPBBWnhnnT
hvTQqpvTqjvhpjnCqmCnSDSFDWFFLSSSWDnSVL
tZwGgsfPcltgcZltRgNSDSSSSldmWMLWFVHd
GrZtwRPbGwwPcGRsZGtRtgQJJhCjpzmTBTvJzJrjvzQp
rwmwqDWwfDtztnFGBB
LPdpdVcdPGvPVgZsPtlhTTtthHBhHF
dRdCjvpCRpjvCMZgvLgRVJJSWMqmbwQJbMWGWQNbbQ
CMCcMcDGzBGPmBmznTNbnGbrswNTwTvN
SSHVWZphqWWJJzNsbnFwFVNjbz
flLQqHzzgtQdcDRB
mdzvFtllBgFttGnvfMwMVRRZCThSNZVhMd
pDTrDHjWWJPqjDjDSMqNwSZRZhNSRNCZ
jpcTpQPWLLpDTLcTrPjPDcjzzFLFzvgLzlzfvGFgfmgFzF
fQVVPzBpFVVrtrsJ
PldSLNSmWwMCcCMMcCNN
mSPlldllmPdRnLRwmbnLwmwvTjBTghTHQjfgjpZHpfHHfZbZ
pmfMcfprMqMrZZJcMZMGWTsFCVCTVPPsVTWCGPDP
vrvvvLRbBNNBbvBbjBHbQhgDslPTWsPTlFDsFTFwTWlDVQ
hgjznNBjHHgrhRHgrRLRnRfSSJmdqMfffzqJptdmmmdd
nRnPlCRPWPMFqwPLwq
tBGfbSbHtBVQgrbrqfTFFLvTNLLNGTGMLdws
bgHVtBDtqnqqlJRD
SdSJrHssFBSVsNtMMdRWnTRhRl
vcvfDvgvcwvFRlbnwWRlMhtn
DDDqcqFZQPgcgcfvDjLDfVrsSVrHBLJVpLpCSppGpS
gJGTFLTdrpLdBcWBvnllvlMvMC
RRqbbQhwNZZwQRPrSZWnvHSZWSvSZC
fQDNRsrsQzfbDrbsqwdtpgJVjdJdpVfJFLFF
DzWqFvqpqFSCSzGRGmwfntGjmR
cbhZNJQBtgMHJbJcNcrmfhrRrswmfRwnVrhG
bJNgbNdJBBPMHbcMNMWWvSFpDLFvCStqpLdv
sLsHTsTbRLRwqssHwHjFrPDwJDppzFDJmmcrPJ
BnZGBlMZnQSgSnvVSMmJzPDCzFcrLPPJmpDG
BgBffVLhQLgvnBRRssfqdfHbHdNT
HRPVmjqBqVjVRRPmcPmJjbDgLDDshbfRLlfbfLbhlL
rtTzSMSMFpTzfgDzzgsLfLHZ
rNpGpSSHwMTrrdHGNtTPmVjnGGjVjmBGmmBjJB
DBqDQDQHSFlHsFnN
MfLfwwLMWGLrWMMnpSlsnGJJlbFVjV
gRhMZzhrFLWQvTPqTPcvvh
NwwsHwtnFCtzcPdbvrQbBqclQq
VmZLLTLfVpwMBrVVqqMM
mgJDjTgWgLWDppJZJTWZmSRzCtRHhGGwHNzshGFFCSRt
RGCCDRdFZdRCMzzGCDGCmGHMfqbNNNLQLfFqnnqnNQqVPnQn
glgcrwrJjJccBwdSfnSnVqrqQVVnNq
jvtBsjstgstjltBcWzTGGddHTWDTZCmDGm
HJHGZZHnctSSDhZtmZ
MjjQFSvQlRjSdRqdqvVSqCCPtpRpPPDfDmfPbbpphC
SNsWqMNvFFqdqVMgwwBHrGHnHgcWTJ
jBcbjSmSBbbCcPcMjmbzFPhDMDfrfGRhGQRMnGQfdrDh
wHlqwlqpwZqcwVlqHtJVJLTdhndTDnhffftTGDTTDdTG
JNllcwpZZlpZJjNzSzSCNjSmFN
FhwRPzmPWmQQmwFPGGMGGRPnRHHVfDbvJlvDlHSvDTDfVHbD
NpjcpCdqpZZvwvJVfDdDHT
twZtqrBrBQBMBPGn
fBFGjbLLFblmbWFmVfBvrvMdMdncnrdNbdQNTr
shZHHRZhtsqJZhHhgZzgJzVJrrSSvrMdMQrNTvMNJQNrdn
szHwgtHtwPzPLpVFpVPLlfLC
mrsrtrWjljjjvwwgNnZfDHJDqTqrHL
FccMPFQcpczpdMPhMqJngNfqfnFgDnnFfg
BdMpdcDPcpjBmlBmVWts
VvwTTlfVlblwwSsbfTdzVqjhzVjpjjqjqpzV
rwCWFGmJrNCmMRHmwRFPmHQQhBLBzdLqBjhLBHZdQB
rFwDrMNRJDJFPRmCvcTcbDsvstTgfTsg
zhRzdRRChHCFGPDRvWRWvWvHpZpscrrmrZrJcmspJmJZFfpM
wQqLtQLtnjbjVnVjbBgjbBnbMZMZJlVpZfJprsMprmGZZZml
jQjjNBLLwjtQBtwwdGGDCHhNzzWDzTPD
DzzQnCMMznFnCdnFFlHtlmhVRtmVVmVhSF
PWrPPRTfLJJtfbtBfV
wsrggZsTwTTWGvDppQMRjjMCjMZp
fTjzZVTlbffCMvjgMpSFWBNBWSFsvBsNNccF
nJdwdPRQqGqbGJQbmmQQhRSBBBSsPPHWNSWFBtDNBsHH
nnQhwwQGdLqqwnZbpfjMfzpzLbLj
jgTgCwgjMgGLhvRrHrHwhvhV
bqSsSsZFZBlFsBlTSppVvVvnVHHvHnhp
qFlbPbFFsWFsBlFWbsbsmzTcMjLmtfcCmcWtgzgm
rrHbfBLbfMcghcmrcCzg
RDStDtvdZRQdJSQWWWdvFSgNvVcnghhmnnzhVPhczPch
ZtJpJttSZStwtttFDQmLGTlqMLqGfwTTGLfTGG
MrfLWwfBwgghvLmNvmHHHGGQHQSSscscVvTV
dDjZjDPJtFRzjdTTsqVjTpqHsGrT
JbFtlbPRJCzffBrgnlMWmg
ZFsbbVLLdZppLFpcJjCCQJlGcQCMZq
TwRtRBdBClCTGlcJ
rwBvBzDvwNNDHLHzfHssdHhS
gdhgftTNGTbpqJqjjgRJ
lcBcMLFzMzLFMzFzPjRBQjQPQpSqhpbp
mzzmZHZZnZwLhtGfddVsNCCnGG
lblbPGSGrTLRwqZLvP
FffCCFzFCWzzvmjRJnRTnZZNJCTqCR
gdhztVjhHMsGvrGVVB
ZJZjJGHZhDJRFJHjDZjhPNFgFmrnVmgVVzVBscnzSg
bwlWtMwtbqdCvlQCplmsqgnVVScnVgmnmzNs
WMWltTtvvCdwCCRPPfTHGcJDfGZL
svqQJLvSSZrZZZCFCBDPDCMTDpPwMWDPCwRw
GnlnGbdldjhzzhpPDTWjmtMwPmWW
HzVbGnnbchblbnbzcQTZBZrQrFSHvLBBJv
MmgMmVpcRDlvbvpHJF
GSGTLTwhwwhzQqTqwjFlbdvdbrlrbrrDnDvHlQ
zLNNNtwGFCMsWsCWNR
tSTDDDftSqSsTDnTtCWNrbFsNJJvbzJbvJ
dhRdVHdMGRgPJbjNPbzgvr
VllQmQdhRHLhhHmLlGzSqSQDDcDBnnBnqDfSct
zBzJWZBLZNNGLsbTvLbmbT
QdtQwfdnPdPTbsRQGhRvbl
pgtPgPjVDnpVnDtPTFFrJJTBCcpcrpCW
GnWMfBfdCGMbjRNpnzvvNLRNVv
FShJDJJscwwszNjvNjNNqZ
tJmccwlcFlFcHlPcHFfdrbBGBGfjCGTfBCPf
GhlcQsZNQZWhpcGhwlPmqnnqnjJjLRnqzJsJLJ
VTMtTtDTbvbMTfvdJqngjmqzdjmJjCLm
vHtbHTDBFvffBPGwLLZBQNNl
bDphJrpbpnBbDrdBvJdDFBMtMlfgtsFSstfGPPgggPGP
RZmNjTZQNVHQHNGSgMsfPlShSs
VmchTLZQLjVLjmTVmQVhTmwVrWJqbDqddBrpnWbvnqrqcnJB
jWWgThWtgSvSSWlJtlShllPcHVnJHPbMHPcPVPbVZrHM
fGdfRsRdNwfRQhnpcZdVhVpbPh
fGhwNBqNjqStFqtj
TSTBrSDlQlTDrrQclrBSLffPvcfcdVjVMGGPLjLL
qnbnbngFGhhhPfjjVffjff
RRWbmgpnmqlrCwwSrwmG
mZZTsdBZVZBZLVHdFmsNnCrCVQQbWvWjWNCnbg
QSffDGwGGrPGWrgN
hflwzltflDpMpDSllcMDhSShdsdZQdLZZdHTssZzmqLzFmLB
LLRJRshLfsJfWnLBTlTBlFzNrnrBBl
qmmVwmdHqmqGHZdHbbqSScdZQTjjpTFFVBBrlDrzDFBTjFjF
wZZwmcbvHgqTmGccmvdCLhCPJsJCPWgMLPtJsJ
TWbbbNbJJjJbqTjtJJjTQCtnGSBndMGCcSZSQwCB
mcfRfrcmrDRrPsdQSGZQGnsSQMnB
DDRLDRDFPpgmpcgPghpfgvRTjbhTVjHljJjzlVzVTlbHll
rPlPrPllBGgJgdJfHgfjJt
pppZVfFDWssMfFVVFMpsMMVmHCRLdcZCRtvLRdCtCJdHRttH
mDMfDFDmnMMmsMFznDFpzswbNbPGwwSGBrGrhrTzThSl
qDNFfCCNWLfWWhqhDGPMMZVwgpCpMbJwJCvV
RdstRRvdtmtPVpppVbVtrp
zzncSRdsTdQTczQBsLvvHNhDWGjDHNLDSG
bNNpcfJcCtNpHFsJsGGjLGzmLjLmGzlFGW
qwqZdnQnQwnhhzmnMWjmNlMzLr
qhwwQSwStJbHNftS
WlfWSwDftzRltBWVlRDlsmBJPcsZPmcJnmPmFhrn
dLQbQbvGTddTvbjQCbLbhmCrZZPPsshPPPrJZrnF
QgFjQHHbMvdRMVllSqfSlf
MDPJBWWPggVlPVDMSljdZNNpwjwbHZpNbDdH
mGmzcThGrtntHhthzGctRbNRNwRNzZwfdZpjpdRj
ThtcvvtThFcnqFQSHgBSVJll
hVqhFLBngHVFtJjtLCBJVSbbPNNbSmfLLTSNSrrLTb
vsdZZpvQdczlMdMvzlcvvdQprbGGTfSbWmzPTgmmGTbmmfGP
vgRZZMgwdgsQZdMBqVhjhJqBhJtRhq
bgFQbMMbTbQhghddFTFGnmSmsNdzHvzSSzlcHsls
fZDjVtfZLqwpqtCfCjCjlvqScrvzqHSzszzSnczr
jpftjCfWCjCfCRZZlpCpjRWQBRTQQbgBBTMbghgbbPGJBJ
VZZrbBVwbbbVVvgbntnggNRJqRRNNccMcNqJcJ
jfDPfDdGGhDGfGFPCcZQqMpRNJhqTcMc
LPfffPHGPDjPFGWSdHPFjWtlBlwvlwBlbtmLltsmvtZb
TTfJDfrJTSrHMcVMJDTfMcMDBQBPwnPlznPszFVBFgzFgnsn
CqtmWNNGBPzwbbwm
htdCthhWGtWWGNZqcZpJjwwHHHMcHZDM
VvjQjQCZLbbSbTPpSHtFzsHzppMfzz
DJrJWBcDcWJWmmcgGRGRGWGDzHHwzdfRHpMztMpfdFdFdzdM
DmBgGDqJNhGcccWmcZLjTPLVLTQhPtvvTZ
qfhvwNDQqwDGdGZZGwPTTw
STsJgsRtJMZPjlsmdpbs
SCTTHTWHNVfHQqqq
djCDgllgjJjDRRNgRlDdBgtpQHfhQTrLLrGBtzrQhpBH
SVcsMGcPSbqSPmLTPHHQTHrftPTr
VcWnsScqSScWcZbMMcSVGbNNlgDRlgCCNgwWvvRJdNdj
mgPllfRgvNmPGQGGsmQNWlpFtnBPFShncTFShtFShnjS
tLLzMJJwwbbdrrMLqLVJMzVZFnpTTFpnCSSpShCjBJhpThph
HMdVwbbLMbDMDVlmDsgtNtNRfgsm
hNsgsgzNZRghPhZBdssPQfzDmQSmmzQGJWzfCDJJ
bblVHvvHHTljwFCfGrvmfmmJBmGQ
THMMFVwqTPRdZptMBP
QvcPGSvQLjmcQWSGWWGjLCNhhqpCdBCNCbJNdVWpCh
rwtLlzZggLHnHlwHRDdVqBbCdqqVVhbqVnVh
zRDzwRrwlRlRTgrDtllmQGLcPjGLccFmTcGSQc
RWlgQlbcWBwzsJggTfhh
GrnLjHLjmLjjGSLjSDmfJJpfThhfSWJPqJqhwz
vLvDDnDNrCVjCmNDbFlBVZdVRQlRbWcb
mTlwFngwmlLlvsmLHmHsLJhJFfcbdpbNcjCNCbpccb
tZRzBRzBBRQzPqGRqrVQtjjfbCMcfMfCMMjVjfCJNd
SDBBPtZZTdnnwSvg
nddNNMMPNBnBNnBTQSShlSHghlDHBr
VcccVmqJsJsjlTmzTDggmHHT
VqLtFCqFJfVtVjsNgPNNMMWNwgtNvn