~pmikkelsen/aoc2022

bf7ed4ed5a1d2068851dfab1a5dd5e5b7b2e9f08 — Peter Mikkelsen 1 year, 7 months ago 8b6568a
day3
2 files changed, 338 insertions(+), 1 deletions(-)

M aoc.pl
A input3.txt
M aoc.pl => aoc.pl +38 -1
@@ 5,6 5,7 @@
:- use_module(library(files)).
:- use_module(library(dcgs)).
:- use_module(library(dif)).
:- use_module(library(ordsets)).
:- use_module(library(debug)).
:- use_module(library(time)).
:- set_prolog_flag(double_quotes, chars).


@@ 20,6 21,7 @@ solution(Day, Part, Result) :-
% Day and Part combination.
solve(1, Part, R) --> parse_day1(P), { solve_day1(Part, P, R) }.
solve(2, Part, R) --> parse_day2(Part, P), { solve_day2(P, R) }.
solve(3, Part, R) --> parse_day3(Part, R).

% Time the stuff and test that I got the correct answer
% It will print the time for each solution, then a 0 for the first fail,


@@ 29,7 31,9 @@ test(results) :-
	solution(1, 1, 69528),
	solution(1, 2, 206152),
	solution(2, 1, 15422),
	solution(2, 2, 15442).
	solution(2, 2, 15442),
	solution(3, 1, 8240),
	solution(3, 2, 2587).

%% Parsers for each day



@@ 58,7 62,35 @@ day2_game(2, game(A, B)) -->
	nth1(P, [0, 3, 6], S),
	day2_outcome_points(A, B, S)
	}.

% day3
parse_day3(1, P) --> day3_bags(P).
parse_day3(2, P) --> day3_groups(P).
day3_bags(S) --> day3_bag(A), day3_bags(B), {S is A + B}.
day3_bags(S) --> day3_bag(S).
day3_bag(S) -->
	line(All), !,
	{
	append(Left, Right, All),
	length(Left, N),
	length(Right, N),
	sort(Left, L),
	sort(Right, R),
	ord_intersection(L, R, [G]),
	day3_value(G, S)
	}.
day3_groups(S) --> day3_group(A), day3_groups(B), {S is A + B}.
day3_groups(S) --> day3_group(S).
day3_group(S) -->
	line(A), line(B), line(C),
	{
	sort(A, As),
	sort(B, Bs),
	sort(C, Cs),
	ord_intersection([As, Bs, Cs], [G]),
	day3_value(G, S)
	}.

% day4
% day5
% day6


@@ 104,6 136,9 @@ digit(D) --> [D], { member(D, "0123456789") }.

input_file_name(Day) --> "input", integer(Day), ".txt".

line([]) --> nl, !.
line([C|Cs]) --> [C], line(Cs).

%% Solvers for each day

% day1


@@ 135,6 170,8 @@ day2_win(paper, rock).
day2_win(scissors, paper).

% day3
day3_value(C, V) :- nth1(V, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", C).

% day4
% day5
% day6

A input3.txt => input3.txt +300 -0
@@ 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