From 98d9031a83b53d18bf8c7be62e1960ee28c405a9 Mon Sep 17 00:00:00 2001 From: Wesley Moore Date: Fri, 8 Dec 2023 21:25:22 +1000 Subject: [PATCH] 2023: Day 8, part 1 --- 2023/day8.rb | 43 +++ 2023/input/day8.sample | 6 + 2023/input/day8.txt | 792 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 841 insertions(+) create mode 100644 2023/day8.rb create mode 100644 2023/input/day8.sample create mode 100644 2023/input/day8.txt diff --git a/2023/day8.rb b/2023/day8.rb new file mode 100644 index 0000000..bba26ec --- /dev/null +++ b/2023/day8.rb @@ -0,0 +1,43 @@ +START = "AAA" +FINISH = "ZZZ" + +class Node + attr_reader :name, :left, :right + + def initialize(name, left, right) + @name = name + @left = left + @right = right + end +end + +raw_instructions, raw_nodes = ARGF.read.split("\n\n") + +nodes = Hash.new +raw_nodes.each_line do |line| + next if line.empty? + + if line =~ /^([A-Z]+) = \(([A-Z]+), ([A-Z]+)\)$/ + nodes[$1] = Node.new($1, $2, $3) + else + throw "unmatched line #{line}" + end +end + +node = nodes[START] +instructions = raw_instructions.split("").cycle +steps = 0 +while node.name != FINISH + steps += 1 + instruction = instructions.next + case instruction + when "L" + node = nodes[node.left] + when "R" + node = nodes[node.right] + else + throw "unexpected instruction: '#{instruction}'" + end +end + +puts "Part 1: #{steps}" diff --git a/2023/input/day8.sample b/2023/input/day8.sample new file mode 100644 index 0000000..86fc262 --- /dev/null +++ b/2023/input/day8.sample @@ -0,0 +1,6 @@ +LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ) + diff --git a/2023/input/day8.txt b/2023/input/day8.txt new file mode 100644 index 0000000..1717c7e --- /dev/null +++ b/2023/input/day8.txt @@ -0,0 +1,792 @@ +LRLRLLRLLRRRLRLLRRLRLRRLRRLLLLRRLLRLRRLRRLRLRLRRLRLLRLRLRLRRRLLRLRLRLRRLRRLRRRLRRLRRLRRLRRLRRRLRRLRLLRLLRRRLRLRLLRRRLLRRLLLLRLRRRLLRLRLRRLRRRLRLRRLRLRRLLRLRRLLRLLRRLRLLRLLRRLRRRLLRRLRLRLRRLRRLRRRLRRLRRRLLRRLRLRRRLRRRLRLRRRLRRLRRLRRLRRRLRRLRLRRRLRLRRLLRRLRRRLRLRRRLLRLRRRLRRRLRLRLRRRLLRRLLRLRRRLRRLRRRLLLRRRR + +FTX = (VVM, VVM) +LNR = (DQG, CMF) +NXS = (TKM, FPB) +FQF = (HDC, NFB) +SPH = (MQB, XFB) +FDL = (CTR, NXS) +DMF = (VHG, LJV) +JBP = (CKR, VBF) +MMK = (JVC, NSS) +LLT = (MVP, QFC) +VVN = (SHF, XMN) +CRR = (QNC, JMC) +RRK = (QCR, VFT) +JXR = (DSM, RCD) +BMD = (KPL, CRR) +HQM = (LDR, LFR) +VDP = (MGM, GFQ) +HLV = (GLV, TSS) +LJQ = (VDS, LGB) +DVJ = (RJP, DTM) +VHL = (MFK, PCV) +LFH = (BTX, VPC) +NBN = (NBR, DRD) +NKB = (TRQ, LTT) +QPM = (VPQ, SQB) +VFD = (QBK, LCH) +HRX = (KJL, SJC) +RKF = (TFS, XMR) +GQK = (FVS, VDC) +DTV = (DHQ, PDG) +MHM = (KLF, QJL) +GTM = (CPP, JJT) +LBN = (RFM, KCX) +JJR = (PNN, HPG) +MDL = (BQM, RKF) +DSL = (BMD, GVK) +MQF = (JXR, SPJ) +VBF = (QVV, GTM) +MBJ = (NRH, JCX) +NRH = (CJM, KHS) +SCN = (BJC, GTN) +HRK = (KHH, TSX) +MCS = (TPF, HBM) +BQS = (VFD, MNF) +TPB = (HTS, FLR) +XVV = (XLX, GDL) +HGK = (PJC, KBT) +MXF = (MFC, FQN) +JVS = (TMB, JPF) +RFM = (FSQ, MQS) +XCG = (TPF, HBM) +CMR = (LNV, LNT) +BVF = (XXG, MRB) +KFQ = (DMF, VXS) +KVS = (VSF, PRK) +VVL = (QFC, MVP) +BNB = (GDL, XLX) +BRB = (LNR, XBR) +BJK = (QKC, SPG) +FDQ = (HQR, GQK) +JPC = (TVL, XDZ) +JCL = (SJC, KJL) +BBT = (LLL, XHB) +FNH = (NNN, LSM) +QQM = (THC, TQH) +VDB = (DDR, VSX) +MNS = (DPG, DBV) +JCS = (SNH, VDP) +BGS = (KVS, CLH) +MDS = (JXV, VFJ) +JJM = (XHG, PNJ) +NJF = (BBF, DVJ) +GKX = (KHH, TSX) +BXV = (DHM, VHR) +CMF = (NJF, VCK) +LQN = (VPV, RFH) +TST = (BMK, XSS) +SSB = (KMH, DKD) +RFH = (SSB, SFG) +XXG = (TQV, JDH) +TNT = (FNL, VNQ) +HDF = (NVD, GQR) +MQN = (HTH, FXL) +QSG = (LFP, FQF) +CKK = (GDS, FDL) +XXT = (NBM, XFJ) +PDG = (PPP, HKP) +FLV = (MBS, BVX) +HTZ = (DXG, XTB) +DPG = (TST, TPD) +DCR = (BFK, TPB) +PGD = (MBD, KBS) +FTG = (GLT, MNK) +GFK = (PMT, JDT) +HQR = (FVS, VDC) +VKD = (TQG, KVP) +KVL = (GQN, VMF) +SLT = (FFT, TXF) +ZZZ = (XCG, MCS) +JJT = (QSG, NLS) +XGL = (RRC, MRV) +DHV = (JKB, JXB) +FFV = (NPN, KVC) +LTV = (XGF, QPM) +MRB = (JDH, TQV) +QHV = (SLB, TGR) +HLD = (FXL, HTH) +GLV = (RQT, BXT) +QFC = (GLF, CMQ) +SRL = (QVM, FQM) +TMF = (BTX, VPC) +JST = (PST, SRQ) +FFX = (FJJ, MMF) +FNL = (NNT, LBM) +MVT = (SJV, TBL) +SLB = (TKV, CGV) +TQB = (CCF, VTB) +NTV = (QPM, XGF) +DXG = (NVP, JNH) +CNQ = (QFX, XRT) +VVM = (BVF, CNF) +XHG = (HRK, GKX) +PCV = (GVN, NMN) +XMR = (KST, NNH) +GQN = (BRM, FQD) +CLV = (VMQ, KFG) +TQR = (HPT, JVP) +JGH = (DPG, DBV) +BPX = (JJL, PGD) +GSH = (NDR, NDR) +TRP = (BSP, CMB) +QSD = (VSL, XTT) +DGL = (CNQ, JMT) +FFT = (GRM, KMF) +SHV = (NDR, HTZ) +TPJ = (MFB, SHN) +SHN = (TVQ, SMD) +BXJ = (CMR, STP) +RKV = (PJR, QHR) +TRQ = (JVR, QPL) +CKR = (GTM, QVV) +QQC = (FMM, DNH) +PPP = (MMS, BML) +XFP = (VXQ, XXT) +KJL = (RBJ, BKT) +KVC = (JXC, BVG) +KNL = (MDL, TBB) +PJK = (GMM, QLH) +PST = (KBH, QHQ) +HLB = (HPT, JVP) +RKG = (BCJ, PQV) +GSV = (BDF, CCK) +FBJ = (BSR, GJR) +BMK = (HPR, MRT) +PVR = (BGK, JHM) +PCX = (MRP, TRP) +JQJ = (HKT, NLD) +CMX = (VMN, FNQ) +LGQ = (QPC, XVK) +XTB = (JNH, NVP) +DBB = (GRF, RXP) +DXR = (HSK, BHF) +TKN = (LPJ, VLS) +JMC = (JCT, SBD) +XGR = (VGD, PVC) +NDR = (XTB, DXG) +TSX = (RRR, DBB) +DNR = (SLL, FPC) +QMX = (HSV, JQV) +VMS = (CFS, PJK) +JNX = (RKV, BCK) +LPJ = (HVL, SDC) +GHD = (GDT, NKL) +BMM = (XVL, SJB) +DFR = (QCB, JRD) +BQV = (XTF, FRM) +TMB = (NTK, NPR) +KDC = (CQD, DDQ) +LQX = (DXR, MQP) +SLV = (FKG, MQG) +NGP = (FVH, FVH) +NLS = (LFP, FQF) +GSS = (NSB, VVR) +JTT = (XFB, MQB) +MKN = (QHK, XGL) +TKV = (FTJ, BRB) +KHH = (DBB, RRR) +QKC = (JQL, SJJ) +BVV = (GVQ, LCP) +VTB = (XGR, LCL) +TGR = (CGV, TKV) +QVM = (SGD, QXN) +DVM = (QSD, XVD) +XRT = (PHB, QMX) +NTK = (CVB, QGV) +MQB = (FCT, JCS) +GCR = (TSN, VHL) +HDC = (GSH, GSH) +XBR = (DQG, CMF) +XDZ = (LHB, FLJ) +JNV = (TSB, FSJ) +TSB = (NDK, GVT) +RNM = (QDT, DDC) +NXL = (JGD, HNM) +JGD = (JXL, PCQ) +MRP = (CMB, BSP) +PFB = (RGM, VJQ) +GFQ = (FRL, KHJ) +VDC = (RCF, MCF) +XNV = (MDL, TBB) +TFS = (NNH, KST) +DNV = (XJG, BXP) +LBM = (JVS, CGX) +TBB = (RKF, BQM) +VSF = (BLL, HCN) +VJJ = (LPJ, VLS) +BSV = (HDF, NSX) +JHP = (LMP, PHK) +XJG = (VTL, SSG) +VPM = (KFG, VMQ) +MMS = (MPR, HJJ) +HTH = (GSS, SVJ) +HPG = (JQJ, TKR) +JCT = (DDB, CKX) +TVL = (FLJ, LHB) +FJK = (NLN, QHV) +DRD = (GGF, SLT) +XBB = (PVG, KSH) +JGX = (MNF, VFD) +SBD = (DDB, CKX) +NFB = (GSH, SHV) +HBM = (CQS, RLQ) +VSL = (VSR, JMN) +QBK = (RNT, NTX) +TMT = (BVH, SCN) +MQS = (FHL, QBP) +GVR = (MMK, QFN) +KPH = (RNG, JST) +NPG = (VRH, HGS) +CHR = (VPM, CLV) +JTJ = (VPM, CLV) +SGD = (LXP, KBL) +FXR = (BVH, SCN) +FKG = (GSV, GTK) +XFJ = (KQT, VMG) +HSV = (DCR, HJB) +QVK = (NBR, DRD) +MGM = (FRL, KHJ) +FRL = (PNB, DSL) +VCD = (VSX, DDR) +QCR = (DFJ, VQQ) +RSP = (GJR, BSR) +NFR = (KVS, CLH) +FQQ = (JNJ, RFG) +GLF = (MBG, RKX) +HPT = (RXG, NSP) +PLF = (PCX, FVV) +VDQ = (VSQ, LTB) +NGM = (LGB, VDS) +LNT = (VJS, GVP) +SJV = (HXX, VTN) +QNT = (KLF, QJL) +DHR = (XGD, KJC) +HJB = (TPB, BFK) +CHL = (NKL, GDT) +NSS = (VGJ, LCV) +LCL = (PVC, VGD) +KST = (LTV, NTV) +DDR = (RKG, VDM) +JXB = (NQC, DNJ) +LLZ = (RRK, GLG) +TKM = (DCT, CPK) +GXG = (VTB, CCF) +BJC = (TKN, VJJ) +GTN = (VJJ, TKN) +RBC = (QRX, XNN) +JVP = (NSP, RXG) +PMG = (QRX, XNN) +FXX = (VPV, RFH) +JXV = (QQM, KVV) +BTX = (MTL, HNB) +BVG = (VXM, NXL) +JVC = (LCV, VGJ) +LJV = (CHL, GHD) +PRK = (BLL, HCN) +MHC = (KVG, KMG) +MQG = (GTK, GSV) +RCD = (JGH, MNS) +FRR = (TDV, GGV) +HBH = (GBR, DSF) +HSK = (PLF, DPV) +DFQ = (RJT, MQF) +PHK = (HGJ, GNN) +RHK = (DHV, HFG) +SQG = (FCP, PDM) +VFS = (SPD, PFM) +TPD = (XSS, BMK) +PQV = (CJH, QBR) +GDL = (GCR, KTX) +JXC = (NXL, VXM) +MRV = (FNH, VQM) +TVM = (FCP, PDM) +HKL = (LSR, BRQ) +TQH = (FTG, TPN) +FTJ = (XBR, LNR) +KVG = (PJJ, FDQ) +LMP = (HGJ, GNN) +SVJ = (NSB, VVR) +XNN = (JKR, FFV) +VXS = (LJV, VHG) +FVH = (FML, RTR) +LMN = (XXH, XXH) +QJD = (PGJ, PGJ) +KMF = (CVF, TRC) +XVD = (XTT, VSL) +PMT = (GML, DPT) +DBV = (TPD, TST) +STB = (VHR, DHM) +HJJ = (PJV, HLV) +GJC = (GDS, FDL) +PGH = (PGJ, LLZ) +MBB = (JCX, NRH) +BVX = (JHP, VRP) +HPR = (GPM, BMM) +QXN = (KBL, LXP) +VRH = (NFR, BGS) +TKR = (HKT, NLD) +KHK = (DNV, MBP) +LCP = (MXM, HXP) +BJM = (XLV, XRG) +NNN = (BNH, FRP) +NTX = (STG, JCD) +FMM = (FFX, JCH) +VPC = (MTL, HNB) +FKC = (XDD, TTL) +XHB = (KHK, RCM) +HRB = (QVK, NBN) +FPC = (CPR, GQP) +STA = (BVF, CNF) +VPQ = (QPK, FNV) +RDD = (FKG, MQG) +AAA = (MCS, XCG) +VLS = (HVL, SDC) +JCX = (CJM, KHS) +GNN = (FQL, BSV) +XGD = (PQK, BXJ) +NDK = (CLT, MHC) +XLV = (HQS, KTL) +DGQ = (CKR, VBF) +VRP = (LMP, PHK) +GTK = (BDF, CCK) +BKP = (RSR, BNN) +CFS = (GMM, QLH) +SFG = (KMH, DKD) +TTL = (HKL, DGF) +CHB = (MFC, MFC) +HXP = (JBP, DGQ) +SPD = (GFK, SXN) +LLJ = (MBJ, MBB) +JRD = (QGT, XMV) +HQS = (LFH, TMF) +CVB = (CCL, PFB) +QBF = (PJK, CFS) +QJL = (HRD, CMX) +QFX = (PHB, QMX) +NSB = (QGG, HKQ) +HCV = (CHR, JTJ) +RMM = (BCK, RKV) +FRT = (CFL, SHK) +QPC = (BRJ, VFS) +RXG = (TKX, BJM) +STG = (PNF, GVR) +LTC = (JRD, QCB) +GVQ = (MXM, HXP) +KTL = (TMF, LFH) +DGF = (LSR, BRQ) +CLT = (KMG, KVG) +KBH = (JGX, BQS) +NBM = (KQT, VMG) +XMN = (HQM, NVS) +HCN = (TPJ, LJK) +TDS = (RJT, MQF) +LTB = (DGL, KQH) +VNQ = (NNT, LBM) +BLQ = (KJC, XGD) +GDS = (NXS, CTR) +FRM = (GVX, LBN) +GML = (QNT, MHM) +QNC = (SBD, JCT) +RQT = (TQB, GXG) +GGV = (XVV, BNB) +HFG = (JKB, JXB) +VJQ = (NPG, PPK) +GDT = (NSH, PMX) +VMF = (BRM, FQD) +HKQ = (QCX, FLV) +VVR = (HKQ, QGG) +JQL = (TQR, HLB) +BXP = (SSG, VTL) +KBS = (LJQ, NGM) +BNH = (DFR, LTC) +BSR = (QBF, VMS) +RFG = (GCH, FXF) +XGZ = (CNF, BVF) +VMG = (KKT, VKD) +JCH = (FJJ, MMF) +QHX = (CHB, MXF) +FXL = (GSS, SVJ) +CCL = (VJQ, RGM) +GMM = (RDD, SLV) +FFN = (VXS, DMF) +CFK = (FMM, DNH) +BKT = (JFV, MVQ) +HTJ = (HFQ, KJH) +BQM = (XMR, TFS) +LJK = (SHN, MFB) +CGX = (JPF, TMB) +PHB = (HSV, JQV) +FVS = (MCF, RCF) +LFG = (JST, RNG) +FLC = (XXH, PRN) +JFC = (GBR, DSF) +FRP = (LTC, DFR) +MTL = (FBJ, RSP) +GLG = (QCR, VFT) +MNF = (LCH, QBK) +NVP = (HBH, JFC) +CJS = (TNT, RNF) +QCX = (MBS, BVX) +KJC = (BXJ, PQK) +TMZ = (RTR, FML) +QGG = (FLV, QCX) +XSS = (HPR, MRT) +RNG = (PST, SRQ) +KKM = (PJC, KBT) +FQM = (SGD, QXN) +QDT = (PHQ, QHX) +DPT = (MHM, QNT) +KFG = (VBX, KDC) +NPN = (JXC, BVG) +RNT = (STG, JCD) +PNF = (QFN, MMK) +MPS = (FVH, TMZ) +LHB = (VVN, CKN) +FCP = (XBB, BFC) +CKX = (FXX, LQN) +XLX = (GCR, KTX) +QFN = (NSS, JVC) +FML = (BPX, KDV) +CPP = (QSG, NLS) +FQL = (HDF, NSX) +GVT = (CLT, MHC) +NDN = (MBJ, MBB) +GPA = (GLG, RRK) +PGB = (XFX, RHX) +RRC = (VQM, FNH) +MQP = (HSK, BHF) +GLT = (XFP, JMV) +GVN = (JTT, SPH) +CPK = (BBT, PXB) +KCX = (FSQ, MQS) +KQH = (JMT, CNQ) +JQV = (DCR, HJB) +CVF = (HRX, JCL) +TQG = (NGP, NGP) +GVP = (BJK, NMS) +NVS = (LFR, LDR) +NKL = (PMX, NSH) +SKF = (KJH, HFQ) +NSP = (BJM, TKX) +JHM = (VDB, VCD) +DPV = (PCX, FVV) +LLL = (KHK, RCM) +XVK = (VFS, BRJ) +JNH = (JFC, HBH) +HGS = (BGS, NFR) +VMQ = (VBX, KDC) +DSM = (MNS, JGH) +HXX = (SKF, HTJ) +LXP = (BJH, FJS) +TVQ = (CQV, FRR) +RJT = (JXR, SPJ) +RRR = (RXP, GRF) +TKX = (XLV, XRG) +MVP = (CMQ, GLF) +BGK = (VDB, VCD) +TQV = (MVT, TNC) +DDB = (LQN, FXX) +FQN = (HGT, ZZZ) +DQG = (VCK, NJF) +MRT = (GPM, BMM) +QGV = (CCL, PFB) +GRM = (CVF, TRC) +FLJ = (VVN, CKN) +BRM = (LLJ, NDN) +NQF = (FTX, TJR) +JKB = (NQC, DNJ) +CMQ = (RKX, MBG) +FLR = (XNV, KNL) +TPF = (RLQ, CQS) +JMT = (XRT, QFX) +MVS = (PDG, DHQ) +BRQ = (MNN, SRL) +QDG = (FTX, FTX) +NLN = (TGR, SLB) +PHQ = (CHB, CHB) +QRX = (JKR, FFV) +FJS = (LVV, DVM) +JDT = (DPT, GML) +HNB = (FBJ, RSP) +KPL = (JMC, QNC) +LFR = (MCR, BQV) +JPF = (NTK, NPR) +VHG = (GHD, CHL) +KQT = (KKT, VKD) +LKA = (XTB, DXG) +JXL = (GCM, RHK) +FQD = (LLJ, NDN) +CCF = (XGR, LCL) +FNV = (LQX, KMS) +MBS = (JHP, VRP) +RGM = (NPG, PPK) +CQS = (TTB, CJS) +DFJ = (KVL, RJG) +RQQ = (LGQ, HPV) +PBF = (STB, BXV) +NBT = (QHK, XGL) +PRN = (PVT, JPC) +CBF = (FKC, KKL) +PVC = (DFQ, TDS) +THC = (FTG, TPN) +LCV = (GJC, CKK) +SJB = (QJD, PGH) +HNS = (TMT, FXR) +TJR = (VVM, XGZ) +PQK = (STP, CMR) +MBG = (CCX, FJK) +KKL = (TTL, XDD) +PXB = (LLL, XHB) +RTR = (KDV, BPX) +PJC = (DTV, MVS) +DDQ = (TFD, GSR) +QCB = (QGT, XMV) +MBD = (NGM, LJQ) +VTD = (BGK, JHM) +CJH = (RNM, JRQ) +VHR = (CBF, XCQ) +QPK = (KMS, LQX) +BBJ = (FXR, TMT) +JCD = (GVR, PNF) +NBR = (SLT, GGF) +PNJ = (HRK, GKX) +VXM = (HNM, JGD) +JFV = (RQQ, TKD) +FHL = (JSL, DNR) +VQM = (NNN, LSM) +CKN = (SHF, XMN) +NMS = (SPG, QKC) +FNQ = (JHK, TFV) +SSG = (FKV, BPG) +XFB = (JCS, FCT) +RSR = (PBF, HCX) +KBL = (FJS, BJH) +HKT = (PVR, VTD) +CPR = (FSN, JRH) +BDF = (HGK, KKM) +KVP = (NGP, MPS) +LNV = (VJS, GVP) +SXN = (PMT, JDT) +HGT = (MCS, XCG) +TNC = (TBL, SJV) +KKT = (TQG, TQG) +KTX = (VHL, TSN) +XFX = (GXX, HRB) +VQQ = (RJG, KVL) +KHJ = (DSL, PNB) +GCH = (NRR, NKB) +VPV = (SSB, SFG) +KMS = (MQP, DXR) +QPL = (JJM, NDS) +FVV = (MRP, TRP) +MQV = (RSR, BNN) +XGF = (SQB, VPQ) +DDC = (PHQ, QHX) +PQH = (FSJ, TSB) +SGV = (VSQ, LTB) +SHF = (HQM, NVS) +CCX = (NLN, QHV) +SPG = (JQL, SJJ) +HGJ = (FQL, BSV) +MNN = (QVM, FQM) +PJJ = (GQK, HQR) +TDV = (BNB, XVV) +PNB = (BMD, GVK) +GQR = (MKN, NBT) +MPR = (HLV, PJV) +JSL = (FPC, SLL) +QHK = (RRC, MRV) +FSN = (CFK, QQC) +HFQ = (KPH, LFG) +BRJ = (PFM, SPD) +PJR = (HLD, MQN) +KVJ = (GVQ, LCP) +VCK = (BBF, DVJ) +LSR = (SRL, MNN) +HVL = (QDG, QDG) +KBT = (DTV, MVS) +GGF = (TXF, FFT) +DKD = (TVM, SQG) +DNJ = (LMN, FLC) +NNH = (NTV, LTV) +TRC = (JCL, HRX) +BML = (HJJ, MPR) +BJH = (LVV, DVM) +QHQ = (JGX, BQS) +PMX = (MDS, THH) +JJL = (KBS, MBD) +BFC = (PVG, KSH) +HKP = (BML, MMS) +FNT = (KVJ, BVV) +JKR = (KVC, NPN) +VBR = (BVV, KVJ) +BCJ = (QBR, CJH) +FPB = (CPK, DCT) +XMV = (FFN, KFQ) +CQD = (TFD, GSR) +DFA = (FML, RTR) +KMH = (TVM, SQG) +JMN = (RMM, JNX) +JDH = (MVT, TNC) +GPM = (XVL, XVL) +DHQ = (PPP, HKP) +XTF = (GVX, LBN) +RBJ = (JFV, MVQ) +XXH = (PVT, PVT) +RJP = (HNS, BBJ) +JRQ = (QDT, DDC) +KMG = (PJJ, FDQ) +MFK = (NMN, GVN) +KSH = (JJR, JHJ) +XTT = (VSR, JMN) +RHX = (HRB, GXX) +VSQ = (DGL, KQH) +GJR = (VMS, QBF) +VMN = (JHK, TFV) +HTS = (KNL, XNV) +LVV = (QSD, XVD) +BHF = (PLF, DPV) +QLH = (RDD, SLV) +VDS = (JNV, PQH) +RCF = (MQV, BKP) +LDR = (MCR, BQV) +VTN = (SKF, HTJ) +TPN = (MNK, GLT) +QVV = (CPP, JJT) +KLF = (HRD, CMX) +JHK = (FNT, VBR) +DSF = (PGB, CCS) +NMN = (SPH, JTT) +SNH = (GFQ, MGM) +CFL = (VVL, LLT) +MVQ = (TKD, RQQ) +KDV = (PGD, JJL) +KHS = (HCV, FDS) +GVK = (KPL, CRR) +NLD = (PVR, VTD) +BBF = (DTM, RJP) +SDC = (QDG, NQF) +SLL = (CPR, GQP) +FJJ = (VDQ, SGV) +MFB = (TVQ, SMD) +JNJ = (FXF, GCH) +VFJ = (QQM, KVV) +GVX = (RFM, KCX) +PCQ = (RHK, GCM) +CGV = (FTJ, BRB) +XDD = (HKL, DGF) +CLH = (VSF, PRK) +QBR = (JRQ, RNM) +BNN = (PBF, HCX) +DNH = (FFX, JCH) +BSP = (FQQ, PDQ) +TFV = (FNT, VBR) +GCM = (HFG, DHV) +CMB = (PDQ, FQQ) +FXF = (NRR, NKB) +VSR = (RMM, JNX) +NSX = (GQR, NVD) +GRF = (RBC, PMG) +JRH = (CFK, QQC) +FCT = (VDP, SNH) +FSQ = (QBP, FHL) +MBP = (XJG, BXP) +FSJ = (GVT, NDK) +NVD = (NBT, MKN) +NRR = (LTT, TRQ) +MCF = (MQV, BKP) +SQB = (QPK, FNV) +HPV = (QPC, XVK) +PFM = (SXN, GFK) +TTB = (TNT, RNF) +HRD = (FNQ, VMN) +PGJ = (GLG, RRK) +XCQ = (KKL, FKC) +CQV = (TDV, GGV) +CJM = (FDS, HCV) +LTT = (JVR, QPL) +BVH = (GTN, BJC) +STP = (LNV, LNT) +QGT = (FFN, KFQ) +VTL = (FKV, BPG) +MNK = (JMV, XFP) +VXQ = (NBM, XFJ) +KKA = (FLJ, LHB) +SRQ = (KBH, QHQ) +VSX = (VDM, RKG) +CQM = (CFL, SHK) +PNN = (JQJ, TKR) +KVV = (TQH, THC) +MXM = (JBP, DGQ) +TSN = (PCV, MFK) +XRG = (HQS, KTL) +PVT = (TVL, TVL) +LFP = (HDC, HDC) +CCK = (KKM, HGK) +SHK = (VVL, LLT) +RLQ = (TTB, CJS) +BPG = (FRT, CQM) +TSS = (RQT, BXT) +CCS = (RHX, XFX) +NQC = (LMN, FLC) +BXT = (GXG, TQB) +PJV = (TSS, GLV) +NSH = (MDS, THH) +NDS = (XHG, PNJ) +TFD = (DHR, BLQ) +PDQ = (JNJ, RFG) +VGD = (DFQ, TDS) +DCT = (PXB, BBT) +LCH = (NTX, RNT) +MFC = (HGT, HGT) +DTM = (HNS, BBJ) +FDS = (CHR, JTJ) +BLL = (LJK, TPJ) +GXX = (QVK, NBN) +JMV = (XXT, VXQ) +LSM = (BNH, FRP) +JHJ = (PNN, HPG) +RKX = (FJK, CCX) +RXP = (PMG, RBC) +RJG = (GQN, VMF) +HCX = (BXV, STB) +PDM = (BFC, XBB) +SJJ = (HLB, TQR) +BFK = (FLR, HTS) +VJS = (NMS, BJK) +CNF = (XXG, MRB) +VDM = (PQV, BCJ) +QHR = (HLD, MQN) +SJC = (BKT, RBJ) +RCM = (MBP, DNV) +QBP = (DNR, JSL) +MMF = (SGV, VDQ) +VGJ = (CKK, GJC) +VBX = (DDQ, CQD) +GQP = (JRH, FSN) +BCK = (PJR, QHR) +VFT = (DFJ, VQQ) +CTR = (TKM, FPB) +NPR = (QGV, CVB) +SPJ = (RCD, DSM) +NNT = (CGX, JVS) +MCR = (FRM, XTF) +TBL = (VTN, HXX) +GSR = (DHR, BLQ) +PPK = (VRH, HGS) +PVG = (JHJ, JJR) +TXF = (KMF, GRM) +TKD = (HPV, LGQ) +RNF = (VNQ, FNL) +THH = (JXV, VFJ) +GBR = (PGB, CCS) +LGB = (PQH, JNV) +DHM = (XCQ, CBF) +FKV = (CQM, FRT) +SMD = (CQV, FRR) +HNM = (JXL, PCQ) +JVR = (NDS, JJM) +KJH = (KPH, LFG) +XVL = (QJD, QJD)