From 0c814889b5c058700b20742cf9c219509b69e940 Mon Sep 17 00:00:00 2001 From: MaxJa4 <74194322+MaxJa4@users.noreply.github.com> Date: Fri, 8 Dec 2023 22:02:12 +0100 Subject: [PATCH] Part 08 --- .vscode/launch.json | 18 + Cargo.toml | 1 + src/bin/part08.rs | 69 ++++ src/bin/part08.sample | 9 + src/bin/part08.sample2 | 5 + src/bin/part08.sample3 | 10 + src/bin/part08.txt | 752 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 864 insertions(+) create mode 100644 src/bin/part08.rs create mode 100644 src/bin/part08.sample create mode 100644 src/bin/part08.sample2 create mode 100644 src/bin/part08.sample3 create mode 100644 src/bin/part08.txt diff --git a/.vscode/launch.json b/.vscode/launch.json index 575be12..426ebe4 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -206,6 +206,24 @@ }, "args": [], "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'part08'", + "cargo": { + "args": [ + "build", + "--bin=part08", + "--package=advent-of-code-2023" + ], + "filter": { + "name": "part08", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" } ] } \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index e2d1c8a..7542d12 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,6 @@ edition = "2021" [dependencies] cached = "0.46.1" +num = "0.4.1" rayon = "1.8.0" regex = "1.10.2" diff --git a/src/bin/part08.rs b/src/bin/part08.rs new file mode 100644 index 0000000..c67c719 --- /dev/null +++ b/src/bin/part08.rs @@ -0,0 +1,69 @@ +use std::{collections::HashMap, time}; +use num::integer::lcm; + +fn main() { + let t1 = time::Instant::now(); + + let (sequence, rules) = load_input(); + + let d1 = t1.elapsed(); + println!("Loading: {:?}", d1); + let t2 = time::Instant::now(); + + let mut current_positions: Vec<(String, &(String, String))> = rules.iter().filter(|(k, _)| k.ends_with("A")).map(|(k, v)| (k.to_string(), v)).collect::>(); + let mut starting_positions = current_positions.iter().map(|p| (p.0.to_string(), 0)).collect::>(); + let mut counter = 0; + + for c in sequence.iter().cycle() { + current_positions = current_positions.iter().map(|cur_pos| { + if *c == 'L' { + (cur_pos.1.0.to_string(), rules.get(&cur_pos.1.0).unwrap()) + } else { + (cur_pos.1.1.to_string(), rules.get(&cur_pos.1.1).unwrap()) + } + }).collect::>(); + + for (i, cur_pos) in current_positions.iter().enumerate() { + if cur_pos.0.ends_with("Z") && starting_positions[i].1 == 0 { + let start_pos = &mut starting_positions[i]; + start_pos.1 = counter+1; + println!("{}: Reached {} in {} steps", start_pos.0, cur_pos.0, counter+1); + } + } + + if starting_positions.iter().all(|p| p.1 > 0) || current_positions.iter().all(|p| p.0.ends_with("Z")) { + let d2 = t2.elapsed(); + println!("Reached ZZZ in {} steps within {:?}", counter+1, d2); + println!("Total: {:?}", d1 + d2); + break; + } + + counter += 1; + } + + let lcm_pos = starting_positions.iter().fold(1, |acc, p| lcm(acc, p.1 as u64)); + println!("LCM: {}", lcm_pos); +} + +fn load_input() -> (Vec, HashMap) { + let data = std::fs::read_to_string("src/bin/part08.txt") + .expect("Could not read file"); + let mut lines = data.lines(); + + let sequence = lines.by_ref().next().unwrap().chars().collect::>(); + lines.next(); + + let mut rules: HashMap = HashMap::new(); + + lines.for_each(|l| { + let mut parts = l.split("="); + let name = parts.by_ref().next().unwrap().trim().to_string(); + let instructions = parts.by_ref().next().unwrap().replace("(", "").replace(")", ""); + let instructions = instructions.split(',').map(|s| s.trim()).collect::>(); + let (left, right) = instructions.split_at(1); + + rules.insert(name, (left.first().unwrap().to_string(), right.first().unwrap().to_string())); + }); + + (sequence, rules) +} \ No newline at end of file diff --git a/src/bin/part08.sample b/src/bin/part08.sample new file mode 100644 index 0000000..59e2d47 --- /dev/null +++ b/src/bin/part08.sample @@ -0,0 +1,9 @@ +RL + +AAA = (BBB, CCC) +BBB = (DDD, EEE) +CCC = (ZZZ, GGG) +DDD = (DDD, DDD) +EEE = (EEE, EEE) +GGG = (GGG, GGG) +ZZZ = (ZZZ, ZZZ) \ No newline at end of file diff --git a/src/bin/part08.sample2 b/src/bin/part08.sample2 new file mode 100644 index 0000000..34ffa8a --- /dev/null +++ b/src/bin/part08.sample2 @@ -0,0 +1,5 @@ +LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ) \ No newline at end of file diff --git a/src/bin/part08.sample3 b/src/bin/part08.sample3 new file mode 100644 index 0000000..a8e2c98 --- /dev/null +++ b/src/bin/part08.sample3 @@ -0,0 +1,10 @@ +LR + +11A = (11B, XXX) +11B = (XXX, 11Z) +11Z = (11B, XXX) +22A = (22B, XXX) +22B = (22C, 22C) +22C = (22Z, 22Z) +22Z = (22B, 22B) +XXX = (XXX, XXX) \ No newline at end of file diff --git a/src/bin/part08.txt b/src/bin/part08.txt new file mode 100644 index 0000000..5963208 --- /dev/null +++ b/src/bin/part08.txt @@ -0,0 +1,752 @@ +LRRLLRLRRRLRRRLRRLRRRLRRLRRRLRRLRRRLRLRRRLRRRLRRRLRLRRLRRRLRRRLRRLRRLRRLRLLLRRRLRRRLRLRLRRLLRRRLRRLRRRLRLRRLRRRLRRRLLRLRLLRRRLRRRLLRRRLRRRLRRRLRRLRRRLLLRRRLRLLLRLRLRLLRLRLLLRRLRRLLRRLRRRLRRLRRLRLRRLLRRLRLRRLLLRRRLLRRRLLRLRLLRRRLRLLRRLRLRRLRLRRRLLRRRLLRRLRLRRLRRLLRLRLRRRLRLRRRR + +GLJ = (QQV, JTL) +JSJ = (DKN, GQN) +MGD = (BPL, LQC) +VSK = (SPH, DDH) +TSB = (MKP, TKX) +HPD = (GKG, XMX) +BLZ = (HGN, KRR) +BMQ = (JXC, HFC) +GDG = (BVJ, NBL) +LST = (PVJ, DPR) +QQQ = (RLV, SNJ) +TMV = (XGV, KCL) +NPZ = (JRD, NHL) +DDH = (NDR, XPN) +SFQ = (TKD, SQH) +RNK = (TJN, NFX) +FRS = (SCJ, FDV) +RST = (BSQ, MHQ) +DSM = (FRX, DMN) +GBN = (VBL, XRK) +GLH = (KNN, PKP) +JRD = (LDP, RNH) +SPV = (JNR, FRK) +PMD = (FXP, BKL) +MDV = (MGD, FHM) +MGG = (KMN, QPL) +FNX = (FKG, NLT) +FPH = (QXS, PBR) +DKP = (QFT, QQQ) +XVH = (PVP, GBJ) +SSP = (BHD, KRM) +JVR = (RHB, LDJ) +HCX = (RNK, LGT) +LRX = (SFN, GXD) +DXN = (NQX, KNL) +GNT = (GHV, DKG) +QVF = (NJN, FSN) +QHQ = (FXN, PNP) +CHX = (DHN, BQB) +GQD = (TLQ, XXG) +RMF = (RVF, KKR) +JHN = (NRG, RCC) +MBG = (XPV, MSB) +XJN = (SQT, XXJ) +JNR = (VTP, XSF) +NXD = (DKP, MKJ) +LSS = (KHS, BSV) +SQH = (BLH, VCG) +TLM = (DCG, BQL) +HTG = (TLF, KRB) +GGM = (KLV, PTG) +PVJ = (BHR, TRH) +PRP = (QLC, JPQ) +CVC = (KVJ, FTM) +RMH = (RPD, FFK) +MRL = (KFK, LJK) +VMG = (LSX, FPH) +DKQ = (XSM, CXK) +QBD = (BGB, GPS) +RFV = (QCG, NJD) +FDN = (QFL, DXN) +RMV = (NCJ, PMZ) +BCJ = (MDD, TMG) +BMB = (GLH, MKK) +DLQ = (JKX, VGS) +NBL = (GFQ, PRQ) +NVG = (SCS, JTS) +CBX = (MXQ, QSM) +HFJ = (NXX, VRX) +FMQ = (KDV, HFJ) +DSK = (BND, GFJ) +TRM = (MMX, BTG) +XKS = (GXD, SFN) +LDJ = (TFQ, CJK) +LFP = (TFS, LST) +PQS = (PJR, SMD) +MTA = (JPD, MVX) +FMM = (GPC, BVB) +NJD = (JMG, DPL) +VQJ = (KRM, BHD) +PXP = (BPB, JJK) +JDM = (HHQ, JXD) +BJK = (SRN, DRL) +MRS = (RPT, SQF) +RCC = (DRD, SPP) +XPG = (XRK, VBL) +JLR = (LJQ, XDP) +KLV = (SKX, SKX) +JBB = (LRB, RRT) +NDP = (KMS, DDJ) +XML = (TPD, VKQ) +TPM = (PKJ, PGR) +DGQ = (JFK, TMB) +XTL = (MPK, CTL) +VSH = (BNH, HJR) +PVG = (SPV, KCS) +CCQ = (LQB, VTK) +PLS = (HPS, CVC) +GMQ = (CTG, QHQ) +PNP = (VSK, JCV) +JPD = (KKV, FQP) +PRL = (KRB, TLF) +NMT = (HXL, NHV) +DLP = (KXR, BXQ) +NFG = (DSR, HNX) +BPB = (BTM, MGR) +JPL = (NMT, QMD) +HJG = (XJD, HHX) +BBK = (VVF, SBN) +GQL = (XNX, CKR) +BND = (SQB, KFG) +VRF = (JKS, LGG) +PXG = (QMD, NMT) +FKG = (GBS, JLR) +NCJ = (NFG, CQH) +CVM = (LFD, NPZ) +GQN = (SMM, PQH) +LJQ = (LXQ, KVG) +PFK = (HHQ, JXD) +KLQ = (JNB, DKQ) +QRP = (SCB, HCM) +LRB = (RMD, KLN) +XPP = (GMK, LKL) +LFD = (NHL, JRD) +TVK = (TMV, TJF) +MQD = (HTG, PRL) +MKJ = (QQQ, QFT) +QLF = (CHX, XSR) +MPP = (XMK, QFP) +HQQ = (PCS, PDC) +NXX = (BTN, KBJ) +JBQ = (GGH, FJL) +BGB = (JSF, MNP) +BRD = (VMF, NTR) +HCM = (RHX, KJG) +NKP = (GHV, DKG) +XJK = (TRS, DGQ) +GPS = (MNP, JSF) +NCM = (VMJ, CSC) +LSX = (PBR, QXS) +VLF = (MTL, GVK) +XFT = (XGS, CRL) +HLR = (FMM, QLH) +FFR = (XXX, BGX) +MRB = (XJD, HHX) +TVS = (MTL, GVK) +KNL = (KDN, HQQ) +PNV = (SQF, RPT) +HVB = (BBB, LLG) +RGX = (RLK, MSX) +MKB = (HNP, NGM) +FKL = (XMK, QFP) +LXQ = (GNB, TQH) +CQF = (NGF, NQF) +BSV = (KFX, HNH) +SVQ = (PXP, XQM) +BHD = (XVH, GDN) +QQB = (PCB, PCB) +DCG = (GRH, RGX) +RRT = (KLN, RMD) +KDN = (PDC, PCS) +RHJ = (VTK, LQB) +LVR = (VSH, QGS) +NHT = (LQS, DMB) +PBR = (TCF, JCC) +GBJ = (MLT, XNB) +BJB = (XPR, MBG) +PQH = (MCH, LMB) +MPM = (BSV, KHS) +SGB = (TKF, PMD) +XQM = (JJK, BPB) +TLQ = (FGM, CRC) +FXP = (BCJ, TDR) +VDG = (VMJ, CSC) +XGV = (LHS, LTS) +JKP = (PXG, JPL) +KFQ = (TSB, RNB) +NHL = (LDP, RNH) +TRS = (JFK, TMB) +PMM = (RHC, KMQ) +QMB = (PPJ, CNG) +MKH = (DDJ, KMS) +NCG = (XXX, BGX) +DBG = (SND, HMN) +GVK = (TQD, JHN) +KKM = (KKL, PBT) +HLP = (JPQ, QLC) +GPH = (JKG, DKK) +XQP = (GLH, MKK) +HRF = (BGB, GPS) +BXQ = (BDH, GQT) +NDR = (KKM, LRR) +HQR = (RGL, RMX) +PCS = (DTB, LDS) +LQB = (GMQ, HRQ) +KKR = (KTV, CMB) +NGM = (KFQ, BQJ) +KLN = (XFT, JRL) +HRR = (RHJ, CCQ) +XSF = (CKX, PLS) +BTG = (GDG, JDS) +PBT = (NVG, DVP) +CPP = (VSH, QGS) +MLN = (VGS, JKX) +JRF = (SKN, RMF) +KHS = (KFX, HNH) +DDP = (QJG, XKJ) +FGM = (TVK, TNS) +QJH = (XSL, QXP) +TNX = (NBV, KLQ) +JVC = (FBR, PFT) +XPV = (TLM, PPK) +PCK = (KBG, TGJ) +HRS = (VKM, JVF) +DKK = (NHT, ZZZ) +TJN = (KTL, QLF) +THT = (JJQ, LRJ) +JNB = (CXK, XSM) +CRL = (VXT, TBG) +RVF = (CMB, KTV) +GQT = (PBB, CVM) +QGF = (MGT, SKV) +SCJ = (CQF, KRQ) +SCM = (DPB, PMM) +KNN = (XLQ, VPB) +PPK = (BQL, DCG) +LPP = (HJG, MRB) +RRM = (RXT, PBZ) +DCT = (FTF, HVB) +PQP = (PBQ, HVR) +NTV = (SCM, GKN) +XXX = (LSS, MPM) +BKP = (LXL, LXL) +BLH = (QLV, SFJ) +SPH = (NDR, XPN) +CVF = (KDV, HFJ) +XDK = (RHJ, CCQ) +NQQ = (NTT, FVL) +TQF = (XCV, NDX) +VRX = (BTN, KBJ) +KFX = (XLN, FDN) +DMN = (TPT, JRQ) +VVF = (TPQ, CDH) +XPN = (LRR, KKM) +LQC = (TMX, LHQ) +XXT = (TLR, DDP) +PBB = (LFD, LFD) +GKF = (CHM, XTL) +SNJ = (NSR, KVD) +FKS = (PPL, PSM) +BJZ = (MVX, JPD) +JSF = (GQD, GQP) +BFM = (QXR, MVF) +QSD = (JHV, JKP) +XSR = (DHN, BQB) +SVM = (PKJ, PGR) +XXJ = (HGF, MPG) +KRB = (QMB, VNX) +XJD = (SFQ, SGF) +HGN = (KBF, LXS) +TKF = (FXP, BKL) +KHB = (TPJ, CGD) +JFK = (JJX, DMH) +PMT = (HGC, HJQ) +NBV = (DKQ, JNB) +FMN = (BJB, HSV) +HPS = (KVJ, KVJ) +GLT = (LXL, NFN) +PSM = (PMT, CKP) +RSM = (JRF, PDB) +KVD = (PFK, JDM) +CSQ = (HJG, MRB) +PKJ = (HDR, TJQ) +LRJ = (JSJ, BFS) +KFG = (KKT, CQR) +TPD = (THT, KBB) +KBB = (LRJ, JJQ) +XGS = (VXT, TBG) +RHX = (XJK, QND) +QPL = (DDN, STH) +BQB = (XJC, SBH) +KCL = (LHS, LTS) +XPH = (KXR, BXQ) +QNA = (NHL, JRD) +KVJ = (KHJ, KHJ) +QJP = (RNK, LGT) +QFL = (KNL, NQX) +KFP = (HLR, LCV) +QLV = (PMX, BJK) +TLR = (QJG, XKJ) +NLQ = (XML, BDS) +JXD = (MQD, GBH) +LXP = (HRR, XDK) +DJS = (GLJ, RNF) +FLS = (FMB, MRL) +HXL = (BXS, FDM) +NQX = (KDN, HQQ) +PGR = (TJQ, HDR) +CGD = (DGS, VKN) +KRQ = (NQF, NGF) +JSB = (PNQ, DHV) +MBJ = (JCK, QRP) +MXQ = (DRG, DSM) +HMN = (CBP, CPG) +JTL = (RST, SPD) +DKG = (GQK, XMQ) +NJN = (TVS, VLF) +LTS = (JCB, TQF) +XNP = (JVF, VKM) +RTG = (XXJ, SQT) +KNT = (LRB, RRT) +SFL = (LXP, CDN) +GXD = (MMT, CNX) +SMC = (XTL, CHM) +JCB = (XCV, NDX) +DQT = (RBJ, QGF) +TFR = (MKH, NDP) +HTP = (CSQ, LPP) +JKM = (VVK, SHX) +LGG = (RPH, NTV) +NSR = (JDM, PFK) +QFT = (SNJ, RLV) +SQF = (GRG, RSX) +SFD = (FFK, RPD) +SCD = (SNC, LGQ) +CXK = (VDN, SQM) +LDP = (NLQ, DGV) +CDN = (XDK, HRR) +HFC = (QBD, HRF) +LGT = (NFX, TJN) +VKM = (QJP, HCX) +HGF = (SCD, TKT) +VGS = (SGB, VXD) +MGL = (FTN, LBF) +FDM = (DLQ, MLN) +FTP = (HJL, JQG) +TCN = (MRL, FMB) +NGR = (QPL, KMN) +NDX = (DMX, LTG) +GVJ = (JDG, PCK) +MVF = (KVR, TQK) +MXJ = (FPQ, VBV) +RNH = (DGV, NLQ) +RPD = (RFV, PGG) +JKG = (NHT, NHT) +XNX = (JDB, DQT) +DRL = (GCM, DSK) +TCF = (TCJ, SVQ) +LCL = (NJN, FSN) +MJM = (QSM, MXQ) +JJK = (BTM, MGR) +SPX = (JDG, PCK) +QLC = (DHJ, PVG) +GPC = (XKC, RTT) +TJQ = (XPG, GBN) +HSV = (XPR, MBG) +JKS = (RPH, NTV) +XDP = (KVG, LXQ) +JDS = (NBL, BVJ) +TQK = (NCR, HTP) +BLX = (TFS, LST) +KRR = (LXS, KBF) +XMQ = (KHB, MMC) +KBG = (DBG, MQR) +LRR = (KKL, PBT) +LFV = (HVQ, MNJ) +HGD = (MNL, PDJ) +GLB = (NDP, MKH) +CMB = (VDG, NCM) +TKD = (VCG, BLH) +BQJ = (TSB, RNB) +QBT = (MKB, RKM) +GJQ = (BTG, MMX) +SGF = (TKD, SQH) +RMD = (JRL, XFT) +DDJ = (HRS, XNP) +HNP = (KFQ, BQJ) +FQF = (MNJ, HVQ) +PJT = (FRQ, KFP) +RKM = (NGM, HNP) +VBV = (LVR, CPP) +RBJ = (SKV, MGT) +MPG = (SCD, TKT) +BHR = (BRM, FJC) +VTP = (CKX, PLS) +PBQ = (RQC, HGD) +RMX = (FTP, NGJ) +SMP = (KRR, HGN) +KBF = (RMK, BMQ) +LSL = (JSB, VPL) +KRM = (GDN, XVH) +DHJ = (SPV, KCS) +XNB = (QFH, PGQ) +TGJ = (DBG, MQR) +LHQ = (FNX, KFF) +GCM = (GFJ, BND) +MJQ = (BBK, KVM) +NQF = (SSP, VQJ) +VPL = (DHV, PNQ) +HHX = (SFQ, SGF) +FJL = (MGL, XKH) +HNH = (FDN, XLN) +RLK = (LCL, QVF) +SND = (CPG, CBP) +CNG = (DJS, HVS) +VDN = (QBK, MXJ) +BRM = (SMC, GKF) +VTK = (HRQ, GMQ) +MVX = (KKV, FQP) +TDR = (TMG, MDD) +SQT = (HGF, MPG) +TMN = (HVB, FTF) +GNB = (BFT, QXK) +QXP = (MJM, CBX) +GQK = (MMC, KHB) +QGX = (NDB, QSD) +TMX = (FNX, KFF) +BLD = (NBV, KLQ) +RHC = (NXK, PJT) +XJC = (QKG, QKG) +GBH = (HTG, PRL) +TPT = (TRQ, XXT) +FTF = (BBB, LLG) +QJG = (FKS, PQG) +FVR = (LXP, CDN) +XCA = (FVR, SFL) +VMJ = (KHP, MDV) +NTT = (LFP, BLX) +DMB = (TCN, FLS) +CQR = (LRX, XKS) +JFR = (TMN, DCT) +TRQ = (DDP, TLR) +BXS = (MLN, DLQ) +LLG = (LSK, XMD) +CBP = (RHF, BRD) +PFT = (SMP, BLZ) +TNS = (TMV, TJF) +DHV = (VFX, VVR) +PPL = (CKP, PMT) +QND = (DGQ, TRS) +VBL = (MGG, NGR) +FHM = (BPL, LQC) +KKT = (LRX, XKS) +LHS = (JCB, TQF) +LXL = (LJH, LJH) +BLT = (GGH, FJL) +JQG = (XCT, FRS) +KCS = (JNR, FRK) +SKX = (JKG, JKG) +VKN = (NMS, QBT) +DSL = (FMN, PJN) +TPJ = (VKN, DGS) +CKR = (JDB, DQT) +LKL = (QLQ, NXD) +SMM = (LMB, MCH) +FSN = (TVS, VLF) +KMS = (XNP, HRS) +MTX = (LGG, JKS) +CHM = (CTL, MPK) +HRQ = (QHQ, CTG) +QCG = (JMG, DPL) +TQH = (QXK, BFT) +JXC = (QBD, HRF) +JVF = (QJP, HCX) +TJF = (KCL, XGV) +XDS = (QQB, QQB) +KJG = (QND, XJK) +CTG = (FXN, PNP) +BBB = (LSK, XMD) +DMH = (NHF, JKM) +BGX = (LSS, MPM) +RHF = (VMF, NTR) +KHJ = (JPD, MVX) +SCS = (FNJ, RSM) +VFX = (LXV, XPP) +XLQ = (RMH, SFD) +HDB = (HVR, PBQ) +PTG = (SKX, GPH) +NTR = (LDG, LKV) +KKL = (NVG, DVP) +XKH = (FTN, LBF) +BDS = (TPD, VKQ) +QKG = (FBR, FBR) +LDS = (HQR, BJC) +KKV = (MPP, FKL) +JRQ = (TRQ, XXT) +MNP = (GQP, GQD) +BTM = (GJQ, TRM) +RPH = (GKN, SCM) +TQD = (RCC, NRG) +FQP = (FKL, MPP) +VFV = (QQB, HPB) +XSL = (CBX, MJM) +GKN = (DPB, PMM) +PBK = (QBH, GQL) +HPB = (PCB, RRM) +MCH = (RTG, XJN) +KSL = (FVL, NTT) +TCJ = (PXP, XQM) +RNF = (JTL, QQV) +BXA = (NFG, CQH) +KVK = (PRP, HLP) +NGF = (SSP, VQJ) +PJN = (BJB, HSV) +SFJ = (BJK, PMX) +CPL = (LDJ, RHB) +MKP = (TRJ, BFM) +RPT = (GRG, RSX) +PRQ = (XPH, DLP) +DSR = (KNT, JBB) +VPB = (RMH, SFD) +QLQ = (MKJ, DKP) +FNJ = (PDB, JRF) +SBH = (QKG, JVC) +PDC = (LDS, DTB) +QFP = (MJQ, HFK) +CTL = (RDD, KVK) +LXS = (BMQ, RMK) +VKF = (QBH, GQL) +HJL = (XCT, FRS) +KTK = (LDF, HPD) +RMK = (HFC, JXC) +MGT = (JFR, HXB) +XLN = (QFL, DXN) +FRQ = (HLR, LCV) +FMB = (KFK, LJK) +NFX = (KTL, QLF) +LMB = (RTG, XJN) +JDG = (TGJ, KBG) +MNJ = (GVJ, SPX) +VMF = (LDG, LKV) +SRN = (GCM, DSK) +JCC = (SVQ, TCJ) +NGJ = (HJL, JQG) +XCT = (SCJ, FDV) +FFK = (RFV, PGG) +NFN = (LJH, RMV) +GHV = (GQK, XMQ) +HFK = (KVM, BBK) +MNL = (GLB, TFR) +BPL = (LHQ, TMX) +LJH = (NCJ, NCJ) +FDV = (CQF, KRQ) +PBZ = (SFL, FVR) +MSB = (PPK, TLM) +GGH = (XKH, MGL) +MPK = (KVK, RDD) +VVR = (XPP, LXV) +NMS = (MKB, RKM) +NXK = (FRQ, KFP) +BSQ = (JCS, MBJ) +XMX = (DSL, CTX) +NHF = (VVK, SHX) +MMC = (CGD, TPJ) +GQP = (TLQ, XXG) +TRH = (FJC, BRM) +RLV = (NSR, KVD) +DKN = (PQH, SMM) +MSX = (LCL, QVF) +SKN = (KKR, RVF) +LSK = (PNV, MRS) +RDD = (PRP, HLP) +DRD = (JBQ, BLT) +GBS = (XDP, LJQ) +TFQ = (BLD, TNX) +QGS = (BNH, HJR) +LJK = (CVF, FMQ) +NCR = (CSQ, LPP) +HJQ = (SVM, TPM) +JCS = (QRP, JCK) +KTV = (VDG, NCM) +MMX = (GDG, JDS) +HVS = (GLJ, RNF) +XMD = (PNV, MRS) +VVK = (XDS, VFV) +FBR = (SMP, SMP) +XKJ = (PQG, FKS) +AAA = (LQS, DMB) +LCV = (FMM, QLH) +PPJ = (HVS, DJS) +DGS = (QBT, NMS) +PFG = (LDF, HPD) +HVR = (RQC, HGD) +QXK = (BMB, XQP) +BTN = (GHD, JXP) +DPR = (TRH, BHR) +KVG = (GNB, TQH) +GFJ = (KFG, SQB) +JCK = (SCB, HCM) +QSM = (DRG, DSM) +XPR = (XPV, MSB) +RNB = (TKX, MKP) +RHB = (TFQ, CJK) +PGQ = (VRF, MTX) +CDH = (GNT, NKP) +BVJ = (PRQ, GFQ) +LTG = (QGX, LVL) +XJR = (QXP, XSL) +JCV = (SPH, DDH) +GDN = (PVP, GBJ) +HNX = (KNT, JBB) +SFN = (MMT, CNX) +RGL = (FTP, NGJ) +VCA = (KRR, HGN) +ZZZ = (DMB, LQS) +GMK = (QLQ, NXD) +LKV = (VMG, SDQ) +PMZ = (CQH, NFG) +KBJ = (GHD, JXP) +PNQ = (VFX, VVR) +TPQ = (GNT, NKP) +SPD = (MHQ, BSQ) +XCV = (DMX, LTG) +BVB = (XKC, RTT) +BQL = (RGX, GRH) +JTS = (RSM, FNJ) +SPP = (BLT, JBQ) +VXT = (CPL, JVR) +MTL = (JHN, TQD) +KMN = (DDN, STH) +RQC = (PDJ, MNL) +FTM = (KHJ, BJZ) +RXT = (FVR, SFL) +QXR = (KVR, TQK) +HJR = (QJH, XJR) +BFS = (GQN, DKN) +TKX = (BFM, TRJ) +DGV = (BDS, XML) +DRG = (FRX, DMN) +VNX = (CNG, PPJ) +CSC = (MDV, KHP) +KMQ = (PJT, NXK) +DVP = (SCS, JTS) +LDF = (XMX, GKG) +QFH = (MTX, VRF) +RTT = (PQS, GBD) +KXR = (BDH, BDH) +SMD = (GHT, GGM) +TMB = (DMH, JJX) +KHP = (FHM, MGD) +TLF = (QMB, VNX) +FRK = (VTP, XSF) +KTL = (CHX, XSR) +GRH = (RLK, MSX) +QMD = (NHV, HXL) +KDV = (VRX, NXX) +LGQ = (VKF, PBK) +FVL = (BLX, LFP) +MMT = (NQQ, KSL) +CKP = (HJQ, HGC) +STH = (BKP, GLT) +QBK = (FPQ, VBV) +CTX = (FMN, PJN) +HHQ = (GBH, MQD) +JHV = (PXG, JPL) +FJC = (GKF, SMC) +TMG = (PFG, KTK) +XXG = (CRC, FGM) +BDH = (PBB, PBB) +FPQ = (CPP, LVR) +BKL = (BCJ, TDR) +GKG = (DSL, CTX) +LVL = (NDB, QSD) +BNH = (QJH, XJR) +TBG = (JVR, CPL) +CQH = (HNX, DSR) +VXD = (TKF, PMD) +MGR = (TRM, GJQ) +PDJ = (GLB, TFR) +HXB = (DCT, TMN) +XSM = (SQM, VDN) +HDR = (XPG, GBN) +GFQ = (XPH, DLP) +XKC = (PQS, GBD) +SBN = (TPQ, CDH) +RSX = (LFV, FQF) +PVP = (XNB, MLT) +LDG = (VMG, SDQ) +LXV = (LKL, GMK) +TKT = (SNC, LGQ) +SHX = (XDS, VFV) +GRG = (FQF, LFV) +QQV = (RST, SPD) +CNX = (NQQ, KSL) +DMX = (LVL, QGX) +CRC = (TVK, TNS) +JXP = (FFR, NCG) +BJC = (RGL, RMX) +BFT = (XQP, BMB) +SKV = (JFR, HXB) +JDB = (QGF, RBJ) +XRK = (NGR, MGG) +FXN = (JCV, VSK) +JJQ = (JSJ, BFS) +DDN = (BKP, GLT) +QBH = (XNX, CKR) +MLT = (PGQ, QFH) +SNC = (VKF, PBK) +FTN = (HDB, PQP) +DPL = (LSL, FXH) +TFS = (DPR, PVJ) +HVQ = (SPX, GVJ) +JJX = (NHF, JKM) +KVR = (HTP, NCR) +MQR = (SND, HMN) +MDD = (PFG, KTK) +PCB = (RXT, RXT) +NLT = (GBS, JLR) +GBD = (SMD, PJR) +NHV = (BXS, FDM) +GHT = (KLV, PTG) +SDQ = (LSX, FPH) +TRJ = (QXR, MVF) +HGC = (TPM, SVM) +MHQ = (JCS, MBJ) +CKX = (HPS, HPS) +SQM = (MXJ, QBK) +PQG = (PPL, PSM) +JRL = (CRL, XGS) +NRG = (DRD, SPP) +GHD = (NCG, FFR) +LBF = (PQP, HDB) +MKK = (KNN, PKP) +CPG = (RHF, BRD) +SQB = (KKT, CQR) +VKQ = (THT, KBB) +KFK = (FMQ, CVF) +PJR = (GHT, GGM) +FXH = (JSB, VPL) +JPQ = (PVG, DHJ) +PDB = (SKN, RMF) +JKX = (VXD, SGB) +DTB = (HQR, BJC) +VCG = (QLV, SFJ) +KVM = (SBN, VVF) +QXS = (TCF, JCC) +CJK = (BLD, TNX) +PKP = (VPB, XLQ) +JMG = (LSL, FXH) +FRX = (JRQ, TPT) +KFF = (FKG, NLT) +DPB = (RHC, KMQ) +SCB = (KJG, RHX) +DHN = (XJC, SBH) +QLH = (GPC, BVB) +PMX = (DRL, SRN) +XMK = (HFK, MJQ) +NDB = (JHV, JKP) +LQS = (TCN, FLS) +PGG = (NJD, QCG) \ No newline at end of file