diff --git a/.github/workflows/tests.yml b/.github/workflows/go-tests.yml
similarity index 80%
rename from .github/workflows/tests.yml
rename to .github/workflows/go-tests.yml
index 52a1c39..52a4348 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/go-tests.yml
@@ -1,4 +1,4 @@
-name: Go Test
+name: Go Tests
 
 on:
   push:
@@ -8,7 +8,7 @@ on:
   workflow_dispatch:
 
 jobs:
-  diff:
+  go-diff:
     runs-on: ubuntu-latest
     outputs:
       matrix: ${{ steps.set-matrix.outputs.matrix }}
@@ -23,31 +23,31 @@ jobs:
           echo "Changed directories: $changed_dirs"
           echo "matrix=$changed_dirs" >> $GITHUB_OUTPUT
 
-  test:
-    needs: diff
+  go-test:
+    needs: go-diff
     runs-on: ubuntu-latest
-    if: needs.diff.outputs.matrix != '[]'
+    if: needs.go-diff.outputs.matrix != '[]'
     strategy:
       fail-fast: false
       matrix:
-        dir: ${{fromJson(needs.diff.outputs.matrix)}}
+        dir: ${{fromJson(needs.go-diff.outputs.matrix)}}
     steps:
       - uses: actions/checkout@v4
       - uses: actions/setup-go@v5
         with:
           go-version: "^1.23.0"
-      - name: Run tests in changed directories
+      - name: Run Go tests in changed directories
         run: |
           for dir in "${{ matrix.dir }}"; do
             if [ -d "$dir" ]; then
-              echo "Running tests in $dir"
+              echo "Running Go tests in $dir"
               (cd "$dir" && go test ./...)
             else
               echo "No Go files in $dir"
             fi
           done
 
-  test-main:
+  go-test-main:
     if: github.ref == 'refs/heads/main' && github.event_name == 'push'
     runs-on: ubuntu-latest
     steps:
@@ -55,5 +55,5 @@ jobs:
       - uses: actions/setup-go@v5
         with:
           go-version: "^1.23.0"
-      - name: Run tests
-        run: go test ./...
+      - name: Run Go tests
+        run: go test ./...
\ No newline at end of file
diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml
new file mode 100644
index 0000000..43ea6c4
--- /dev/null
+++ b/.github/workflows/python-tests.yml
@@ -0,0 +1,59 @@
+name: Python Tests
+
+on:
+  push:
+    branches: [main]
+  pull_request:
+    branches: [main]
+  workflow_dispatch:
+
+jobs:
+  python-diff:
+    runs-on: ubuntu-latest
+    outputs:
+      matrix: ${{ steps.set-matrix.outputs.matrix }}
+    steps:
+      - uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+          ref: ${{ github.head_ref }}
+      - id: set-matrix
+        run: |
+          changed_dirs=$(git diff --name-only origin/${{ github.base_ref }} | grep '.py$' | xargs -I {} dirname {} | uniq | awk '{print "\"" $0 "\""}' | jq -R -s -c 'split("\n")[:-1]')
+          echo "Changed directories: $changed_dirs"
+          echo "matrix=$changed_dirs" >> $GITHUB_OUTPUT
+
+  python-test:
+    needs: python-diff
+    runs-on: ubuntu-latest
+    if: needs.python-diff.outputs.matrix != '[]'
+    strategy:
+      fail-fast: false
+      matrix:
+        dir: ${{fromJson(needs.python-diff.outputs.matrix)}}
+    steps:
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
+        with:
+          python-version: "3.x"
+      - name: Run Python tests in changed directories
+        run: |
+          for dir in "${{ matrix.dir }}"; do
+            if [ -d "$dir" ]; then
+              echo "Running Python tests in $dir"
+              (cd "$dir" && python -m unittest discover)
+            else
+              echo "No Python files in $dir"
+            fi
+          done
+
+  python-test-main:
+    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
+        with:
+          python-version: "3.x"
+      - name: Run Python tests
+        run: python -m unittest discover
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index dd02f66..a8006c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,8 @@ go.work
 # Misc
 .DS_Store
 .aider*
+
+# Python
+*.pyc
+__pycache__/
+.pytest_cache/
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..e69de29
diff --git a/src/2022/day01/input.txt b/src/2022/day01/go/input.txt
similarity index 100%
rename from src/2022/day01/input.txt
rename to src/2022/day01/go/input.txt
diff --git a/src/2022/day01/main.go b/src/2022/day01/go/main.go
similarity index 100%
rename from src/2022/day01/main.go
rename to src/2022/day01/go/main.go
diff --git a/src/2022/day01/main_test.go b/src/2022/day01/go/main_test.go
similarity index 100%
rename from src/2022/day01/main_test.go
rename to src/2022/day01/go/main_test.go
diff --git a/src/2022/day01/test.txt b/src/2022/day01/go/test.txt
similarity index 100%
rename from src/2022/day01/test.txt
rename to src/2022/day01/go/test.txt
diff --git a/src/2022/day01/python/input.txt b/src/2022/day01/python/input.txt
new file mode 100644
index 0000000..2e6702f
--- /dev/null
+++ b/src/2022/day01/python/input.txt
@@ -0,0 +1,2251 @@
+18313
+2404
+10479
+
+7011
+10279
+1496
+10342
+8918
+3162
+4525
+4368
+
+17242
+
+10920
+14072
+9754
+4435
+9396
+
+5915
+2602
+4032
+3303
+2685
+1856
+1334
+4865
+6385
+1733
+5328
+
+8899
+5482
+3195
+7837
+8986
+13794
+
+25121
+22211
+21257
+
+6360
+4007
+5124
+2266
+6943
+6966
+3887
+3427
+1255
+5266
+6119
+2841
+
+6167
+3883
+2776
+5894
+2013
+6930
+6613
+4637
+5259
+2347
+3550
+5639
+5117
+
+4530
+5961
+5956
+2503
+5060
+4770
+5240
+4123
+4089
+6794
+3333
+5244
+4415
+
+1733
+1209
+4458
+1223
+3859
+7728
+9793
+8350
+
+2278
+3241
+4668
+1836
+3669
+2996
+1772
+5016
+6294
+6367
+1080
+5964
+5547
+
+4793
+13744
+9478
+7979
+1490
+12490
+
+6770
+7282
+2059
+5242
+13237
+9365
+
+2230
+6498
+1352
+3846
+3863
+6205
+5803
+2646
+4188
+4431
+6380
+1526
+2620
+4438
+
+24331
+23578
+
+4199
+5126
+5725
+1123
+2415
+5427
+5789
+4856
+2610
+4833
+3398
+4239
+1432
+5122
+
+5013
+4939
+11760
+8419
+5706
+3765
+10182
+
+11795
+9688
+1712
+2091
+9651
+13022
+
+10393
+11862
+1672
+5431
+6812
+1866
+5599
+
+2036
+6561
+4097
+3467
+4739
+7656
+3252
+4322
+5068
+2345
+4155
+
+3090
+1228
+1270
+8407
+8118
+4996
+7157
+3944
+6230
+2728
+
+5669
+2113
+3076
+1290
+7673
+1022
+5805
+5128
+7912
+7862
+4955
+
+20640
+
+4131
+4874
+5220
+9947
+9739
+1662
+9418
+9684
+
+4875
+3073
+1151
+11911
+10310
+10793
+10307
+
+6979
+4265
+8322
+3518
+1855
+4912
+5481
+7124
+4664
+
+19975
+16112
+19450
+7231
+
+3909
+4743
+3794
+4448
+3200
+3447
+3331
+7011
+3345
+3935
+6750
+
+3900
+14850
+4890
+9625
+4832
+
+23682
+1375
+
+7463
+8112
+10624
+1105
+6625
+5157
+5839
+1019
+
+19089
+36719
+
+5372
+7085
+8536
+8717
+6255
+5961
+3198
+7729
+3055
+
+4406
+2263
+6686
+1458
+2377
+2740
+1284
+3045
+7121
+3070
+
+19161
+10515
+1027
+
+7782
+1703
+1864
+3611
+1039
+2394
+3472
+6964
+5824
+8011
+3341
+
+56690
+
+5107
+1876
+4973
+5485
+4325
+6079
+3187
+3565
+2875
+7137
+3887
+6763
+
+2633
+2151
+1105
+2400
+5338
+3382
+1330
+3945
+6556
+1670
+5526
+4281
+2168
+
+5382
+2347
+4225
+1905
+4672
+6706
+5747
+5808
+1159
+4878
+5923
+
+11148
+8722
+3896
+15697
+3499
+
+46749
+
+13315
+20966
+
+1625
+6338
+7882
+1505
+4226
+9948
+6438
+6012
+
+1003
+10033
+5066
+7756
+10151
+10719
+5299
+5629
+
+4466
+6290
+7220
+3657
+8261
+7348
+8525
+4531
+4892
+7833
+
+24723
+7817
+
+4234
+4428
+5810
+2091
+4301
+1378
+2342
+3872
+1167
+2073
+6867
+7026
+
+7005
+10018
+3954
+4497
+4951
+1283
+5383
+
+4152
+4390
+8731
+8521
+5415
+1029
+8200
+3769
+
+7224
+12281
+8337
+8969
+13938
+9651
+
+10923
+14358
+8896
+8401
+7073
+
+3934
+4424
+4538
+4371
+2335
+6363
+1264
+4331
+5107
+2270
+3109
+2547
+2304
+5911
+
+4600
+5674
+2620
+1846
+3804
+2387
+4094
+3648
+4241
+5593
+2974
+2101
+1621
+3939
+
+7429
+9425
+9653
+5835
+
+13414
+4517
+15783
+3867
+
+2287
+1019
+11604
+11910
+2591
+2468
+10543
+
+13050
+1396
+13959
+6883
+
+6303
+2889
+4047
+3954
+2245
+6672
+4574
+5731
+5879
+2837
+5859
+4812
+6785
+
+10290
+10131
+5605
+3321
+2122
+6331
+9107
+7937
+
+1786
+1362
+7409
+2093
+3901
+1306
+2089
+1558
+4163
+6118
+6270
+1929
+
+4224
+3864
+3922
+3609
+2496
+2246
+5397
+1535
+5499
+4932
+3684
+1348
+3437
+3665
+
+2973
+4506
+3971
+2511
+4563
+3168
+2687
+6249
+2593
+6470
+4100
+6309
+1316
+4362
+
+14966
+2940
+11485
+
+6675
+16873
+5695
+14706
+
+3953
+
+5620
+1678
+3630
+5015
+3277
+4957
+5288
+5555
+2860
+1750
+2795
+6170
+6308
+
+3671
+1354
+4018
+4730
+4070
+1685
+4478
+1918
+5532
+3970
+3751
+4890
+4277
+2737
+5535
+
+14799
+8129
+
+5254
+2065
+1282
+2407
+5174
+4549
+4326
+1201
+3372
+3906
+6234
+4937
+4234
+2149
+
+5194
+2519
+3555
+6929
+4367
+4547
+
+1024
+37240
+
+3693
+6526
+2679
+5434
+7924
+2974
+1754
+4287
+4744
+4187
+1348
+
+6598
+5963
+6035
+5404
+3270
+1250
+5947
+3037
+3927
+3702
+5255
+1640
+6476
+
+4499
+5207
+1991
+4613
+3088
+5024
+4737
+5160
+2450
+3582
+2605
+2573
+1100
+3732
+
+1633
+5663
+2415
+4039
+4957
+2697
+5428
+5050
+3979
+3428
+4563
+3770
+3635
+4012
+4773
+
+7377
+6189
+10812
+6905
+11196
+5394
+10135
+
+10008
+2868
+2630
+8542
+8897
+2718
+5831
+4460
+
+1303
+4771
+1574
+2960
+5070
+1596
+5530
+4177
+4210
+6465
+4179
+1000
+4460
+6173
+
+6654
+1378
+2148
+8704
+6875
+4511
+7540
+6078
+5585
+4030
+
+4333
+5953
+5095
+4782
+3651
+4673
+3267
+6389
+2358
+2120
+3684
+3034
+3420
+1322
+
+8922
+9535
+16357
+16552
+
+1378
+1039
+1262
+2067
+6491
+2776
+1352
+4914
+5832
+1369
+6105
+1384
+2474
+1704
+
+6256
+2538
+4701
+4090
+4077
+5333
+2777
+4082
+4640
+2542
+6356
+3065
+4855
+2535
+
+6510
+3709
+4197
+4344
+5906
+6852
+7398
+3578
+3308
+1239
+3817
+5676
+
+5441
+3368
+1752
+2629
+1923
+4711
+1667
+3701
+1350
+4764
+6439
+2341
+4052
+
+6407
+5327
+1229
+4834
+6008
+1302
+5595
+5260
+3680
+3220
+3154
+3353
+1942
+1740
+
+2356
+1908
+3058
+4668
+3641
+1663
+4199
+2190
+6067
+3923
+3288
+1978
+6110
+5330
+
+7020
+2487
+6521
+1084
+6582
+1784
+7861
+2759
+8077
+2961
+
+68314
+
+2160
+15170
+2267
+3867
+6851
+
+8543
+4118
+22260
+
+5313
+3525
+1483
+3613
+5798
+1472
+4020
+5607
+4391
+2502
+5512
+5535
+3755
+5590
+3668
+
+25502
+7623
+15508
+
+2138
+1227
+11355
+1288
+7062
+5391
+3994
+
+7738
+3667
+5000
+1691
+7322
+8054
+4540
+2353
+6870
+8475
+
+4289
+6415
+1251
+4933
+7224
+2608
+2320
+4432
+4637
+1395
+6575
+5581
+
+6841
+1161
+5617
+12505
+6274
+9171
+
+13548
+20154
+20682
+
+2843
+7363
+5967
+15256
+16032
+
+7940
+6992
+3940
+3100
+1334
+1389
+5182
+6666
+4030
+6116
+3036
+
+35234
+19273
+
+7268
+10689
+
+1846
+4211
+1504
+3780
+3789
+2017
+6279
+5001
+2341
+6350
+5169
+1966
+2640
+5574
+
+2125
+8432
+8339
+8130
+3506
+6115
+4684
+9548
+3300
+
+6848
+1274
+6463
+12007
+10719
+10590
+5616
+
+4471
+1304
+1635
+5960
+3702
+1747
+3658
+2446
+4724
+5675
+1739
+3170
+3556
+
+9134
+12963
+6987
+
+5728
+7877
+6499
+5909
+1119
+3090
+5033
+4884
+3151
+
+10675
+8053
+9237
+14206
+11710
+
+49154
+
+5999
+3861
+1836
+3451
+3673
+5193
+2680
+6068
+1743
+5600
+4793
+6211
+2967
+1021
+
+24720
+
+8749
+11674
+4039
+5341
+14256
+
+4553
+3893
+1528
+5490
+2417
+2392
+4023
+2430
+4649
+3163
+3673
+1378
+1957
+1055
+
+10777
+4742
+16291
+16430
+12295
+
+6502
+6052
+2944
+8166
+7567
+3580
+5957
+4691
+1623
+3269
+
+1013
+5809
+16958
+4994
+
+36633
+
+8535
+13662
+24448
+
+6651
+7911
+
+19793
+2436
+
+4671
+4420
+5322
+1215
+4952
+1193
+2387
+2799
+2748
+1343
+4123
+1715
+2978
+2148
+6050
+
+2036
+4670
+5444
+4584
+4220
+6061
+2834
+2319
+1370
+4572
+4249
+4144
+3236
+3812
+3487
+
+55521
+
+3845
+1473
+6794
+4597
+5566
+2735
+2660
+6402
+2515
+3439
+
+3772
+12809
+5790
+10817
+9729
+
+1788
+2476
+4333
+2940
+7232
+3582
+8604
+3742
+7644
+4823
+
+6128
+6737
+5712
+4168
+4465
+2183
+1217
+2257
+6326
+5966
+5699
+2985
+2290
+
+5190
+4155
+10754
+9830
+4507
+2165
+7208
+4409
+
+4256
+4158
+1941
+3124
+5852
+3376
+6411
+5508
+5072
+2374
+4189
+4032
+4957
+2050
+
+2737
+6772
+4468
+2072
+1214
+6231
+7077
+6100
+6990
+5676
+
+7474
+4524
+8778
+7129
+8151
+7975
+7277
+8672
+8097
+3847
+
+29172
+7125
+
+50466
+
+14169
+22037
+
+4483
+1801
+4863
+1920
+2776
+1407
+3998
+1142
+2664
+3920
+5708
+5481
+5701
+5159
+3654
+
+1960
+4419
+5933
+4941
+4511
+1120
+5179
+3447
+5285
+3675
+1333
+1418
+4595
+4140
+2353
+
+1995
+5588
+1443
+5681
+3439
+6178
+5795
+5144
+2788
+6232
+2620
+4665
+5624
+
+37076
+7362
+
+3885
+8268
+10947
+9084
+3016
+10383
+9594
+
+16223
+16281
+5352
+11764
+10192
+
+5248
+3151
+7341
+8125
+10671
+13510
+
+1759
+7635
+7021
+3620
+7640
+4967
+3662
+3840
+7613
+3948
+1820
+
+4010
+3936
+7375
+8060
+12396
+8236
+
+5033
+2739
+4296
+5564
+6502
+3501
+5637
+5826
+5862
+5579
+6416
+2277
+2471
+
+4325
+2621
+1600
+4290
+15494
+
+6834
+15459
+10418
+12560
+6382
+
+8598
+1089
+11386
+9538
+6933
+3943
+
+14268
+7172
+7680
+15936
+
+5695
+
+69893
+
+7293
+4968
+7862
+3210
+1924
+4742
+3519
+1095
+5922
+6335
+2405
+
+4233
+3819
+7282
+10018
+3820
+5380
+9377
+8889
+
+13183
+9964
+4473
+12469
+9862
+6567
+
+4903
+1198
+5238
+1582
+1820
+6080
+10178
+
+4554
+6315
+2818
+5956
+2491
+5291
+5056
+3699
+2843
+1243
+5430
+2175
+
+31126
+
+5392
+1590
+3738
+2507
+2817
+6963
+6140
+4606
+2814
+7044
+1282
+
+12230
+1430
+4283
+11385
+2557
+6868
+
+3871
+2558
+1957
+4058
+1935
+5738
+1513
+5744
+4130
+3321
+3760
+4155
+1063
+3694
+
+67474
+
+2215
+8962
+5442
+7390
+6223
+3648
+2390
+5464
+
+5125
+3842
+2131
+3414
+6085
+3353
+3660
+1593
+4395
+2664
+4987
+2352
+5693
+1391
+1661
+
+6017
+5013
+5243
+3734
+3116
+1541
+6456
+2806
+6143
+1344
+5977
+5422
+2326
+2164
+
+33377
+
+5950
+5168
+1348
+3144
+5760
+6974
+8537
+6664
+1248
+
+9040
+4510
+5642
+8547
+9407
+5058
+6158
+7726
+6731
+
+4182
+5246
+2686
+4196
+3809
+3253
+3260
+3162
+2703
+6373
+6136
+2904
+6356
+5038
+
+3368
+11040
+5793
+13747
+10478
+5166
+
+11697
+10072
+8434
+5732
+
+5244
+6374
+1877
+2902
+4263
+4835
+2283
+2086
+6044
+6343
+6232
+2849
+3694
+6392
+
+13062
+12405
+12869
+16366
+1652
+
+8036
+1720
+7759
+13661
+1370
+3505
+
+5885
+1708
+10440
+7438
+11480
+4904
+8387
+
+4788
+10326
+6143
+11063
+9649
+9384
+
+5849
+1935
+7411
+4694
+4435
+1321
+5301
+2096
+2422
+5484
+6560
+3070
+
+5008
+5405
+9444
+6355
+13150
+12686
+
+1618
+5831
+1957
+1288
+1382
+2946
+1926
+1828
+1646
+4823
+3637
+1309
+5727
+4450
+
+66234
+
+4016
+4075
+4551
+5869
+2866
+2461
+1055
+4712
+7220
+1973
+4650
+
+2387
+1102
+4558
+2290
+1969
+3624
+2383
+4059
+4877
+3439
+6891
+3819
+5824
+
+3440
+11447
+5522
+16700
+
+8373
+1356
+7249
+8484
+6767
+7990
+8778
+2235
+5995
+8511
+
+5466
+6088
+2583
+5235
+6093
+3089
+1570
+6112
+3668
+2187
+5582
+1380
+4800
+5529
+2987
+
+12323
+4775
+11105
+3805
+7671
+6737
+
+3197
+1256
+4539
+6383
+1476
+2134
+6785
+7337
+1229
+4965
+5055
+
+13128
+8149
+4426
+8087
+2873
+
+1695
+8214
+7147
+7216
+1070
+2801
+5033
+8103
+7750
+5749
+
+4082
+1630
+1958
+6113
+4486
+2111
+1486
+6451
+5630
+5682
+4558
+
+10475
+30751
+
+5397
+5067
+1178
+2106
+5557
+4847
+1661
+3469
+4908
+2590
+4686
+2118
+4495
+2994
+
+12590
+12902
+8742
+15433
+2777
+
+7451
+8722
+7302
+2269
+9592
+6162
+
+1907
+6741
+4442
+6526
+8289
+7479
+9481
+1642
+4982
+
+2001
+12803
+7255
+13545
+10713
+
+14621
+25826
+20771
+
+1055
+8331
+7422
+8400
+2208
+6688
+8425
+6883
+4192
+4725
+
+9970
+10127
+2777
+3933
+9274
+3791
+9906
+
+2779
+1118
+2823
+1563
+9917
+6065
+1863
+1885
+
+5053
+1922
+5356
+8266
+7335
+4260
+8730
+7307
+3140
+
+4340
+1080
+2120
+5498
+6769
+6170
+2944
+4677
+1155
+4676
+2420
+4945
+5941
+
+14838
+3844
+19712
+16283
+
+1906
+3672
+4274
+6550
+6072
+5299
+4493
+3348
+2804
+3747
+3208
+5359
+
+59156
+
+6128
+5959
+12262
+12166
+4945
+9635
+
+8095
+1757
+13656
+7215
+2545
+6298
+
+7873
+6515
+6407
+4182
+4911
+3966
+1942
+7281
+5082
+7446
+5545
+
+3876
+5618
+4226
+4445
+3915
+1250
+5469
+3872
+5157
+5539
+2894
+1357
+1419
+4214
+3009
+
+3364
+6618
+1432
+7583
+6192
+2529
+2076
+6231
+7333
+
+5028
+2989
+3801
+1895
+2367
+5747
+2724
+1304
+3085
+2524
+1295
+1022
+2613
+4239
+4413
+
+3418
+23885
+
+3895
+3302
+1097
+3150
+1379
+1815
+1484
+2074
+2616
+3395
+6100
+5488
+1006
+3046
+
+1951
+8238
+6010
+3652
+6640
+7990
+3900
+8191
+
+6978
+3025
+1966
+7152
+5963
+7326
+1866
+2507
+4764
+1434
+3194
+3326
+
+3081
+6828
+6495
+3257
+4236
+4938
+7090
+2826
+6614
+1341
+7098
+6771
+
+18885
+3826
+13103
+1193
+
+16653
+13676
+19294
+13878
+
+7460
+4327
+7335
+4898
+6259
+7941
+5940
+5603
+3095
+5674
+2886
+
+8680
+4662
+8044
+8210
+5886
+9057
+7917
+3258
+5995
+
+2800
+
+31568
+
+5423
+33845
+
+8988
+13780
+9059
+14650
+9824
+
+10327
+13747
+10937
+4594
+6882
+
+2696
+2860
+1070
+1662
+6098
+2369
+2821
+3603
+3593
+5347
+4871
+4967
+2211
+3330
+5226
+
+8520
+1896
+1906
+5172
+6845
+1565
+6366
+5509
+5068
+
+4047
+4661
+2384
+1904
+4705
+5402
+6650
+6120
+4834
+5897
+6492
+6200
+5868
+
+4130
+1530
+9654
+9306
+8529
+2508
+8918
+4040
+3717
+
+3245
+4195
+11698
+10053
+6635
+4749
+
+12283
+11894
+8168
+
+6418
+7151
+4827
+2391
+8643
+2315
+8664
+3547
+6900
+4418
+
+65083
+
+5164
+1748
+8739
+4945
+2604
+5493
+5310
+3763
+6011
+4091
+
+4342
+2566
+6021
+4067
+1385
+2486
+4444
+1713
+3380
+4253
+4720
+1602
+4814
+3234
+1739
+
+13603
+22634
+
+7845
+
+4139
+8832
+7441
+1967
+6707
+7981
+3416
+10633
+
+4808
+9206
+6975
+4257
+6024
+5176
+
+10639
+9329
+5010
+7215
+4522
+8168
+9936
+9792
+
+4326
+4601
+6508
+2501
+3866
+3060
+2188
+6429
+1014
+1383
+6937
+5313
+4392
+
+8977
+2420
+1013
+4267
+9689
+2955
+5583
+2947
+5570
+
+5067
+1139
+4531
+3001
+7698
+2028
+8025
+1424
+6837
+1357
+2186
+
+5433
+19739
+5321
+
+5019
+4714
+2688
+5290
+1593
+1320
+1703
+2978
+1476
+3034
+3538
+2825
+5819
+5547
+
+6441
+1104
+3128
+7940
+5977
+8434
+4493
+2139
+1617
+4933
+
+3219
+3273
+12383
+6076
+11222
+5523
+
+8875
+1005
+4958
+3234
+3196
+5527
+9875
+7306
+
+1591
+6031
+2124
+1224
+7008
+2559
+4540
+7670
+
+5927
+4323
+5630
+1067
+5482
+1939
+5428
+3416
+3494
+2469
+4287
+5538
+1190
+4234
+1734
+
+10808
+15234
+14069
+10497
+7697
\ No newline at end of file
diff --git a/src/2022/day01/python/main.py b/src/2022/day01/python/main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2022/day01/python/test.txt b/src/2022/day01/python/test.txt
new file mode 100644
index 0000000..444e241
--- /dev/null
+++ b/src/2022/day01/python/test.txt
@@ -0,0 +1,14 @@
+1000
+2000
+3000
+
+4000
+
+5000
+6000
+
+7000
+8000
+9000
+
+10000
\ No newline at end of file
diff --git a/src/2022/day01/python/test_main.py b/src/2022/day01/python/test_main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2022/day02/input.txt b/src/2022/day02/go/input.txt
similarity index 100%
rename from src/2022/day02/input.txt
rename to src/2022/day02/go/input.txt
diff --git a/src/2022/day02/main.go b/src/2022/day02/go/main.go
similarity index 100%
rename from src/2022/day02/main.go
rename to src/2022/day02/go/main.go
diff --git a/src/2022/day02/main_test.go b/src/2022/day02/go/main_test.go
similarity index 100%
rename from src/2022/day02/main_test.go
rename to src/2022/day02/go/main_test.go
diff --git a/src/2022/day02/test.txt b/src/2022/day02/go/test.txt
similarity index 100%
rename from src/2022/day02/test.txt
rename to src/2022/day02/go/test.txt
diff --git a/src/2022/day02/python/input.txt b/src/2022/day02/python/input.txt
new file mode 100644
index 0000000..0261bf1
--- /dev/null
+++ b/src/2022/day02/python/input.txt
@@ -0,0 +1,2500 @@
+A X
+B Y
+B Y
+C X
+B X
+C Z
+C Z
+A Z
+A Z
+B Y
+C Z
+A Z
+C Z
+C X
+B Z
+C Z
+C Z
+C Z
+B Y
+C Z
+C Z
+C Z
+A Z
+A Y
+B Z
+B Z
+A Y
+B X
+C Z
+C Z
+A Z
+A Z
+C Z
+A Y
+A X
+A Z
+A Z
+B X
+B Z
+B X
+A Z
+B X
+B Z
+B Z
+C Z
+A Z
+A Z
+A Z
+C Z
+B Z
+A Z
+A Y
+A Y
+B Y
+B Y
+B Z
+A Z
+B Z
+A Z
+B Z
+C Z
+B Y
+A Z
+B Y
+A Z
+A Z
+A Z
+C Z
+A Y
+A Z
+C Z
+C Z
+A Z
+A X
+B Y
+C Z
+A Z
+A Z
+C X
+C Z
+B X
+C X
+B X
+A Z
+C Z
+C Z
+A Y
+A Z
+B X
+C X
+A Z
+A Z
+C Z
+C Z
+B Y
+C Z
+A Z
+A Z
+A Y
+B X
+B Y
+A Z
+C Z
+A Z
+A Z
+A Z
+C X
+C Y
+C Z
+B X
+B X
+B X
+A Z
+A X
+C Z
+A Z
+B Y
+B X
+A Y
+B X
+A Z
+C Z
+C Z
+A X
+A Z
+C Z
+B Z
+B X
+A Z
+C Z
+C Z
+C X
+C Z
+C Z
+C Z
+A Y
+B X
+A Y
+A Z
+B Z
+B Z
+C Z
+B Z
+B Z
+B X
+A Z
+C Z
+A Z
+A Y
+C Z
+A Z
+C X
+A Z
+A Z
+A Y
+A Y
+A Z
+C Z
+B Y
+A X
+A Z
+A Y
+C Z
+A Z
+B X
+A Z
+B Y
+A X
+C X
+B X
+A Y
+A Z
+B Z
+A Z
+A Z
+B X
+A X
+C Z
+B X
+B Y
+A Z
+B X
+C Z
+A Z
+C Z
+B X
+A Z
+A Y
+A Z
+A Z
+B X
+B X
+B Z
+A Z
+B Y
+C Z
+B Z
+C Z
+C Z
+B X
+B X
+A Z
+C Z
+C Z
+A X
+B X
+B X
+A Y
+C Z
+A Z
+A Y
+B X
+A Z
+A Z
+B X
+A Z
+C Z
+B X
+B Z
+B Y
+B X
+A Y
+C Z
+C Z
+C Z
+A X
+C Z
+A Z
+C Z
+C Y
+C Z
+C Z
+C Z
+B X
+A Z
+B X
+B Z
+A Z
+C Z
+B Y
+B Y
+B Z
+C Z
+C Z
+C Z
+B Z
+B Y
+A Z
+B X
+B Z
+C Z
+A Z
+B Y
+B Y
+A X
+C Z
+B Y
+A Y
+B Y
+B X
+B Y
+B Y
+A Y
+B Y
+C X
+A Y
+A Y
+C Z
+A Z
+A Y
+C Z
+A Z
+A Z
+C Z
+C Z
+C Z
+B X
+B Y
+A Y
+A Y
+B Z
+A Z
+B Y
+B X
+B Y
+A Y
+A Y
+A Z
+B Z
+C Z
+C Z
+C Z
+A Z
+C Z
+A Z
+A Z
+A Z
+A Z
+C Z
+B Y
+C Z
+B X
+C Z
+A X
+A Z
+B X
+C Y
+C X
+A X
+A X
+A Z
+A Z
+B X
+A Y
+B Z
+A Z
+B Z
+A Z
+C Z
+C X
+C Z
+C Z
+C X
+C Z
+C Z
+C X
+C Z
+B Z
+A Z
+B Y
+A Z
+C Z
+B X
+C Z
+B Z
+B Y
+A Z
+B Y
+A Y
+B X
+B Z
+B Z
+A Z
+B Z
+C Z
+C Z
+A Y
+A Z
+A X
+A Y
+C Z
+B X
+A Z
+C X
+A Z
+A Z
+A Z
+A Z
+C Y
+B Y
+B Y
+A X
+C Z
+A X
+A Z
+A Y
+C X
+A Y
+A Y
+A Z
+C X
+C Z
+B Z
+B X
+A Z
+C Z
+C Z
+B Z
+B X
+C Z
+C Z
+A Y
+B Z
+A X
+B Y
+A Z
+C X
+B X
+C Z
+B Y
+A X
+A Z
+B Y
+A Y
+A Z
+B Z
+A Y
+B Y
+A Z
+B Y
+B X
+B Z
+A Z
+B Y
+B Z
+A Y
+A Z
+C Z
+B X
+C Z
+B X
+C Z
+B Z
+C Z
+C Z
+B Z
+A Y
+A Y
+C Z
+B Z
+A Z
+A X
+C Z
+A Z
+C Z
+A Z
+A X
+A Z
+A Z
+A Y
+B Z
+B X
+C X
+B Y
+C Z
+B X
+B Z
+B X
+A Z
+A Z
+A Z
+B Z
+B Y
+A Z
+B Y
+C Z
+B Z
+A Z
+A Y
+C Z
+A Z
+B Y
+B X
+B Y
+B X
+C Z
+C Y
+A Z
+C Z
+C Z
+A Z
+C X
+B Z
+A Y
+B Y
+B Y
+B Y
+C Z
+B Z
+A Z
+B Y
+A Z
+A Z
+C Z
+B Y
+B Y
+A X
+A Z
+A Z
+C Z
+A Z
+C Z
+C Z
+A X
+B Z
+A Z
+A Z
+C Z
+C Z
+B Y
+B Y
+A Z
+A Y
+A Z
+B Y
+B Z
+A Y
+B Z
+A Z
+A Z
+A Y
+C Z
+A Y
+C Z
+B X
+A Z
+A Z
+C Z
+A Y
+C Z
+A Z
+A Y
+A Y
+C Z
+A Z
+A Y
+B X
+A Y
+B X
+A Z
+A Z
+A Y
+B Y
+B Y
+B X
+C Z
+C Z
+B Y
+B X
+C Z
+B Y
+C Z
+B Y
+B X
+C Z
+A Y
+B Z
+C X
+A Y
+C Z
+C Z
+C X
+A Y
+A Z
+B X
+C Z
+A Z
+B Y
+C Z
+B X
+B Z
+C Z
+C Z
+C Z
+A Z
+B X
+C Z
+A Z
+A Y
+B Y
+C Z
+A X
+C Z
+A Y
+C X
+A Y
+B Y
+C Z
+B X
+A Z
+C Z
+C Z
+B Z
+B Y
+A Z
+A Z
+A Y
+C Z
+A Y
+A X
+A Y
+B Z
+C Z
+C Z
+A Z
+A Z
+C Z
+A Y
+C Z
+C Z
+B Z
+C Z
+C Z
+A Z
+C Z
+B Z
+C Z
+B X
+A Y
+A Y
+A Z
+C X
+C Z
+C Y
+C Z
+C Z
+C Z
+B Z
+A Z
+C Z
+C Z
+A Y
+B Y
+B X
+B X
+C Z
+A Z
+B Y
+C Z
+C Z
+B X
+C Z
+C Z
+A Y
+A Y
+A Z
+A Y
+B Y
+C Z
+A X
+A Y
+C Z
+A Z
+C Z
+C Z
+A X
+A Z
+C Z
+B Z
+A Z
+A Z
+B Y
+B X
+A Z
+A Z
+B Z
+C Z
+C Z
+A Y
+A Z
+B Z
+B Z
+C Z
+B Z
+A Y
+B X
+A Z
+B X
+C Z
+A Z
+A Y
+C Z
+C Z
+A Z
+A Z
+A Z
+A Z
+A Z
+B X
+C Z
+C Z
+C Z
+A Z
+A Z
+A Z
+A Z
+B X
+C Z
+B X
+C Z
+A Z
+C Z
+A X
+A Y
+A Z
+C Z
+B Y
+C Z
+C Z
+B Z
+C Z
+B X
+C Z
+B X
+A Z
+A Z
+B Y
+B X
+C Z
+C Z
+C Z
+C Y
+C X
+B Y
+B Y
+C Z
+A Z
+A Z
+C Y
+C Z
+B Y
+C X
+A Z
+B X
+A Z
+C Z
+C Z
+A Z
+C X
+A Z
+B Z
+B Y
+A X
+C Z
+A Z
+B X
+A Z
+B Y
+C Z
+B X
+C Z
+B Y
+C Z
+A X
+C Z
+A Z
+C Z
+A Y
+A Y
+C Z
+C Z
+B X
+B Z
+A Z
+C Z
+A Z
+C Z
+A Y
+B X
+C Z
+A Z
+B X
+C Z
+C Z
+B Y
+C Z
+C Z
+C Y
+B Y
+B X
+C Z
+B Y
+A Z
+A Z
+B X
+B Y
+B Y
+B Y
+B Y
+B Z
+C Z
+C Z
+A Z
+C Z
+C X
+C Z
+B Z
+C X
+C X
+A Z
+A Z
+B Y
+B Z
+B Y
+C Z
+A Y
+A Z
+B Y
+B Y
+B X
+A Z
+A Z
+A Z
+C Z
+C Z
+C Z
+B Z
+A X
+A Z
+A Y
+C Z
+A Z
+A Z
+B Z
+B Y
+B Y
+A X
+C Z
+C Z
+B X
+A Z
+B Y
+A Z
+B Z
+A Z
+C Z
+C X
+A Y
+A Z
+C Z
+C Z
+C Z
+A Z
+C Z
+C Z
+B Y
+A Z
+A Z
+A Z
+A Y
+C Z
+A Z
+C Z
+B Z
+A Z
+C Z
+C X
+B Z
+C X
+B X
+C Z
+B Z
+A Y
+C Z
+C Z
+B X
+B Y
+B Y
+A Z
+B X
+A Y
+A Y
+A Z
+B Z
+C Z
+C Z
+B Z
+A Z
+C Z
+B Y
+C X
+B Z
+C Z
+B Z
+C Y
+C Z
+A Y
+A Z
+C Z
+A Z
+A Z
+C Z
+C Z
+C Z
+B Z
+A Z
+C Z
+C X
+A Z
+A Z
+B X
+B Y
+C Z
+A Y
+A Z
+C Z
+B Z
+C Z
+A Y
+A Y
+C Z
+A Z
+A Z
+B X
+A Y
+B Y
+C Z
+C Z
+B Y
+A Z
+A Y
+C X
+C Z
+C Z
+A Z
+C Z
+A Y
+C Z
+A Z
+A Z
+C Z
+A Z
+A X
+C Z
+C Z
+A Z
+B Z
+B Z
+B X
+A Z
+B X
+A Y
+A Z
+C Z
+C Z
+A Y
+B Z
+C Z
+A Z
+A Z
+C X
+B Z
+B Y
+B Y
+A Y
+B X
+B X
+C Z
+B X
+A Z
+B X
+A Z
+C Z
+C Z
+A Z
+B Y
+C Z
+C X
+C Z
+C Z
+A Z
+B X
+C Z
+C Z
+A Y
+C Z
+C Z
+B X
+B X
+B X
+A Z
+B Y
+C Z
+A Z
+C Z
+C Z
+B Y
+C Z
+A Z
+C Z
+B Y
+B Z
+C Z
+C Z
+C X
+C Z
+B Z
+C Z
+B Y
+B X
+A Z
+A Y
+B X
+A Y
+B Y
+A Z
+C Z
+C Z
+C Z
+B X
+C Z
+B X
+A Z
+B X
+B Y
+A Z
+C Z
+C Z
+C Z
+A Y
+B Y
+A Y
+C Z
+A Z
+C Z
+C Z
+A Z
+A Y
+C Z
+B X
+A Y
+A Z
+C Z
+B Y
+C Z
+A Z
+C Z
+B Y
+C Z
+C Z
+B Y
+C Z
+C Z
+B X
+C Z
+B Y
+C Z
+B Y
+A Z
+C Z
+B Y
+A Z
+C Z
+C Z
+B Y
+B X
+B Z
+A Z
+A Y
+A Z
+A Y
+C Z
+C Z
+B X
+C Z
+B Y
+C Z
+C X
+C Z
+A Y
+A Z
+C Z
+C Z
+C Z
+A Z
+B Y
+C Z
+C Z
+A Z
+B Y
+C Z
+A Y
+B Z
+B X
+A Y
+B Y
+C Z
+A Y
+C Z
+B Y
+B Y
+C Z
+C Z
+B Y
+B X
+C Z
+B X
+B Z
+B Y
+C Z
+C Z
+C Z
+A Z
+A X
+A Z
+B Z
+A Z
+C Z
+A Z
+C Z
+C Z
+A Z
+A Z
+B Z
+C Z
+C Z
+C Z
+A Z
+B Y
+A Z
+A Y
+C Z
+B X
+B X
+A Y
+C Z
+C Z
+B X
+B Z
+C X
+B X
+B Y
+A Z
+A Y
+A Z
+C Z
+B X
+C Z
+B Z
+C Z
+A Y
+C Z
+A Y
+C Z
+B Y
+B Z
+C Z
+C Z
+C Z
+C Z
+C Z
+A Z
+B Y
+C Z
+C X
+B Y
+C X
+B Y
+B Z
+B Y
+A Z
+A Z
+B X
+C Y
+A Z
+C Z
+B X
+B X
+A Z
+A Z
+B Y
+C Z
+B Y
+B Z
+A Y
+A Z
+C Z
+C Z
+B X
+A Z
+A Z
+A Z
+C Z
+C X
+C Z
+C Z
+C Z
+C Z
+A Z
+B Y
+C Z
+C Z
+C Z
+B Z
+C Z
+B X
+C Z
+A Z
+A Z
+C Z
+C Y
+B Y
+A Z
+A Y
+B Z
+A Y
+B Y
+C Z
+A Y
+C Z
+A Z
+C Z
+B X
+C Z
+A Z
+A Z
+B Z
+A Z
+B Z
+A Z
+B Y
+C Z
+B Z
+B Y
+C Z
+A Z
+A Z
+B X
+B X
+A Y
+A Z
+B Y
+A Y
+A Z
+C Z
+A X
+C Z
+A Z
+A Z
+C Z
+A Z
+B X
+A Z
+A Y
+A Y
+B Y
+A Z
+A Z
+A Z
+B Y
+B Y
+A Z
+A Z
+C Z
+C Z
+A Y
+B X
+B X
+C Z
+A Y
+C Z
+C Z
+C Z
+A Y
+C Z
+C X
+C Z
+B Y
+A Z
+B Y
+A Z
+C Z
+A Y
+C Z
+A Y
+B Z
+B X
+B Y
+B X
+B Y
+B X
+A Y
+C Z
+C Z
+B Z
+C Z
+C X
+B X
+A X
+A Z
+A Z
+B Y
+C Z
+C Z
+B Y
+C Z
+C Z
+B Y
+A Z
+B Z
+C X
+C Z
+C Z
+B Y
+C X
+C Z
+B Z
+A Z
+C Z
+B X
+A Z
+C Z
+A Z
+C Z
+B X
+B Z
+C Z
+C Z
+C Z
+A Z
+B Y
+A Y
+A Z
+C Z
+C Z
+C Z
+B Y
+A Z
+C Z
+C Z
+A Z
+B Z
+B Y
+C Z
+A Y
+A Z
+A Z
+C Z
+C Z
+C Z
+C Z
+A Z
+C Z
+C Z
+A Y
+A Y
+A Z
+C Z
+A Z
+A Z
+B X
+A Y
+A Z
+A Y
+C Z
+B Z
+A Y
+A Z
+B X
+C Z
+A Z
+A Z
+A Y
+B Y
+C Z
+C Z
+A Z
+B X
+A Y
+A Z
+C Z
+C Z
+B Y
+C Z
+A Z
+B Y
+C Z
+C Z
+B Y
+C X
+A Z
+C Z
+C Z
+C Z
+C Z
+A Z
+B Y
+A Y
+B Y
+B Z
+C Z
+A Z
+B Z
+C Z
+A X
+C Z
+C X
+A Z
+A Z
+A X
+A Z
+A Z
+A Z
+A Z
+B X
+A Z
+A Z
+A Z
+C Z
+C Z
+C Z
+C Z
+A Z
+A Y
+B X
+C Z
+B Y
+A Y
+A Z
+C Z
+C Z
+C Z
+B Y
+A Z
+B Z
+C Z
+B X
+B Z
+B Z
+B Y
+C Z
+C X
+B Y
+A Y
+C X
+C Z
+C Z
+B Y
+A Z
+C Z
+A Z
+A Z
+C Z
+C Z
+C Z
+C Z
+B Z
+C Z
+B X
+C Z
+B X
+B Z
+A Z
+B Y
+C Z
+A Z
+C Z
+A Z
+A Y
+A Z
+C Z
+B X
+C Z
+C Z
+A Z
+A Z
+C Z
+C Z
+A Z
+C Z
+A Y
+C Z
+C Z
+A Z
+A X
+A Z
+C Z
+A Z
+C Z
+C Z
+A Z
+B X
+C Z
+C Z
+C X
+A Z
+A Z
+A X
+B X
+C Z
+C Z
+A Z
+B X
+C X
+A Z
+C Z
+B Y
+C Z
+A Z
+C Z
+A Y
+A Z
+C Z
+C Z
+B X
+A Z
+B Y
+A Z
+C Z
+C X
+B Z
+C Z
+A X
+A Y
+C Z
+C Z
+C X
+B Z
+A Z
+A Z
+B Z
+A Y
+C X
+A Z
+C Z
+A Z
+C Z
+A Z
+A Z
+A Z
+C Z
+A Z
+C Z
+B X
+A Y
+A Z
+C Z
+B Y
+C Z
+A Y
+C Z
+C Z
+C Z
+C Z
+A Z
+A Z
+B Z
+C Z
+A Y
+C X
+C Z
+C Y
+B Y
+C X
+A Y
+C Z
+C Z
+B Z
+B Y
+B Z
+A Z
+B Y
+C Z
+C Z
+B X
+B Y
+B Z
+A Z
+A Z
+C Z
+B X
+A Z
+B Y
+C Z
+C Z
+B X
+C Z
+A X
+C Z
+B X
+A Y
+A Z
+B Y
+C Z
+C Z
+A Y
+A Z
+C Z
+C Z
+A Z
+C Z
+C Z
+C Z
+B X
+C Z
+B Y
+B Y
+C Z
+B Z
+C Z
+C X
+C Z
+B X
+A Z
+B Z
+B Z
+B Z
+C Z
+A X
+C Z
+B X
+A Z
+A Z
+A Z
+A Y
+C Z
+C Z
+C Z
+C X
+A Y
+A Z
+A Z
+C Z
+C Z
+A Z
+B X
+C Z
+B Y
+A X
+C X
+B Y
+B Y
+A Y
+C X
+C Z
+B X
+A Z
+A Z
+B Z
+A Y
+C Z
+C Z
+A Z
+C Z
+C Z
+A Y
+C Z
+C Z
+B Y
+C Z
+C Z
+A Z
+A Z
+B Z
+A Z
+C Z
+C Z
+C Z
+C X
+C Z
+A Z
+C Z
+C Z
+C Z
+C X
+C Z
+C Z
+A Z
+B Y
+C Z
+B X
+A Z
+C Z
+C Y
+A Z
+A Y
+A Z
+C X
+C X
+A Y
+B X
+A Y
+B Y
+B Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B X
+B Z
+A Y
+A Y
+A Y
+B Y
+A Y
+B X
+C X
+A Z
+C Z
+A Z
+A X
+C Z
+C Z
+B Z
+C Z
+B Z
+B Z
+A Z
+A Y
+A Z
+B X
+B Z
+C Y
+A Z
+A Z
+A Z
+C Z
+C Z
+C Z
+C Z
+A Z
+C Y
+A Y
+C X
+C Z
+B Y
+C Z
+A Z
+A X
+A Z
+B Z
+C Z
+B X
+B X
+A Z
+C Z
+B X
+C Z
+C Z
+A X
+C Z
+A Z
+C Z
+C Z
+B Z
+B Y
+B X
+B Z
+A X
+A Y
+C Z
+A X
+A Y
+B Y
+A Y
+C Z
+C Z
+B X
+C Z
+B Z
+C Z
+B Y
+C Z
+A Z
+A Y
+B Z
+B Z
+A Z
+A Z
+A Z
+A Y
+C Z
+C X
+A Z
+A X
+B Y
+B X
+A Z
+C Z
+A Z
+A Z
+C Z
+B Z
+B Z
+B Y
+B Y
+A Y
+C Z
+A Z
+A Z
+C Z
+A Z
+C Z
+C Z
+B X
+B Y
+C Z
+C Z
+B X
+C X
+C Z
+A Y
+C X
+B X
+A Z
+A Z
+A Y
+B Y
+A Z
+B Z
+C Z
+C Z
+A Z
+B X
+A X
+B Y
+A Z
+B Z
+A Z
+B Y
+C Z
+A Z
+A Y
+C Z
+A Y
+C Z
+C Z
+A Z
+C Z
+C Z
+A Z
+A Y
+C Z
+A Z
+B Z
+A Y
+A Z
+C Z
+C Z
+A Y
+C Z
+A Y
+A Z
+C X
+B X
+B Z
+B Z
+B Z
+B Z
+B Y
+B X
+A Z
+C Z
+B Z
+C Z
+C Z
+C X
+A Z
+A Z
+B X
+C Z
+A Y
+C Z
+B Z
+A Z
+C X
+C Z
+C Z
+B Y
+C Z
+B Z
+A Z
+A X
+C Z
+B X
+A Z
+B Y
+C Y
+C X
+C Z
+A Z
+B Z
+A Z
+B Y
+C Z
+C Z
+A Z
+C Z
+C Z
+C Z
+C Z
+B Z
+C Z
+B X
+B Y
+A Z
+B Y
+B Y
+A Z
+C Z
+C Z
+B Y
+B Y
+B Y
+B Y
+B Z
+B X
+A Z
+B Y
+B X
+A Z
+A Y
+B X
+B X
+C Z
+C X
+B Y
+C Z
+C Z
+A Z
+C X
+C Z
+A Z
+B Y
+A Z
+A Z
+A X
+C Z
+B Y
+A Z
+C Z
+C Z
+A Z
+B Y
+B Y
+B Z
+B Z
+B X
+A X
+A Z
+A Z
+C X
+B Y
+A Y
+B Z
+A Z
+B Y
+C Z
+C Z
+B X
+C Z
+C Z
+A Z
+C Z
+A Z
+A Z
+C Z
+C Z
+C Z
+B X
+B Z
+A Y
+B X
+C Z
+A Z
+C Z
+A Y
+B Y
+A X
+C Z
+A Y
+A Z
+A Z
+A Z
+B Z
+C Z
+C Z
+C Z
+C Z
+C Z
+B Z
+B X
+C Z
+A Z
+C Z
+A X
+B Z
+C Z
+C Z
+A Z
+A Z
+B Y
+C Z
+A Z
+C Z
+B Y
+A Z
+A Y
+A Y
+C X
+C Z
+A Z
+B Y
+C Z
+C X
+C Z
+A Y
+A Z
+A Z
+B X
+C Z
+B X
+B Y
+A Y
+A Y
+B Z
+A Y
+A Z
+B Z
+A Z
+A X
+B Z
+C Z
+C X
+C Z
+C Z
+C Z
+C Z
+C X
+C Z
+A Z
+A Z
+B X
+A Z
+A Z
+A Z
+C Z
+A Z
+C Y
+B Y
+B Y
+C Z
+A Y
+B Z
+C Z
+C Z
+C Z
+A Z
+C Z
+A Z
+B Z
+B Y
+A Y
+C Z
+A Z
+A Y
+C Z
+C Z
+A Y
+B Y
+C Z
+A Z
+A Y
+A Z
+B X
+C X
+C Z
+C Z
+A Y
+A Z
+B X
+C Z
+A Z
+C Z
+C Z
+A Z
+C Z
+B X
+A Z
+A Z
+B Y
+C Z
+B X
+C Z
+C X
+A Z
+B X
+C X
+C Z
+C Z
+A Z
+B Y
+A Y
+C Z
+B Z
+B Y
+C X
+B X
+C Z
+C Y
+A Z
+A Z
+C Z
+B X
+A Z
+C Z
+B Y
+B X
+B Z
+B X
+A Y
+C Z
+C Z
+C Y
+A Z
+A Y
+C Z
+B X
+A Z
+A Z
+B Z
+B Z
+B X
+A Y
+A Z
+C Z
+A Z
+A X
+A Y
+C Z
+C Z
+B Y
+A Z
+C Z
+B Z
+A Z
+B Y
+C Z
+B Y
+A Z
+B Z
+A Z
+B Y
+B Z
+C Z
+C Z
+A Y
+C Z
+A Z
+B X
+C Z
+B X
+B X
+A Z
+C Z
+B Z
+A Z
+C Z
+C Z
+C Z
+C Z
+A Z
+C Z
+B Z
+C Z
+A Z
+B X
+C Z
+A Z
+C Z
+C Z
+A Y
+A Y
+C Z
+A Y
+A X
+C Z
+A Z
+A Z
+B Z
+A Z
+A X
+C Z
+B Y
+A Y
+B Y
+A Y
+C Z
+C Z
+B X
+A Z
+B X
+B Z
+B Z
+A Y
+C X
+A Y
+C Z
+B Y
+A Z
+A Z
+C Z
+A Z
+A Z
+B Y
+C X
+B X
+A Z
+A X
+C Z
+A Z
+B Y
+A Z
+C Z
+C Z
+A Z
+B X
+B Z
+A X
+A Y
+A Y
+B Y
+B Z
+B X
+B Z
+C X
+B Z
+C Z
+C Z
+B X
+B Y
+B X
+B Z
+B Z
+C Z
+A Z
+A X
+B X
+C Z
+A Z
+B Y
+B Y
+C X
+A Z
+B X
+A X
+C Z
+B Y
+A Y
+B Y
+A Y
+B Z
+C Z
+C Z
+C Z
+B Y
+B Y
+A Y
+C Z
+C Y
+B Z
+A Z
+C Z
+C Y
+B X
+B X
+A Z
+B Y
+A Z
+B X
+A Z
+B Y
+B Y
+C Z
+C Z
+A Z
+B Y
+C Z
+C Y
+C Z
+C Z
+A Y
+B X
+C Y
+A Y
+B X
+C Z
+C Z
+C Z
+B Z
+B Y
+A Z
+A Y
+A Z
+C Z
+C Z
+B Y
+C Z
+C Z
+A Z
+B Z
+C Z
+A Z
+A Z
+A Z
+A Y
+C X
+B Y
+B Y
+A Y
+C Z
+B Y
+B X
+B Z
+C Z
+C Z
+A Y
+A Z
+A Z
+B Z
+C Z
+C Z
+B Y
+C Z
+A Z
+C Z
+C Z
+C X
+B X
+B Y
+C Z
+A Z
+A Y
+C Z
+C Z
+C Z
+A Z
+A Y
+C Z
+A Z
+A Y
+A Y
+C Z
+B X
+C Z
+C X
+B Y
+A Z
+B Y
+C Z
+B X
+A Z
+A Y
+C Z
+A Z
+C Z
+A Z
+C Z
+C Z
+A Y
+A Z
+A Z
+B Z
+A Z
+A Z
+C Z
+A X
+A Y
+C X
+A Z
+A Z
+B Z
+B Y
+A Z
+C Z
+B Z
+C Z
+A Z
+C Z
+B X
+C Z
+B Z
+B Z
+C Z
+B Z
+A Z
+A Z
+C Z
+A Z
+C X
+C Z
+A Y
+A Z
+A X
+A Z
+B Z
+B Z
+C Z
+C X
+A Y
+C Z
+A Z
+A Z
+A X
+C Z
+C Z
+C X
+B Z
+B X
+B Z
+B Y
+C Z
+A Z
+A Y
+A Y
+B X
+A Y
+A Y
+C Z
+C Z
+B Z
+A Z
+B Z
+C Z
+A Z
+B Y
+B Y
+C Z
+A Z
+C Z
+A Z
+B Y
+A Z
+C Z
+B X
+C Z
+A Z
+C Z
+A Y
+B Y
+A Y
+B Z
+A Y
+C Z
+A Z
+C Z
+B X
+B X
+B Y
+B X
+C Z
+A X
+B Y
+B Z
+C Z
+A Y
+C Z
+B Z
+C Z
+A Z
+C X
+C Z
+A Z
+A Y
+C Z
+C Z
+B Y
+C Z
+B Y
+C Z
+C Z
+B Z
+A Z
+C Z
+B Y
+B X
+A Z
+C Z
+C Z
+A Z
+C Z
+C Z
+B Y
+A Z
+B X
+C Z
+B Y
+B X
+A Z
+C Z
+A Z
+C Z
+A Z
+C Z
+B Y
+C Z
+A Z
+B X
+C Z
+A Y
+A Y
+A Z
+A Y
+A Z
+A X
+C Z
+B X
+B Z
+C Z
+A Z
+C X
+A Z
+A Z
+A Z
+C Z
+A Z
+C Z
\ No newline at end of file
diff --git a/src/2022/day02/python/main.py b/src/2022/day02/python/main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2022/day02/python/test.txt b/src/2022/day02/python/test.txt
new file mode 100644
index 0000000..25097e8
--- /dev/null
+++ b/src/2022/day02/python/test.txt
@@ -0,0 +1,3 @@
+A Y
+B X
+C Z
\ No newline at end of file
diff --git a/src/2022/day02/python/test_main.py b/src/2022/day02/python/test_main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2022/day03/input.txt b/src/2022/day03/go/input.txt
similarity index 100%
rename from src/2022/day03/input.txt
rename to src/2022/day03/go/input.txt
diff --git a/src/2022/day03/main.go b/src/2022/day03/go/main.go
similarity index 100%
rename from src/2022/day03/main.go
rename to src/2022/day03/go/main.go
diff --git a/src/2022/day03/main_test.go b/src/2022/day03/go/main_test.go
similarity index 100%
rename from src/2022/day03/main_test.go
rename to src/2022/day03/go/main_test.go
diff --git a/src/2022/day03/test.txt b/src/2022/day03/go/test.txt
similarity index 100%
rename from src/2022/day03/test.txt
rename to src/2022/day03/go/test.txt
diff --git a/src/2022/day03/python/input.txt b/src/2022/day03/python/input.txt
new file mode 100644
index 0000000..2d758fe
--- /dev/null
+++ b/src/2022/day03/python/input.txt
@@ -0,0 +1,300 @@
+CjhshBJCSrTTsLwqwqwb
+GtmnFHlDfcpHbLZjtTTRLWwb
+fDfNHHjVFNvvrvVBJJdS
+PPWvWQjPhrPQwlMWJJdMDGbJTdCJ
+rsqsStgNNggBNBZHSrJGdJdCFRRZCFbGbTdJ
+qgBqqHzzggBpzSnBNqNSSSgcfhrVlVmwPljQVLVwVvQmmzVl
+bBBGBfmGvBTnGtGJBtGpcJbZrrddjqrZhDldwdcqrjrjDr
+HWPSQMsPHFsMWPVVMVSHCwDCDwwZZvwjwQZZwjdd
+vVHPgHHFRLfpfJTLLtJL
+LWLZhDBHhWWHjBwHwBjCTrBnnrQTQCJTJpTQBQ
+vvdcqbRmvwSFmRqPFSqwdvtQnrpCQJpNNVnrptVCtCCP
+wRSffqlFgvvdgdlzhLWWDzLljZhhGL
+LNbTbPdTNgnShgSjmHcqtQGCtrctCPcQqc
+vzWZDZZBlDwlzvDRZfFBRzVBtMMGHCcpjrqBGMtQQppqHtCq
+DfRvFZjZRsRjlVWsjFlWVWvdSdbhsSmnSngTdTSTsJdSLm
+nnZRbfZRTZfRsbZTFPRfpbRJdqqQNPwNqvvwvvvSwdQqdS
+WjDzjMWMHpQwcSQWcJSS
+hrHhHDgpphmjtMrGLDmGgmnbsflbfZCsnsClltsVsfRR
+QFngsFnGdLGFGVRgLLqWPQPWvBrMDppCPrDB
+NfcHZZzbHthSZtNtNfhHWhClDvCqlrqBvrCpWMWB
+fSMSHjbTMVgVVngVgT
+llnMffwbvCnffHvJJPJpPBNVVZDJDmmS
+QssGGHhRgcqjRRTWGWRGDZcVFZBpNBmPFBDSmZNP
+hzsRHWQshzgRjjsgQRTsbwzCtnrrlnrwzMCtvMff
+HdddHHmtDMDTqHHSftmqdmfdssGzrsjVGtrllWlGZGsnlnnp
+BQNPNPgPhBBhCJQhbCgCnrrnbZnlWznzpGssllVW
+LFNZRvCPCFZmHmTLcwdwcq
+zQRDChCnVhqRllpzQlzqCVVzPvNHTTFFHlNPsPNvTBPBHBFT
+wcfdfDmfPHjdsHPs
+cwGMwMMbwbmwJZfDSMmfwcpRVWzQqnnnzGVVnhqRVCph
+CScCSPcPszFJWSMjGZHMpGMjvG
+TTQfQvBTVBfrDVRDVqGMmjZqnpnGmMpnnpZZ
+NDdbrQdVQDNNfvTVNdBfrDBJFcsLWcCJzWFCcFLbFcFJsc
+WWdzhpHcHHrtzGBJMwmjJGmBtP
+CqsgqNrVnlCBCvPjCBmPJm
+LDDDLnVsqsgTQsgFcQzbQdprbWHzdb
+nFpNPGLGrntlrFLpflfBTcJwSgwQvGwbgSvbvJvT
+DHZWmMDZZDHPMHsDJQbbgSJcvbQgjwJM
+CRdzzdDDVRHWWNlPfPzllnFLlL
+ZJVqGSVCJCSgdSvtjtvcjcjbNl
+pmDWFnDFMnDdFLDHffjcbjjtBNctBjBMbMcl
+dLnfmdLLmrWsgZqCThgssgsq
+CLsvLLQvrlrrpLpw
+tmTHnNtgmzgWmpjlpjnwrrlRjw
+WHgTdmNJmJTDDrtFWsVGQqBQqcCCbhdvCB
+jwCHwmWRTWRWJwfcgVgflvPqPBPH
+MpphdbZZpZMNZpsdpZLMgjBlBqDvLPjfLVPBgPfv
+ZdrZsjQbnMCGwrRwzmTr
+CMDsWppsfhjNNzzzcBrbPgnrrnVBQHBNrV
+ZmGdTdvtStFDtTvtBHgPHnPHgnrnHVmH
+ZtLZdwdGqtZqLTLtwvfjDWcRscqMCDsCfWjf
+QQPPfPjLNLfSShfNRSRrrGHzvHrvlvnHRDJJ
+WCMJJVBwbGCbnbCl
+gBJmTBBMchsSjgfS
+NvCQGNRQQrWRpWhhvQrNLgrJqTVzzLFZsJqJZFcJTqFMJJ
+ttdBllbCSdcsJVVVzVMb
+CnwfwwdlnPGQgpnPvv
+WQmnmBBmWRCgDpndbD
+SvjsqGGqTSTdbggS
+lZbFJqLjvHZrcZNHcc
+gcgQhclQlntnnvBMZlwffTBLwv
+JqzNpqbmpJCbbzCfNFFqfWpZvDVTqBMTrTLvrTMTrvrZTT
+NbJWCpRWSFWNWJCzmRNRdchcdHcchnfncnhntcdjng
+JvDwhPWPzvzPDggWlvCQgPtHgtGnHtNqLqTnHTHHnnVg
+jBsfcbpdQsRcsSpRcjZjHNGtnnVncVtqTVVNVNNT
+prBbsjQdSbZdSFwMzrhPMWwzwlvC
+SStQfWQmJQjjhphQ
+sMVTwvLTswLwwqMPnnhglbHgglPh
+RDrRVrVCsrssBFWffFCZthfNFN
+ZnpgzcqgmhHtfwSDwplwVV
+QCrBNLdLrrnSVSrl
+LQQLLLjTBjGWnNBBGLFZbGgMcsMsZzbgbZZgsZ
+ZnbzbhqPbMrnDGjtQGSRVVMGpf
+gFdTlNJFGVGChJCt
+HgswWLNdhwTTwWsNNvzPmbvbcZbrsbrmzP
+SHpDqcJvBmJgJJHgDphHmvhTddWlLsZTTdFWMMsWtthZ
+GPrRCPfRfjjwffjrrnPVPsTLZFwLWMzLdTsTFzzFWT
+QPfZVNfbfQnRVjCRrPJBvSJgpDSDBHNgBJpB
+mjpcZcHcrqjrNmNpNmptHNHWwvCwgwCgMmQgRQsRMgwMvnCg
+DfSfFSVtDSTJVfdGJMwPnMRwnRCPQgMR
+DDfzDVdbTbzVDDtrtqlHptqbjbql
+lsBgqLqhqqgBBvGLBwQJJHRpJCJDHMwhwz
+NCVfntPnVnfrZtfdbTntnnWDDMDwwRRJmJDWRWJmHRzpJD
+ZrZbtbSZfdNVfbtCrbPTndsFvFLFSqcGLBFgvgjsgcqj
+gwRCCDmlZtPDdtBBPM
+VLrjccJVcJTfTtLjscVBHjHPjPQQSPpBHMjBhP
+rfcJrzvvctrscvzRqGRCZvmqbmwqZw
+nffqBWfRfRnpBfznpWTpTlWNNbcrDcbGbPhrGVwGlllPGN
+MsJQsmQLjMMFsmjbPZNcNbrbmGVhZZ
+LCJsFSsJFMFpfrTBWSvqpB
+vSspfvprpTNTZNTj
+LlFQCtnwMqqSmCMPmMSwClCJhBDJZZJZZjBTjQNjJbdjTT
+PHtwMLPqCHsfVRGvSR
+HjLDQMjtRvTmfTfmtf
+BddChcvvhwhqgmqTfnSmdg
+NBVVZJhZVhZsJJzhJZNHrRMPbQvHrjPvPDRvRN
+GgwtwntLQmNjvRGJGv
+wwzWzrzrqWjRlhJrNlrj
+wBWSCMPMcdnHsTHPsn
+MggMDDJzdbvsjCJvWJnJ
+THBGGScfHwHqHGTGTBqfSWCsnWBCbvsbshjRnZWZCn
+HwltftNGtmHHGqNlGmfPrVDDgzpVplpzDpVPbP
+shMdsCMpQMCZMQsZQVDJnvvPpPLSvLSLLV
+RmgzGTGRmClLNCvzVn
+rCrRftmftWjbTttjcdFZBcjdsFqZQFjZ
+qLwvNLtLvPGqSltLLqvNSpflMfQfMpMnBBggslMpfB
+VDcVzzDRRVTDgMPBBgdfQD
+VVWrcHbVzrzVjHPNqSmtqJJwjLGN
+nBswlBBhntTttbFVnt
+JNjTHZvLHDLVVLtCCFFPLz
+THvNddgZWQNDNZgjZSfGwfsBrhmfGBhcWs
+cCSbPmJqwqJjgJtTzJZT
+BpBTFFTQZzQgNgZv
+sFRVpsfrfrLfslwTcTccwcnCcTRC
+DLjLwDPjVPnWWvVWVjcqzSCJTzSzMTtSrqRqJn
+bdNGgmbGHdZdHbSRqrTJzrMtTR
+dhGmFffGQsWjshcVpt
+TrGzZpzWhCHcPPpF
+sqsJqtlqDVDJVJttgNSbsQPfcjQcBQjhFFRSPQHFRc
+VgqbtllbdvNtDdLZrHWGmwdrLM
+DNrqBvvZZNDDHBFJmMNbLMRctztznRsbds
+hlSlPPWfQCChPtWWfjTwLzbdRcbMsbMjnRLsgzsz
+PCfWwlQpTTVmmtqmVGrvmt
+lLrlLRbgrjRbRjFlRrnRRdgPdWdCwdWqmWPwqScdPc
+tDZLNGHsNQZDNBGHTCVSddVCPwVqVtcdWV
+BhGLBNvhHDTZDjfRvbfjljbbJf
+McRctHfDctZGlZZWgpcW
+TTQLQqLSLqTqhdLqPzLqLwrpsGpWVGFZGrlgWZGhFllV
+QNdzbQgzSvqPzqNqvnnbtfbRfDntCfMRjn
+bHQvFvffjpVvPSTvVm
+RDLRRDLBnVbsDsqDSb
+MtGGtJJnwnLltblMFCHfQcthjNfjHCQN
+FQfFldFCSRRFQSQmLVfRGwGDDGZDhDGwmmhZtthZ
+cTpscpCcNzNNvCBgbPPwvZGZggbghb
+TNzznnccTjTspHWNzCTpNlRRQnlfdVFVfLLJFrFJQQ
+LsMMLCQQQMTJnJMnsJlGlZJNvbNVGNNSDJ
+fhcBqmfvmtRftcmfVVNNVbZSSDVGZmgG
+BztFRjFjBchWzhvWTHWTMCdwTdTQnH
+cpddMRdHTSNRtRztbG
+mWvrQnQFhFNtsSNV
+vrBnlLvWvlPCCnrrmBrnQQLmTMHwHHccMgggTNjdcDwjNgCw
+hlRhqRnQQHcbBHGVVgRLVmrRgrLR
+sCFMTMwtzFMzTwCsswWjCsdQJmJLGfrrgLfgPmPVVVmtLP
+TMDjCFMTHShBQSDB
+fcpssfGWpRDnvDRWvD
+LMvQlPLtLQZbQjBqZBFnCRFZRFzR
+jlQrvjlbjbLffpdpdrmGwr
+hbRTjRRZthvSDvDn
+LGrwPfrGfLjqvBsHzBrvstBv
+mpCLCqqqLcwcwCLmLmwwdWgWgVVMTbbWbRdQVNjC
+QLCqzhzQDqhHsCJjTcVdScccSVgs
+NMPBBfwbmwmmGnfpTJJJcTrRjRJJddpr
+mflmdfBBlnPBvBNGnwlGzhDqzHZzZtCLZqqltHtL
+GGsFmSmFHHGZsqhSTQjlNQNzpptD
+JfVJvvJfWMPPnVVJvhlNlltDldzpjpTzQn
+LgLcwJffMMLcwPVvPMvsmRqTmbGGssgGssRRqG
+ScnbPhwPHPTbwCGJBDtNZZPZDsttNB
+FjfQlVVWrQgfQrrWfddnWfQlqJqJMNJBZJqsZtsJjJsvDjJq
+lrVngVQpmmmrlnLGLLmTzchcwhHh
+QZtDJqWZtWGmhJJjvVBP
+crNMSpcdNNFcrdzlrsVGVnvhmnvHbjVjjrhV
+NTszNMSpwTNFzcsTlsLRQLtWwZDDfQgZhggQ
+mfmdLLLqsvZzjfPgPT
+hppLhBNpHGrhHnQQhGMDhPbPbWzvZzbMzZFPbvbvgz
+BNGGNLGcQpCcSstSRmct
+mnjsJBjBRsmFsSRqqrGfrqqtrfrN
+LZDHZZzdcdQzLbcgLwGtNVrlGrMVNfrllHrH
+DPcZZzdQpZPzQQDpDdcpbcPgmBBBsnWfTBmnJmCsjjsPSTjJ
+jwwHjCPvLVmhmRdJvr
+gTBnbFGTTQMgnTbdbhHhrplhJdlV
+DTScZTgSSnGTBFzjDwtLtDDHqwwL
+RZWhWWRSgBRrdMRdCmtcdtLncHndqF
+bssspTjbVDQGTVGTQsJpbvLtVmFLqqHgnLmCcFnmHC
+DpfQJJQpDsGzzfDNhPBlPlMBNhghPZlW
+VzJrJMBntJpMnBBJMDDGDQLLQwwDpQLGLG
+WSFCWNWWWhQRzvNqLTRD
+CbSlSlWHghChhWlcclgcWdHgfrmbmznnffMZMztrMbrJBBBJ
+gtjBNTvDQNBPlBFlPFZPdP
+mCmpfJCVmMzmfsHpCWdGPWCCWZGtSFtF
+zJnhJnJzbbMMpnspmmfsJpLNgqtrjQvrTbTgLgtqgqLj
+CLJnZZCJLJZJgZZZJMLSTgnRdFWpFdfFWBffpqDBfjFWQdRD
+slNzNzzwwPQrfWmDmqBFWlDm
+zwHhsVHwQcHJCgnngMZn
+wLRLLddJLdZZZjHdRwgJsjqDVsDVSVGSscsVVmDq
+tvMWfnhMvnvztzzVSVqqmcSSVsDGmW
+TmhhpnnFlfMzMMRZRPTJRHwdPJZB
+sLsQSLvcSrbQbFGlWlCD
+BhgPBqBhPwmmpPlGhZMVCFFlbZGF
+nCBBTPBHdHwmfCvTLStLJSctrJtt
+vwNjwvBSSNndtdBJMJsLvZsJhZpPLM
+TmCQDHGTVTLhPQhpZprq
+CbCmmTzfVGfFGGCNbctwNPtcSnbjww
+NWQQdHdTddhGrnJjqCRggvRmhzmm
+wLLVHcFFFfwtFfJzqRvmRqzRVgVz
+MlwFfflbLFfbwctDplwcwFMMNNWdWNTNSWDQQnsQNWWHsrQH
+QlfbQrBjBQvfDBjhlpwpqbMzwWppGWqGwG
+VJNcVCJgcntgRcsZWpPDPDqzPTqqnTpL
+ZCRNRNmcJZCcNNVRmVdmHfjdrlfhSrvBDSfH
+MzzPjGpjpGPPjdtHBfBNBQBrbtlclV
+FqCnZcgcnFsWqmVHVHlgfBrbQVVb
+STmCLFZWnTsWvdvSSdvPpGcP
+lNjczlDNCSRMSmlR
+VbhwhgwGQgwpvQpVDpSCbmfnCPfnMnmPmmBn
+VhvGTdhwQwVVVsQQshjcDZdHdqzcDdJrjjzH
+DhPffCSLCPCwfPPqqwqVjHFjzljppl
+TBWBRWTMRBTTBTBdbQqztzQtWqzQFqbV
+sgGTBGTGmNvrGfrz
+hJgqGzqQmGQMQzgGmJGhJQSvZPfppjjPnZNTTTTpjWJvWp
+lbwbRsRdbdmLdrllbbDcrHwwnjvjNfPWWZwWPjPjjZnTZZpf
+dDDrdlDBHbDtVFSqmBShMMVF
+ddvtMZJdJTtDvgtfZJfvtWZlHpGljLRcBcjplLwGRnnLGlGc
+SNbFbrCNhQbrVQCQSCVzbLjBGRGRGwTBVwpnRGcHcw
+bbhrTzrbrPrSQFrTTCmFQPCJmJqvJfZZWftZmZJqDvgfJv
+vWLsTNNscttvNTLTLHRgcdqBnVSZVZVWVZqdSdJwwd
+jDrFMhGPbGGFFPChDGpGBdngZMzVSSwZgJSqgMSV
+bjjPQjphCPprhFrCCjFPDCTmcLgLtsTlmsNsQTtscQHt
+PdhqLdNccGsrNLpScBnDznjnBnzppQwpHz
+ftFtMbtfRMMWTvfRgRWbWMTjjzngzCzjzmDPjjwQDCDQmm
+MRWVVfWfbFWWTbFWlvvRWPJGSLSLNJcPVsqJPcLSGr
+fdRbPbHmnqvrvHDz
+psTdcMgjjNpllVVgjJslMdpMhrttthznDttBWttBvWcnzBvh
+gJjgVNFppjgCCVNsTTCsZbFwmmmmQGZSZLfwSZZd
+csDFpcpJFbccqpFqpfggJJsljhvlTvQQtjwPTmjPPjRTtNvh
+ZBGLddVCSVwNThhCQjPj
+ZHLLLrSHGSBzWWzHWpgwcFbJsfcgJbsrgg
+QJljRQLGJSNjMjQBLLJllFznzVCFpBnnzgwngpDCnD
+mHWrTmWrdZHWvdrdWrdZttsFspFVcpzcwcggzpwzwVwDVp
+vfzWvqTWWtPffWHqrWTZvTNSjRjQGGPPRbJbllQbMlJS
+DFnFprBLpHcSlJHRBl
+dbdMMCdsVWmMPlHSSVPVJfcf
+sllvhgsdLThDnhQF
+BSFTWCJWFJmBJdbcgDHgfDzHbncC
+MjMPNjhlslPPLjPqPqVcDttzLBHcgDggDggDbB
+MZhjMsBNNMhPrNjBrMhMPZWRmFmQFRRFFFQmWFQGFQ
+NFgqSSrtlNbNffffffmFFZCf
+WPvTBPPnBWmdJjCsPmVd
+zBwhwwTRWwhvvzTvnhCTnCnSbbqlNStNbLltDRDHRHqtDR
+NgggqJTHTJscdjggNVDVRcNHGLQWqpffZQGQGqpQWpWwQZfW
+vvBPBhBFrzvnzSSrrSzPMtWZZcWGwmLnWQWpQlwGwpnl
+rzbSCtrSttMctvvFMvrvPvgNJDRNHDsHNJsjTjsJJsVb
+HbGVfpJbmbpHLBfHbdChRDDwDRhFlMlFVDFr
+QzNQqcNgtqcNMjgqtntsgswRDDRQlFDSFQPDFRDwhCFR
+ngscZtsqsznnnszqTnnqHfLWLWLWZmJpWMJGLBZb
+cTNmqSbTBFhBQZjq
+vswHWHWzHMMttvGGwgppttRfZFZjfBnQnfQZBhwQfhRB
+lglsvMHHWHsWjHMtsvHvjWvTmJbCmcCcbCTcJlTmSmPSPT
+JjSBbBLppbrvZGhhhvGwZNRtNMPCqCPqRgCFRNMgjP
+lWlmDsdDnszRRwdCcNcdwd
+TsDwwVTWsHTmTWVzQflQJbSGhZrZZQBhvBSrJZSr
+JcrncrnrcZcGtJzfrrrzqbTWTlvW
+SCRSDRPSLgRDCHdjjgmdDSHqQTzlmTNNVWbqfbvQzQlbfb
+gpvpHHPPLdLRCSgjpLPtpZZMtnBMZJZBZBtMZs
+lQSvJllvHBPPHPHWSPQQJtDtnhbwDDwwtwfhrrVw
+MgLLdsMsgpRpTLLMgFrbFnfhNbbrhtwDwDDr
+MqpTpqGRLpMgBzGPSvlhSBhW
+NqpNNNPzhwzzshPwRPHWRmRFQWHDQPHD
+VcbcnbjbbrrbbcnbZQDHmlRSVlvZWRFm
+MttmjTtMrhqwhLhtdN
+dMggwDwvMdqgqqtqwHnzVnmGmGtGRrFmsJrN
+SlBClclffBPfZlssrGnJnZZzzznF
+ljfTPplCpLcpBBPfTBfcCTbvbDMMFhqdvqWpMWHMDMpd
+llTNZlhSvqMGlZMGhGgGlttrbVVwNjDbNFJbtjjDtN
+fQWCBWQBBpBCsmzPmnmddQccwJtjdVbJDtDcrrjwjbFr
+QzpQCRspPPPmzfppmmBBWLhgTZZTMRwSTgLlqvMqGG
+HSfnNllsHThcchcJBjJhRL
+FQQdzFCrFMbdFbrJBcqprcBrcBDqcB
+mtmMFJJmnTfnsHvm
+nddbfrBHdvbdBBhhhnWmtLsBGQCCtpmmMGPMQP
+cwVVqVNggDgjZDFspptttQrsPgpttp
+wDjczVZqSFDZVlSvrfhHlJHThh
+CttLqSPLqLHhhCdGGTgdlZfclNlsfglbTg
+nzFJpQJWVQjFmnmpjFWzVvBbMBTBNNTfTgZlTgFMNNZb
+njDDWpVWQjQnzZzjJjnRRwCqPtLLrSqhSwCPCHqG
+BFmNvfFNJRrdpMLLLVldWm
+jPjGGwqsndHZqJqM
+GtTSbjbtJjGQsQSSbPSGbzNgCRcCTCFhvfFgFFTBhfRc
+rwBvGlDrBMSzMvGVSBwMSZgnJmmJqmcTTTmVCFJRcTgF
+bbjpzLhHnFTLngLJ
+zdHQdQQftWfNfNtsSvrsGBPGlswrlvDw
+hdnMhghHZzFnZhDCCVTTTbtVmHmWbT
+PQscSNcllJwzwbGmTmWVGm
+sjprJpJjJNPpJBlpdFdgMzDDDhhvhd
+SMwBWSBMPSfzqzPf
+gJDlrFFQlgbFgvjDjTgrQQTGlhNNLdlqLGhNPqwPNPNfGf
+jvwHQQjrjrJrppjvJpDFgDgHcsZZnnsVHsmMWCnsBsVVWZ
+cblRJczlcBtBRCqNfGgHfpHCVHGp
+WZWsLWmSPjMdWFGHTVNgLfvHqGDT
+ZdmsFmZPmnZMsWWNsNjdmmmcQlrBQnBtQJtclBrtJwBzJz
+wtMNCNwNqwtMMRnVcTlFtlcnFlsl
+vrvrjzjZDDDwmwwVFT
+jzrHjrrHjjLBPfQPjZBZzvpSMwCNRpRwSdRCNLqSShSR
+BDgnhMDCDDpjDhBDJDfMSsLSZzCFTTLzTFLzTFZS
+lrqrlmqbvtvWwVRtwlmrrqNvZlZSsLTTFTFZSPzZFzzTBFzz
+HRRRbVmmwqhHHHhGJBcD
+MvnmMvNjvvvmNnRcvzHgzMGtzhffHwHtwt
+ZBBsFPPrTgCpSSBwHrLtwbHbLLtzLf
+ZBZZssBdWRJgmgJdNn
+TTLChzhDnjQLTDhTQJrzSbbJHsGrGrGFGb
+BfvvpflfWVlVsFFvJHcFJFrJrt
+ZwMBwwZPWMMpffflqlZMRnRNQLCNhPhDDNssnRQD
\ No newline at end of file
diff --git a/src/2022/day03/python/main.py b/src/2022/day03/python/main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2022/day03/python/test.txt b/src/2022/day03/python/test.txt
new file mode 100644
index 0000000..9919ffa
--- /dev/null
+++ b/src/2022/day03/python/test.txt
@@ -0,0 +1,6 @@
+vJrwpWtwJgWrhcsFMMfFFhFp
+jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
+PmmdzqPrVvPwwTWBwg
+wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
+ttgJtRGJQctTZtZT
+CrZsJsPPZsGzwwsLwLmpwMDw
\ No newline at end of file
diff --git a/src/2022/day03/python/test_main.py b/src/2022/day03/python/test_main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2022/day04/input.txt b/src/2022/day04/go/input.txt
similarity index 100%
rename from src/2022/day04/input.txt
rename to src/2022/day04/go/input.txt
diff --git a/src/2022/day04/main.go b/src/2022/day04/go/main.go
similarity index 90%
rename from src/2022/day04/main.go
rename to src/2022/day04/go/main.go
index 62163a4..cd96021 100644
--- a/src/2022/day04/main.go
+++ b/src/2022/day04/go/main.go
@@ -5,10 +5,18 @@ import (
 	"fmt"
 	"log"
 	"os"
+	"path/filepath"
+	"runtime"
 	"strconv"
 	"strings"
 )
 
+func getCurrentDir() string {
+	_, filename, _, _ := runtime.Caller(0)
+	dir := filepath.Dir(filename)
+	return dir
+}
+
 func parseInput(input *os.File) ([]string, error) {
 	scanner := bufio.NewScanner(input)
 	masterPairs := make([]string, 0)
@@ -56,7 +64,7 @@ func Day04Of2022PartB(pairs []string) (int, error) {
 }
 
 func main() {
-	input, err := os.Open("input.txt")
+	input, err := os.Open(filepath.Join(getCurrentDir(), "input.txt"))
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/src/2022/day04/main_test.go b/src/2022/day04/go/main_test.go
similarity index 100%
rename from src/2022/day04/main_test.go
rename to src/2022/day04/go/main_test.go
diff --git a/src/2022/day04/test.txt b/src/2022/day04/go/test.txt
similarity index 100%
rename from src/2022/day04/test.txt
rename to src/2022/day04/go/test.txt
diff --git a/src/2022/day04/python/input.txt b/src/2022/day04/python/input.txt
new file mode 100644
index 0000000..19033d2
--- /dev/null
+++ b/src/2022/day04/python/input.txt
@@ -0,0 +1,1000 @@
+8-18,10-19
+12-69,8-15
+62-77,36-50
+26-27,26-91
+16-23,24-63
+17-43,18-44
+29-68,29-70
+15-90,28-91
+8-39,10-40
+47-64,27-63
+8-77,78-95
+3-65,66-71
+20-22,21-98
+52-53,53-98
+29-30,29-44
+86-90,38-87
+33-99,31-31
+62-80,82-90
+45-55,33-54
+57-62,58-63
+8-59,8-98
+7-23,1-22
+12-36,22-37
+1-31,32-80
+94-96,46-95
+5-90,4-40
+5-5,6-52
+74-86,7-87
+1-4,6-38
+49-65,49-64
+21-21,22-99
+48-61,11-88
+46-51,46-50
+13-87,88-88
+5-6,6-99
+9-40,52-96
+4-93,5-92
+78-88,77-86
+39-72,71-73
+31-90,19-91
+52-53,53-94
+2-4,3-62
+92-95,46-91
+41-42,41-94
+96-98,8-97
+9-75,9-74
+75-85,67-76
+27-32,29-32
+69-93,70-94
+17-80,18-80
+68-68,12-69
+36-80,35-60
+41-86,41-42
+18-82,83-83
+48-97,90-92
+1-57,16-58
+39-89,39-88
+17-17,16-53
+98-99,8-97
+24-71,9-48
+37-38,37-52
+9-80,10-80
+1-18,19-57
+55-67,58-73
+82-84,85-85
+23-92,22-87
+9-97,92-96
+11-93,94-98
+16-93,17-17
+81-97,63-80
+67-92,67-92
+63-67,62-64
+15-66,67-81
+13-20,13-13
+83-83,4-82
+10-54,6-6
+13-69,8-11
+18-19,18-94
+9-46,8-19
+31-97,62-96
+35-94,95-95
+21-56,57-57
+3-44,3-39
+24-95,79-89
+33-59,34-34
+23-25,21-26
+71-97,38-98
+37-76,38-77
+77-86,64-87
+2-12,1-70
+34-96,15-97
+16-75,74-76
+4-99,4-99
+12-89,11-12
+6-24,5-7
+10-43,11-88
+11-44,45-83
+24-95,2-96
+10-73,2-11
+3-82,16-31
+20-21,20-30
+22-87,86-89
+44-44,43-47
+56-84,56-57
+8-80,9-86
+1-50,5-51
+9-30,8-9
+50-87,27-70
+37-96,96-96
+9-79,46-81
+3-98,3-97
+65-83,27-38
+51-56,1-56
+7-97,8-97
+33-91,32-90
+38-86,87-87
+8-91,4-92
+8-89,25-88
+88-99,48-98
+70-80,24-69
+28-55,43-50
+46-70,7-47
+66-94,67-93
+18-43,93-99
+29-61,29-49
+19-71,18-71
+21-36,21-36
+61-63,62-81
+4-5,5-95
+90-93,63-89
+1-23,4-22
+66-83,50-82
+63-92,81-98
+29-99,29-99
+4-8,8-99
+30-47,31-36
+3-94,93-99
+52-52,51-87
+76-76,77-80
+2-95,6-96
+8-97,9-48
+12-79,11-78
+25-95,14-94
+76-96,3-33
+1-96,76-99
+3-3,2-90
+76-91,75-76
+12-83,11-11
+3-33,19-48
+12-98,12-13
+15-94,16-98
+1-2,4-90
+25-59,26-50
+27-85,84-85
+22-75,22-22
+30-39,30-38
+4-95,4-95
+24-49,10-48
+33-34,34-79
+3-62,33-61
+4-17,3-5
+27-58,59-59
+72-98,73-98
+28-86,87-95
+27-57,28-56
+49-98,40-92
+30-85,84-92
+76-78,75-75
+33-84,83-83
+56-64,42-63
+69-90,27-90
+67-70,66-67
+52-66,56-79
+3-81,2-82
+9-92,93-96
+42-93,94-94
+20-32,33-96
+41-42,42-94
+7-37,6-17
+17-44,18-28
+79-83,66-78
+2-29,1-86
+25-29,20-29
+38-77,38-38
+59-59,59-99
+71-96,11-96
+48-96,17-85
+71-75,67-75
+75-82,76-81
+8-58,8-58
+45-91,35-46
+10-14,15-80
+87-88,3-99
+1-3,7-57
+24-37,24-38
+10-74,75-81
+5-92,5-5
+73-96,96-97
+22-84,84-85
+91-91,3-90
+18-20,19-20
+4-4,3-91
+29-30,30-65
+57-64,22-50
+25-88,24-68
+30-94,94-96
+15-42,16-90
+17-96,71-87
+36-89,35-37
+18-71,70-70
+13-36,12-94
+47-96,46-48
+2-94,55-95
+82-82,3-82
+3-84,1-48
+34-85,34-85
+9-95,8-95
+1-28,1-29
+98-98,52-85
+55-56,30-55
+20-59,19-89
+55-56,50-57
+96-96,20-95
+44-50,15-67
+73-74,56-75
+54-98,38-55
+54-93,54-86
+6-94,7-95
+23-24,23-34
+52-83,9-80
+2-95,1-13
+52-90,29-91
+66-89,66-66
+10-10,11-94
+65-73,64-97
+8-93,62-92
+71-72,72-85
+2-58,59-59
+46-46,47-61
+8-8,8-84
+6-75,76-76
+47-97,24-48
+19-19,20-71
+13-94,4-87
+47-78,48-78
+20-74,21-35
+11-46,11-46
+11-78,77-79
+13-74,14-73
+2-98,1-97
+30-30,31-35
+1-14,2-99
+11-93,10-11
+3-77,7-78
+41-56,40-55
+26-92,97-97
+96-98,17-83
+95-99,8-94
+62-92,47-61
+4-93,3-61
+3-86,2-16
+80-99,21-96
+6-90,47-91
+6-6,7-91
+13-91,13-13
+53-91,52-94
+1-86,4-86
+53-90,54-90
+7-62,7-62
+11-89,11-90
+17-18,18-92
+14-35,11-34
+6-99,19-98
+35-59,34-59
+65-82,68-83
+2-95,3-38
+2-92,3-92
+51-52,43-52
+9-41,9-49
+8-97,8-31
+20-67,66-97
+4-87,37-86
+20-21,20-89
+16-87,15-88
+59-68,60-68
+46-83,86-90
+15-55,9-16
+3-8,7-79
+96-98,41-92
+16-75,62-82
+79-99,62-78
+1-96,97-97
+46-60,45-45
+68-68,41-67
+22-87,21-86
+80-81,80-84
+1-30,31-50
+49-91,49-90
+8-74,73-78
+32-32,31-40
+3-89,4-89
+50-61,51-61
+36-81,35-37
+4-97,4-98
+39-87,38-87
+8-98,98-99
+4-96,95-97
+1-53,3-87
+19-20,19-90
+13-78,12-79
+1-2,2-75
+2-42,2-90
+3-16,3-23
+32-72,87-98
+57-88,60-88
+15-28,29-29
+3-4,4-99
+48-48,46-50
+91-94,87-95
+16-97,98-99
+38-38,48-94
+30-63,7-62
+7-98,8-8
+4-50,49-50
+17-49,18-18
+7-75,6-6
+70-88,73-87
+3-45,3-44
+87-94,36-48
+66-73,13-65
+34-75,8-73
+2-53,2-82
+1-85,71-86
+2-7,6-88
+2-4,4-93
+20-20,13-19
+38-71,26-71
+14-88,20-88
+57-81,56-82
+13-85,6-56
+34-74,34-34
+64-64,25-63
+34-35,34-35
+18-29,13-29
+39-40,15-41
+44-71,43-70
+39-75,37-37
+18-78,18-90
+49-50,49-94
+17-96,1-16
+45-56,48-55
+48-79,48-80
+6-93,5-93
+12-34,11-99
+19-22,18-19
+3-76,2-65
+8-99,94-97
+37-42,37-42
+20-88,17-92
+15-49,15-45
+11-35,11-34
+7-98,3-8
+61-92,4-58
+6-99,42-95
+5-86,45-87
+67-77,67-77
+80-99,38-98
+58-99,22-89
+26-88,26-88
+29-89,8-28
+47-96,40-96
+57-95,34-83
+9-99,98-99
+19-73,18-73
+5-5,5-82
+46-46,25-45
+17-18,17-50
+56-61,56-62
+1-71,71-71
+25-39,24-25
+9-55,54-54
+6-96,95-95
+22-85,21-80
+6-86,4-6
+15-81,78-81
+4-96,5-95
+56-65,56-56
+43-96,42-43
+18-79,80-95
+54-80,21-79
+32-32,31-92
+75-75,76-95
+30-96,29-69
+55-56,55-97
+14-96,13-95
+25-99,27-99
+40-96,41-96
+20-20,19-71
+10-44,11-44
+53-53,51-58
+9-82,10-10
+48-79,47-79
+28-88,9-60
+94-95,46-95
+66-98,8-97
+34-91,33-91
+36-92,11-88
+20-59,49-86
+3-86,4-76
+25-73,36-72
+19-19,18-93
+7-88,4-5
+77-91,90-90
+45-86,45-45
+8-31,30-40
+35-43,44-61
+44-45,44-74
+40-96,56-59
+56-71,57-80
+42-75,41-77
+18-18,19-22
+25-25,26-26
+19-20,20-68
+72-98,64-73
+24-76,73-77
+39-83,38-39
+87-94,84-88
+3-98,1-2
+43-63,44-62
+52-54,53-57
+16-29,53-76
+4-63,79-86
+30-86,75-96
+42-42,36-41
+6-6,5-67
+3-4,6-80
+20-32,38-74
+28-53,28-29
+24-91,95-99
+78-85,79-79
+30-69,14-69
+15-83,11-84
+2-89,1-3
+93-98,72-80
+3-65,2-65
+26-79,25-78
+57-91,57-58
+19-19,18-19
+18-96,17-19
+41-71,1-72
+13-41,10-21
+18-24,20-24
+83-83,84-95
+57-89,52-94
+1-97,1-97
+28-92,27-27
+6-73,18-71
+5-99,4-23
+39-76,96-99
+29-57,29-58
+85-85,15-86
+90-93,90-96
+41-78,42-78
+23-97,24-96
+27-84,26-84
+4-69,78-84
+59-88,59-89
+8-75,8-90
+56-56,50-56
+32-72,54-71
+64-92,63-89
+40-66,66-66
+4-41,14-40
+98-99,3-99
+2-3,10-65
+65-81,42-64
+15-77,71-75
+33-59,24-32
+50-76,31-49
+31-50,30-51
+36-89,12-88
+38-87,37-88
+64-89,64-88
+13-89,7-13
+44-77,43-78
+67-83,3-53
+7-46,7-8
+1-52,28-53
+7-7,8-75
+54-66,53-53
+73-73,35-74
+80-84,80-82
+1-99,2-99
+22-97,52-96
+75-78,62-87
+45-98,23-82
+61-66,61-69
+6-7,7-99
+69-75,75-76
+1-76,3-77
+2-99,3-11
+77-99,77-83
+5-42,25-76
+60-89,35-88
+7-98,5-97
+77-86,67-85
+85-96,23-47
+16-23,15-20
+26-91,26-90
+12-15,12-29
+45-95,32-48
+38-42,37-42
+6-95,2-7
+3-90,4-90
+78-86,86-86
+7-88,7-79
+2-94,3-94
+34-99,8-97
+2-3,2-53
+33-65,34-34
+9-9,10-10
+27-29,28-65
+8-95,94-96
+44-46,45-74
+17-82,63-82
+17-73,74-74
+2-3,1-3
+24-25,25-72
+95-95,10-95
+13-21,13-18
+96-96,94-97
+64-91,65-92
+11-13,1-12
+19-74,99-99
+97-97,5-96
+49-80,50-80
+20-68,21-87
+14-91,13-13
+8-94,1-5
+64-91,61-63
+1-2,2-89
+39-80,38-73
+31-56,15-75
+90-90,90-97
+11-11,15-43
+28-81,52-81
+29-99,29-99
+31-36,32-92
+1-99,28-99
+6-10,6-21
+64-90,54-89
+88-95,2-93
+87-88,47-88
+92-92,79-91
+11-91,3-96
+18-19,18-65
+12-79,1-78
+39-66,65-65
+53-54,54-62
+23-57,23-78
+16-94,17-93
+17-98,99-99
+32-34,33-96
+68-72,73-73
+1-2,1-95
+8-93,9-92
+56-61,57-61
+3-94,3-94
+2-4,6-74
+2-94,94-94
+5-75,3-5
+88-90,64-92
+70-97,63-97
+5-99,4-99
+91-97,3-96
+5-46,2-2
+2-2,5-91
+23-60,23-60
+9-39,10-39
+9-25,10-54
+4-47,3-47
+43-52,49-69
+27-27,27-27
+6-94,5-94
+8-9,8-68
+53-78,52-53
+16-73,15-73
+65-77,5-76
+60-96,60-92
+49-55,39-56
+33-59,15-60
+6-79,6-94
+3-3,4-99
+17-88,18-59
+98-99,97-97
+5-36,35-97
+97-98,31-35
+23-23,22-76
+8-94,9-93
+38-38,37-86
+1-24,4-47
+7-97,8-98
+22-70,71-71
+2-49,3-3
+70-86,76-98
+91-98,46-97
+37-65,61-69
+39-39,25-38
+1-76,1-2
+71-87,89-98
+46-47,38-42
+12-13,20-95
+4-58,13-59
+48-80,45-99
+91-93,33-90
+6-57,6-6
+16-19,15-18
+70-72,1-73
+3-82,3-83
+76-89,76-89
+57-96,58-95
+35-64,36-65
+2-92,93-93
+95-98,10-83
+3-5,17-63
+37-69,36-63
+5-49,37-49
+75-82,20-74
+2-65,1-3
+4-5,4-31
+72-73,71-74
+4-75,74-95
+30-31,30-99
+36-60,36-59
+4-6,13-95
+8-54,5-6
+57-94,58-97
+5-6,6-99
+88-88,70-87
+16-17,17-56
+3-94,2-94
+24-58,23-25
+22-48,23-91
+18-59,19-92
+9-10,8-88
+33-82,6-66
+42-61,42-85
+2-3,4-58
+13-15,12-20
+31-94,31-31
+63-93,31-93
+4-76,17-76
+45-76,45-60
+13-89,9-88
+75-77,51-76
+26-26,26-92
+1-27,21-69
+4-89,1-94
+32-95,36-94
+38-83,89-89
+15-16,16-80
+73-84,98-98
+28-75,27-28
+25-27,9-26
+16-98,17-99
+10-72,91-92
+40-91,51-92
+29-29,7-30
+30-45,22-46
+13-95,4-4
+43-59,29-59
+12-41,40-55
+4-92,91-98
+25-25,24-35
+8-16,7-13
+9-99,9-98
+28-87,27-28
+14-53,13-54
+67-81,6-42
+29-99,30-95
+5-37,5-6
+95-95,10-94
+12-95,13-96
+16-21,17-17
+17-25,18-48
+81-81,27-80
+78-84,77-91
+24-33,23-32
+1-99,1-98
+16-83,17-83
+85-91,86-86
+59-88,89-99
+40-99,98-98
+42-90,23-42
+20-64,55-65
+9-89,90-90
+99-99,8-97
+92-95,4-88
+32-81,10-82
+4-4,4-63
+1-10,4-93
+58-59,8-59
+51-54,51-69
+10-82,4-9
+82-96,69-76
+63-81,62-82
+72-73,70-74
+69-88,69-88
+31-73,3-98
+39-57,46-54
+29-29,30-57
+94-99,10-95
+4-96,3-4
+11-96,12-96
+59-61,58-58
+58-58,58-68
+2-95,2-38
+9-13,10-31
+7-54,53-91
+16-33,36-75
+53-77,53-76
+33-34,33-90
+6-61,69-94
+5-81,5-82
+2-93,92-93
+1-29,8-97
+5-5,5-89
+42-80,41-80
+2-96,33-99
+17-57,17-56
+11-74,11-75
+39-60,39-40
+33-34,33-56
+36-75,35-37
+68-77,68-77
+22-95,21-96
+61-62,58-61
+33-92,64-98
+5-95,5-96
+10-75,11-40
+5-70,6-70
+10-86,9-10
+5-93,5-6
+70-98,21-95
+76-99,46-75
+20-21,21-54
+24-47,65-98
+32-62,32-44
+46-92,45-73
+52-59,51-57
+2-92,3-3
+46-56,47-57
+90-90,24-89
+23-69,75-89
+6-73,73-77
+16-17,17-80
+89-89,26-88
+36-56,38-83
+55-70,13-54
+14-50,77-89
+22-27,34-81
+69-77,73-76
+4-83,5-5
+13-54,13-55
+61-61,60-98
+98-98,23-97
+21-44,20-44
+62-75,32-71
+51-93,49-80
+53-64,43-65
+52-91,52-67
+5-89,2-88
+4-86,3-98
+32-72,32-64
+52-78,79-86
+28-94,21-50
+43-61,46-59
+75-76,75-83
+12-43,11-12
+72-73,1-58
+8-94,7-8
+5-92,4-93
+54-62,41-62
+43-43,43-75
+34-81,38-82
+9-99,10-98
+15-89,91-91
+12-59,13-60
+21-76,21-76
+25-63,24-62
+17-82,92-95
+22-49,33-49
+8-34,4-9
+21-43,22-40
+4-99,1-3
+7-41,41-68
+3-74,74-75
+6-80,1-5
+35-85,36-70
+7-99,12-17
+8-95,7-94
+12-80,12-80
+3-96,4-97
+22-69,69-70
+24-35,25-51
+22-51,23-51
+36-63,10-37
+1-99,34-98
+23-89,37-88
+73-73,72-76
+35-91,35-36
+6-24,3-12
+6-6,7-91
+28-52,55-77
+51-78,50-77
+2-3,3-96
+30-97,30-98
+32-70,9-70
+95-96,1-94
+20-99,20-21
+68-79,6-68
+17-64,39-51
+21-58,56-57
+14-25,13-14
+16-96,97-99
+98-99,70-97
+1-35,10-66
+12-56,9-13
+47-84,19-63
+73-89,72-90
+52-95,12-95
+3-95,1-3
+78-92,93-93
+99-99,4-97
+46-86,29-45
+79-95,78-96
+87-92,93-95
+22-81,22-80
+32-33,33-71
+53-99,53-83
+21-98,20-97
+93-94,6-93
+78-96,10-77
+1-91,56-69
+60-98,51-60
+20-20,21-32
+95-96,96-96
+4-26,5-27
+85-92,42-84
+86-86,72-85
+20-25,24-30
+11-28,12-70
+23-70,8-8
+7-7,7-74
+48-93,49-92
+4-72,71-72
+15-28,14-32
+25-73,47-74
+67-77,67-68
+10-84,66-84
+7-96,7-96
+2-29,29-38
+52-52,52-97
+72-73,72-95
+20-50,51-51
+1-86,46-87
+13-36,14-20
+60-98,53-98
+6-40,7-41
+62-76,41-75
+8-38,37-51
+14-90,13-91
+1-54,18-53
+19-94,94-96
+77-95,76-85
+3-98,2-3
+24-93,48-92
+10-98,97-99
+1-5,3-4
+15-15,16-86
+26-93,23-79
+8-48,9-9
+38-98,32-55
+30-60,31-48
+15-69,16-70
+9-79,9-10
+53-90,52-72
+9-28,27-97
+3-91,2-3
+10-42,42-50
+2-79,8-79
+4-44,73-94
+4-89,1-88
+51-53,52-92
+22-36,35-81
+72-96,71-96
+69-69,70-89
+20-97,19-20
+33-99,34-34
+31-33,32-94
+7-22,23-80
+2-4,3-41
+73-79,24-80
+95-97,99-99
+6-21,2-7
+3-94,4-95
+7-87,86-86
+9-80,8-80
+4-20,3-7
+54-89,54-88
+22-90,32-90
+91-98,61-91
+18-69,32-52
+7-17,8-66
+35-58,12-57
+4-87,85-86
+2-99,94-99
+33-95,32-33
+42-42,2-41
+28-43,28-29
+23-72,23-71
+6-92,6-91
+32-56,33-97
+83-96,83-86
+32-67,33-33
+26-40,26-39
+11-96,10-11
+7-89,6-90
+12-46,19-47
+39-95,40-99
+89-89,79-88
+19-71,6-18
+47-93,46-94
+39-77,28-32
+7-70,8-69
+72-73,73-94
+51-63,48-61
+7-88,29-87
+67-85,35-86
+1-82,17-83
+68-86,87-87
+42-43,43-44
+46-72,68-73
+35-37,23-78
+1-39,35-40
+12-96,13-33
+21-94,20-93
+36-53,8-99
+35-83,28-36
+99-99,35-89
+16-40,15-25
+28-39,39-40
+56-88,55-75
+5-86,87-94
+67-70,46-69
+25-67,66-68
+73-73,13-72
+30-41,66-81
+32-90,31-91
+9-33,4-7
+25-48,12-59
+21-96,16-22
+5-35,29-41
+50-50,44-76
+19-86,18-87
+9-49,9-47
+7-70,9-95
+23-93,94-97
+24-72,38-71
+7-83,4-8
+72-90,42-73
+7-93,92-92
+91-91,7-92
+72-73,71-72
+4-96,1-1
+7-76,76-90
+29-92,27-30
+1-97,2-99
+29-72,59-73
+6-18,1-4
+74-93,74-74
+12-97,11-66
+23-27,10-25
+64-95,63-64
+34-41,42-47
+24-71,70-72
+23-37,24-38
+22-95,94-99
+40-63,48-64
+35-65,36-66
+14-15,14-41
+1-71,1-47
+5-28,14-29
+92-92,90-91
+34-35,34-42
+58-61,54-60
+60-73,61-94
+11-15,14-49
+3-8,13-98
+3-50,4-49
\ No newline at end of file
diff --git a/src/2022/day04/python/main.py b/src/2022/day04/python/main.py
new file mode 100644
index 0000000..deaedc7
--- /dev/null
+++ b/src/2022/day04/python/main.py
@@ -0,0 +1,40 @@
+import os
+
+def parse_input(input_file):
+    with open(input_file, 'r') as file:
+        return file.read().splitlines()
+
+def day04_of_2022_part_a(pairs):
+    fully_contained = 0
+    for pair in pairs:
+        ranges = pair.split(',')
+        range1 = list(map(int, ranges[0].split('-')))
+        range2 = list(map(int, ranges[1].split('-')))
+        if (range1[0] <= range2[0] and range1[1] >= range2[1]) or (range2[0] <= range1[0] and range2[1] >= range1[1]):
+            fully_contained += 1
+    return fully_contained
+
+def day04_of_2022_part_b(pairs):
+    partially_contained = 0
+    for pair in pairs:
+        ranges = pair.split(',')
+        range1 = list(map(int, ranges[0].split('-')))
+        range2 = list(map(int, ranges[1].split('-')))
+        if (range1[0] <= range2[0] <= range1[1]) or (range2[0] <= range1[0] <= range2[1]):
+            partially_contained += 1
+    return partially_contained
+
+def main():
+    try:
+        dir = os.path.dirname(os.path.abspath(__file__))
+        input_file = os.path.join(dir, "input.txt")
+        pairs = parse_input(input_file)
+        fully_contained = day04_of_2022_part_a(pairs)
+        partially_contained = day04_of_2022_part_b(pairs)
+        print(fully_contained)
+        print(partially_contained)
+    except Exception as e:
+        print(f"An error occurred: {e}")
+
+if __name__ == "__main__":
+    main()
diff --git a/src/2022/day04/python/test.txt b/src/2022/day04/python/test.txt
new file mode 100644
index 0000000..99a66c5
--- /dev/null
+++ b/src/2022/day04/python/test.txt
@@ -0,0 +1,6 @@
+2-4,6-8
+2-3,4-5
+5-7,7-9
+2-8,3-7
+6-6,4-6
+2-6,4-8
\ No newline at end of file
diff --git a/src/2022/day04/python/test_main.py b/src/2022/day04/python/test_main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2023/day01/input.txt b/src/2023/day01/go/input.txt
similarity index 100%
rename from src/2023/day01/input.txt
rename to src/2023/day01/go/input.txt
diff --git a/src/2023/day01/main.go b/src/2023/day01/go/main.go
similarity index 100%
rename from src/2023/day01/main.go
rename to src/2023/day01/go/main.go
diff --git a/src/2023/day01/main_test.go b/src/2023/day01/go/main_test.go
similarity index 100%
rename from src/2023/day01/main_test.go
rename to src/2023/day01/go/main_test.go
diff --git a/src/2023/day01/python/input.txt b/src/2023/day01/python/input.txt
new file mode 100644
index 0000000..857ec0b
--- /dev/null
+++ b/src/2023/day01/python/input.txt
@@ -0,0 +1,1000 @@
+76xkqjzqtwonfour
+sixthree8sixjxjqsjgjgp
+38bgcczgtninefivefive
+sixthree4eight
+nhp3zdc
+279four
+vzxf4tqrljgxmthreejcr
+bbm4twoeight8oneone3one
+nineninesix6nine
+fourseven5seveneightsvtkcjdrfour
+3mkmnpsix5ggfive7
+twotwoqbv5qrpnfl7seven8
+56snzkgsone2cxtpvvh
+threenine3
+9dd3twocnrfljs58
+mqtrqnrgrcxbvpgdsmsqhmxlxx4
+nine9mdxzlrbmrxceight94eight
+jtqsrmmbonentvmnxbdsseven4
+ninefive8fjnjj
+nine53
+33
+ftjhckeightfourvkbd3eight9
+rhpnppsfour7
+95ht1x
+fivezqfcvmgdxb5mfvtnlfkonesix
+ninefgxxltpkszdnb89ninefivebdbdhckhb
+9vtglcdvkgcgrvm4sevenrhppknqfvhldfgqhpgdqfv
+852bfkjmccknlqreight1
+fiveone8threethreezsfpzsrbb9fourfive
+1one58eightseventhreeqfpxcpv3
+11fg1
+tbrcgcqj2three9sixeight1five
+seven2m6
+eightzhqvdrjknb622btfrs41seven
+67nine8
+3one8ncctmbsixeighttwonegb
+7fivefive
+m5sqxstbxp9xx
+1onejjz7gcddeightnkfqgxbbtl1
+3jrjkxvhctzmkmqccrmbrvlcvsjnqjjb
+ndjfls337six2three87
+bconekhvtkblfour2n5dq2
+922twonmxfeight4
+7two59xvmzc2two3czdn
+ninesrdsq99tskfpfpdqqfive6
+tbzgvh4ninesixjzdtxhbpsjlbkr62
+5fourthreebdpnqzbeightjpchone
+8ktdbjtvfvkseven
+3zhjbjqbpff
+6hh7twofourcvmpfjp
+sqfzkmrponechzzzbhz34one
+jkdrxxbrn43qbjllcfbptddb7
+jdjbq1lcsz5
+fivehlpltzfrzfznxrpnfourmhpkjsjzz971
+gjc5qbgrhlj2one9
+tdn1676spccqqjc4eight2
+one2966lfourldlnxmzqdplzptp
+qlkjthree5eightdztseven
+512ninexrqpvktwoner
+lkgqvlgdqbjhkxp58one7six3
+4two1one7zxxtvxtdvpgfrjh56
+4qbbmlpmjx5fiveninepkcnqgqgdjsrzkgxjsxnkqnd2
+1jjfive7xjfmdfvnz2
+fourxbfsdqlmmmnh9
+c5
+z4s8gdmkbkhbhd18
+threevsnkmbrcgdsvdkqeightqstlvvdtlvp4seven
+7eighttwo64nlgxcbthpbgnbf
+1mvbvrx
+drhgqkfrln2
+three1sixthreelvjthreeffptnm1
+qzlqvjz8ninefive
+eight23n1teight2
+31twoqqbmz88
+68fivesixqzfcfsjjzxfiveeight6
+sqpfonezdtpqrfbhzgjmgv7
+4mcmtqnonexkdpnrcfkfxhq5one
+hhrldnffive7six6onefivezllprrncczseven
+5dfxsn7hjgztpeightqnnninekjxlzdv
+vtwobjxdfrkrzeightfxtlkct4
+seven4fiveksnsix7128
+onenfzxhpc7gxthree
+jgtwone321fourkjg3
+dphnmspctdfour3
+four91zmlpbxchmsixpn
+9eighteight8pgvrngxszvnlnzlzmbqgs1
+fgznzclmcrjhtbdjoneone9
+fttdr4five8vmxrlnr
+1nspvnsrdddfhjjdcvltjl
+7fiveone8nshjlrxgkeight
+57eighteightsrgvcnbncv83
+5xnine5blgjqdjmtgx3
+6rjzh487eight9nndgvj7
+2seven2bvqlftkcplffivefour
+x8
+vdbxxb2six4skntkvfcgdfcp2cnvhr9
+7hmqxgvdfgmxhfzfxfour
+eight92jckrxshsrbtwophbfvnb
+sevenxzjc6
+drflhlxphzspnnzdbcfbpcbtddvd8three56
+fournjhqnxrkjpvjssl9
+81333
+five1gmccznfseven8xlzvlrjsbffour1
+6dlbklsddnqhtwotwo2
+m27six
+5mflrcmbbqnztndxtwoonekcsevenone
+m24njqdqxrjmn1cjprdzdcntwoldzsgfkpvxbrnrg
+ngjrvdd3onezcklpsfoureighteightwoxg
+tkrzphtvthreeeightfsxbbdtone762svzt
+khqtnrppp81183one
+onetplmtp2zbrmbnrzt9sixknkrblt
+662
+fivekhclmzchthree3
+5fhgcfzvss
+zhgsq2hfbzjxgxgrxvhdkppbdljk
+zqd9stvrrddk
+7kthreesix7
+46six8eight
+hthpnnghjglhhmg8seventwo86seven
+5ffr8
+fbdxn76twofourlfdxxbgvmd98five
+eight4mjjn4ninelgpc5qnxgneight
+oneszfjdcxzc2five
+4nzjqv3six
+qtnfiveeightkjhhkckrpcdnine9
+6eightggsddqcjhptp9tmhconelg
+eight45eightfour87
+25523
+two54nine2mnxszzxeightqf
+2kbqpv2sgcskg
+4three5njdpbnine
+9rdmninejbbdgtffiveseven6
+tmnoneightdlrtninenines847bhldgkpdm
+nine762gkknhhfvrbmck82
+three9xdbnxvnvqsvjmnzzdfoursmrspxxrdkgsv
+twofour73zjj
+4hvdbthree1four
+1threeoneone
+2576
+ztgbfpsznntnpl3six
+1ctllvsztwo6
+2eightsevenbldhvhctpck69ninefour
+nzdrfive4zsbrshcmqm5fkzzfptxntgzffthzhxbffskz
+1nineqdmlfourlsfn94
+lqvfhgqkbncvzrnptwofourfivefour42jpg
+92dtmcpzskzp1
+2djkdgsrrtcnklpxfmfrbcjmnddqntn5six
+2nzxgtd75one4four2
+hbvjjrfd74five1six56
+zcnxmgvmhfsevenxxzkxnine1fxxpmkthreejfppctls
+2sevenqsrdvchgpfdjfjpld
+6njl7fivemkkxlhkmgm1ndlgjbpjt
+jneightwofivetwo9eightgjtnrneight
+zfvjfive3gfourfiveeight
+five71zgxk8chrfzdzjpxxdkqfour
+zbx78sevennsninethree7
+rrs8one2jtznfcgdsfxcmkznpptlglnmf
+nldfdgpd5seven6tjg4fourddhfg
+65sevennlckct93
+qjhgdqgpcfivevleight63two
+4jqrzmthree
+5llfourfourlvtvtx8vjksjlnrchrkthree
+dcpdbsvsshgklkronefourqnsevenf6eightwohf
+6ctlhskqqch
+threeseven2mpvsdlx
+1hnjrxsrflxjtlzqrzvpjsjjjpz6
+nineninervqqmnsevenjtlkfvzpdztwo8three
+3bmthsgsix23sevenzvkszfpfq
+6sixeightfour1bnhvpsv
+3592nine
+ttz117ninesix
+bgtmckkpq5sevensix
+354nine
+7spsevens2
+512htbtgxkzdvqtqg
+fhkbrst1
+6cr2xsevenchdvgqqht
+cmbcdqkjd1xffkggmthree4chklqone1
+gsevenqnfpjzgbv7
+four2njkqbfszj
+9qblmmzbtwonkzr
+sixsixeightgnflxglkttxk2
+nine3vcfghmgm
+two7lgnmpnz87nqrqgczrt
+klvsx15
+rrkltqfttf8two2rzzgjbrffxvcbseven3
+5sixctgqr31
+qkhjklpztmkffql45seven213
+pjstvthree4lrmrznbvdseven
+sixvnxfltnqv9fpbfbmninesix
+pnvthree4threetfjqnvxbxvxb
+two1nine
+twosix1ninehkqjtkn2
+8pchlzgsixonevrzmqgbf
+fxrccmfourthreesix9nineseven
+seven929two3zgz
+4four386nine
+six8three75onehpgsnpjbczninevvcszkr
+onefive6eight5
+foureightfour34
+six6mndfhgcjzjreight7sjbv4
+9dlmsnlgj2
+seventhreelmkn5sixjllfqfourlpznlhv
+zfgvmzgv95seven
+ppdsbnxxx1four
+vvfnvbkvtzfourfour675nine8
+2fourthree1
+eight4pqdpjdzbmn31
+pksvg9bzzdcgktgstwosevenvnvftzblfive4eight
+seveneightonethree1three
+nine69dkv8oneoneone
+72phzthreexqlhvsqfoursixninefive
+2ninexqpplhqclpl5
+1nineeight
+7nineonefour9two3fournine
+8mkzqpnnlqljrfive
+9nine5foureightthreegdbcrjhnthree5
+sixt69
+rzfg5
+vqdb8bc7mftdt
+ngzlhznbtbone38srxvrfrjxsxkglvrpvqgm
+9xgrjgq7eighthnbmkbdsdnine4qt
+5dfcrkhzbvfourkkkqjfcb77sevensix
+loneightfive8seven3
+7ncqhjdhzqeightnine
+bsngnjfcone8bhd49tzfdb
+deightggcb27four41lfrdbctl
+3sevenoneninentjdsxmsixlpqgb
+threernmpfptnmcmmrmlngppmbtwofour7sevens
+eightjxxlm86
+twoninefmdtnk6rjkpdqzdzfiveninecrlgjrvctgtrrdkfkm
+3threethreeonefive
+three8thq
+bfccdtfmtvhkhp5fourdcgszjgcseven2
+8xcxscl
+sixzvdbpqcheight3twothree5lqtcmjdmpq
+nbspfour32lddhpsz9
+jgleightcdm9twosllxnzqhjq
+2three3sevenfour
+jrnineone8qltfvgskbs2244
+zmbonemblfourkfjmvntjhvkbk69bnsjzdkxc
+vxxlcpslfdzbhm91
+fjxhtfnqfive3zpctnfive
+smxmdtbtfpthree8lkmvlljdcx1six
+5bnine3614
+8cdfktkdd8
+twosix9
+4rxgx895drgvoneqxdvvh
+threedljsix9cv5jlkvsmgzgbhnkmmfdpqxgzx
+twoone7oneqvqoneonefive6
+2tvvmplskcgbxdkzh
+gfvffive9six83mhgxkgdprxtwo
+2threeeightmnmrtzmdtfivesevenrsmkkslsm7
+ztv23316three6seven
+eightcvjqlfbh6fourvpgdpgz
+1fivefive9
+brxmhgnnthreethreeoned2
+dgrcgr5xgpnxjbd6ninejsqmgmrvmqz
+mtl6three
+97bjvklbkpzktckfivenvcmftnnrp4
+7fivejmf
+six54
+jktdhlbjbztpp7gjjc46fmkb
+64xdrnfxgccrxkdpfxpnninelbmldlmllknine13
+9jbpcbsgk
+6hqszplnjk
+sixseven1721two44
+6threenzsjtj5cfqvdpcpfbcnfpnp9
+141moneonepzcvtnjpgnine
+7n
+8cgglsksnz1sixgkhqseven9
+ninescvxnzslj7lldvskqphrqhlsmthreeseven
+8twofive3psmxh
+4xclmfour3
+4sevenxz5onen3sixvgdmbtzk
+3cclhckninejkmddqjkj
+7eighthxsntjskvdonefour9eightfiveseven
+three2six2seveneightqrlcvvczzfcgcm
+plxthreefivethsmpqhzfour5
+6two3sevenrbscccjhxbd
+rdzxlnbxbh7eight67
+65four
+23mdqdh2
+bsrmxvmfoursixgdssplvshdjlnvgf7gt
+823jvfour
+5eighttwosixjmlthreeqgtlzbpfqhc7
+35foursljjvpfour7seven5
+nsfourdtgzffvh763
+9thtmpjtpsfnine
+mkqcz9pmkpgnd
+one6xmpjfkpsdcnfghs5
+jqzgsf834
+twotqpvxjc88659
+4onetxvccvkclcqhl6two
+kbgzsixfive7one1four4
+gbkvfour93fivesixseven66
+97pjzlvmonesix
+fivenjmtgkjfz7nine3threexsntbqxg55
+fivefive5threemfour526
+bdpdqklfgxninegsrsixmkqbhq33
+twosix9five
+nineninenngsevenonegscxlttn7
+sevenpllnzvqjlksevensevenjtkone32five
+7dhjbnjvzxfdrhc5r3gtxgxgzzx24
+kqsct1nzzbxldhfive6
+964eight4jp1two
+4cds99
+twotworcqrpvgtcq3twoffqz8
+6sixtwosixvzpzlr
+ninebkktjnineone9sixfiveseven
+fp6sixrrj3sqncfvzqtkcthree
+6foursevenninekdbmqbbccjeight8nxvvnbvcdv
+nkzthree9471seven
+fivecdtrjone4seven22
+twothree6onemvfourvtkrnnvvvbcs
+56ninesixmscnd1seven
+lnzntzqdeight2foureightthreexjpcprdncd
+56zeightz8jfzthgf
+eightthreeonegrnine24hsk
+hlm185nrphc1
+9five5
+threegqtxmeight9rfkvqnineqnjxhskndqzf
+1eightsix
+539tzsgsjhnx7
+cxhd32lksevenseven
+2qnbljpnjgssbzbhxtcfcxsqjlh5
+eights2kpfznvgghqtrmlb
+2six2nine
+cdrxjsxvvseven4bdljtxffdjhfive
+399hvclz
+1six18
+xlnrghvfmz5qthzss
+67rcgjkqckptsthree6twofourztsknx
+4qhsh2five67cgkjsnqtfvtwo1
+4lghphnh8
+1vpvslztbphninezbttbskeight8
+9fccbx
+2zvsxhlceight
+threehlmpkghvpz3cpseventhreetwonsix
+lsbttpxhlnqzppm868fourtwo9qz
+three17
+69513zfxqjvlpfh6mvrr1
+threenkchdrkqnfive5nine
+two2tcmsnfivekfh6rfhthree
+dtthree61stgcdkxqtm
+4hldzqzxqd1dcddroneone
+5jknllhktmhqjngc
+qphxzsgtwozmpcdq2fiveonevz
+three15three4eightthreeeight
+vckqkjtonexnzrdbm6vsxfivefive7
+three6eightsfnslxjnc7fourchtxdvftxpnzm
+sixfxrxx2
+9crhcfive8tlkr7qmxbcdcqb
+6hvjqxjzzsz24bc
+fbgsrsqmfv5hpkvlnxsfkpsccprhnv36
+mbpmgvmjcmpgxmfive1fxmh4smb4ct
+fourvpdcjttndp9qbfclcz6rnrhnkqjgv
+onemhqsm69
+rrz9
+5qfsxdxktfjbdnzcrfvt15eightjmsvhrnks3
+rgmvhprvkm3seven
+twolxvjhc269tsnpjhvone
+fiveeightrsrgxfjxn96
+mfourjcxsvss3oneightlxh
+sevenqjfg67k49xnqddlvf
+hgxhtwo6kbkeight
+97fivethree8
+ncv228
+95vjxzdpvxb6vxxtwo
+rsfeightmrcccsvqsdsfxgonenine7
+fsvjgqhgxsone64zdkdpghcjbprpzlmjfxsfknfd
+xbhbtph8eight
+1pdgmtwoslhkrtlfour91
+16crzkxrxpxjfourfourfive8
+slhmvmsixfrbggqdxfjcllbzn535two
+twosdjxhpseven5eighth
+6qdrmmvc9bvs
+onedljtrk2pvgvqpfkqc2lgslhfd1
+ninesevenxfqd4ztxnb7fourseven
+fpvbdpjkqfive2tsxb
+fglmcrcd9xsnxsxgkzmmgtcjlxlfiveseven
+gkgmm5onethree7jn
+ztmg3onetwo4
+hhbgmpnrh3
+188btpjkpdsix3oneightkpl
+xbqjpdst9762onethree
+4tqcdrzgljs19g8oneseven
+ninezs46eight
+grkgdppchchpzfive31
+298three
+2ghmxfjdjcfthreefive
+9hrq3sevenonezxrvgxbr
+n12kjninelvm
+sixfourvgpctkk48seven
+sixllxqmndkfcqvcdnssxjthreesixseven46
+nine7six
+lkcmctcnbeight8364
+k2zqvznsrjjvtjtwo
+zcxjvpgmllnlxxsonekrgsmqlntzsfxx4
+twocgzfcj6nskqj84
+rldlhnine5onefourvrstwo
+lqfr92eightnsbgrpncdlheightpvktkd
+vthreems422sevenninenine
+zcmhzlnonerqtnl1zxdjtqqeightseven
+8six3ps
+blqhvpgt7
+6gdf
+3jrl54xchxvgclqq
+8twosixfournine6ckrbnzr1oneightpp
+twonine5three9
+kmvmvrznj28eight4tlfourmqtmcgt
+prpmhkpg5sixqqkhvjtsmdjlgsxgjnfour
+5jfmzsprdmngm2nine
+ltzvtgkc5nine1sldgncp
+four6fivenine4
+hgsjtwo47qg15
+twoninesevennpmzshts4
+hjkcjjkdqxplmsjxdjphcb77eight6eightf
+8six3four2twoeighttwo
+tgrh83ninethree3seven
+bb6nineseven
+trpbxtzfour24skvqhc8
+rm4
+pqrtvrtfivefour52
+pdhtwo1q3
+fivefour4
+ninevvlfgvbzvdk7hkvsdjf8
+two3nlprsnkgfzxbhlfoureight5onepdqgtcjp
+one4hdjrvcnlfgpckx
+52six6nplcqfvxnf
+fzqgdmzdjeight8four
+two7zlk
+fg16seven8476cvthhjoneightt
+ldcmngfninetwo2eight
+eightsix8
+twojlm2onetjn
+3prnfrbng
+276onebpks2
+fournineeight52
+3198hvd64
+sixthreejmrl2
+zsvmnnfsjbfourfour54sfnlghlv
+5six4
+6dvrgdfncvd
+two4sevenhhvxsljvqtj3
+dcmgr7five13
+cmrgqdlthreemvcc9six
+fivekjsx8eight
+vhlvninefourtwotwo4five
+vffxj9
+pglbr7
+rghtnsixfkbnrthreesix8seven
+3fivenine5x17
+3rdonet2ninexbslcnsevenflqxplkxbs
+xbdgjfjttfhlrfldsmeightfour1tfjvcljc
+sixrjp1
+9sevengnsj
+dpmmrqksixeightsmnt58three
+2six66ninemnj6qjtvqpzcj
+sevenfzgg2six
+eightnine9sevenmhvxtbjxnh33
+tscsvpdtjzsjmlfvrzceight8eighttwo6
+seven193ltgmzczzqqmrrgseven
+fourtwovjhqfzlrnine1xmkqcs5fjrcxfssh
+83nbqmsrbbfhnjsixvgcbbtmphg
+3ccdbzjpkx7nrjnmfljgfour842
+threeseven8
+foureightpjlj9
+ctf5eightjnsvcrlfvz351
+4sixfivehqbs16tgqhf
+fourninekbvbtrbkl2h8nvflxrlvjdtrhz9
+dgpvtwonbspfvtkqfgxsixonefour4nine
+fournine15
+66tpr6frphqtfgcvpsjctqccbl
+foursvfjslmkb3rmxseven
+jtqsntfvpbthreejsqqgqnxq7766
+bjttrrvl9two
+one73three4rffjxsm
+fvmmheighttwokmcx7eightlzxcb
+3kvkhkrzld7sixtwo
+2three3mjqnpjznone2
+gfhvmznd8431two5three9
+62xdgeightqjgsfggzbrjcfsvmfourn
+pdznineeightsevenhxb4
+fiveone3sjqvhh
+4nineqzrh
+lhp5sixseven
+2blntmnfourmnn
+kcnxhnppzbsstbtvdrzt55three
+1gtrkltzfzsixs6
+85nsix3threethree
+32three
+six9fivefive4nineeightoneone
+fivektmbvvlzl5
+pdhfcjfrtprpqtqdnvnchl5356
+one2sevensixsixmhfhsevenzvkrgxsmhd1
+snvhxpxsevenc4twofivefour
+dqrvvlxrcrmnjkmjpgr8threeshzgnfbcsb92eight
+nkpll5nflrcffourtwoeightthreehzjvvdhm
+sntlr3rthreetwonzxzlvxxbbnsbkrl6
+eight26vhjjz4foureightwojk
+five24414lbddfpxnqdxptlzl
+dgqdninekmrs81n7x
+pfgnp5sevenqpnckfkz8
+eighteightgpxhrhprmmfpcp6
+hqgxtkckqxvfcxskrhn9
+4five8
+sevensix5
+rpk88gfxxz384brvgtkcqjnine
+ninexjk21onetwo1hzdhsm
+41hbthnkbl7gssdksjddone5kqkvxzc
+jjhmxrb56fd
+4kxxtmqjpfivesixone4nffllnkj
+8jlkmhmjjfour
+281one
+qeightwofkzzzkgcspgxp1threeqmjcksr64four
+xnbv3
+4seven3ktgrjvdfive7five
+dgroneightjmcrmplthdrncvld8one
+4ninegkxpztlbzs3
+1onetwosklsjcmsjh
+nine16
+8sixtwonine
+3qhtzxzqfmh
+twozgbcpzvsffthree4
+48fkbpfpkzhfpnvmctsjq9
+seven2two6zprbpmqdk1
+4hhztrv7sixfournine
+3threemxlshrpv59clfrt
+sevenmqmnine4eight
+xg36mlvzsix3kbqttvhtpd
+699fourqhbhsdhrflmbfdk
+gzjhseven63251
+two8twonqplqkq
+eightrbsgj21three
+sdckkgcvmsjbvn5nine
+624onesix
+pjdnz7nctxzssf
+kl5232rqkdrkd8five5
+three53fourthreesixpjm
+6sxpnjnqn79nineoneoneeighttwonenf
+five398nine
+96srrjjvjkpkbmhzdxgpkzszxxbseven
+812vjlglflnd
+34six9five7threeftcqxtcxxz
+4threelpcjptwo
+fivefivebldxbxeightjzsixthreefqmgb8
+9cmrblfnd4
+nine53one
+seven3one
+tsqrmmlvqjqone43
+one5bm1ninefourthree
+p882seven
+c3eight
+3eightsix
+4sevenfqdrpdqbjpxdbjdsevenmsfxsmjdtcdhpd
+cbeightxkttcgmsmone2nine88
+nb7jtsvpggtcrntrbpzjthrsix35
+5ninevtv3712
+five3two2fivezbvfcvlnkskccj2
+six8seventhree14
+1eightmkzbxone9nv46
+three4one
+3njpjstjvzh9xjxnqr
+threetwo9sml3
+6rmzg6
+seven91xbpnine8onefxktwo
+ppmpn2oneone
+qch5
+rjrkk2zqzndfb7chzmtdv
+vgkqbtwosix48zrntbhpn
+82oneeightmbzvzvjb3four
+6hrxnlmsfsngpklbrlrsvcl4
+65sevenfivesixvjm
+kkkhbdcnxfbfourfoursevenonesevenfour5
+68qkcfd4four2
+two94twofour
+zzmz2jbl46kjnktxnvqrj
+982
+ninezrj9six
+snxrvhctcrvzvfivehldldnjttonerstc4
+bsftwonezfhnm5vlsjtnpnzj
+onefiven57
+seven6vbkrk
+5five9
+twoseven9
+hglskzhzs7fpmmjzvmx9six9
+1vsb
+4lrhsh
+gnln3ccc
+four23
+threebxljqlxkssmvndjbltcvfc4
+fournine6eight2fourthree
+4sevenqtsfccrrpdhseven
+6sdzjdrfcxmdztrhpxbfshmrstq7fiverrcmtdfxmqphnpfxhkt
+jsnbngsppbhgsixeight9xmhkvvqcdjzgplvztspone
+rtbrqpgdcmmx9nnjjs8seventhree1
+93five21
+tss6eight
+cpgvone9four
+1eightwom
+rgrsvtv48857
+fptwonesixfivenine2
+8xdbvf1zgfiveslb
+ninenine3
+p637sevenqbbvbpmlgrk
+723onethreedhhvgls
+four7five91pjlpnbmlfzvhrfhvs7
+six547eighttwo7rg
+vphlckdvqx3three
+four12th
+2kqzlthree8
+sevenbl22
+two68six4four7
+lmrbqzgrsm2sixnine
+fivexspftvthreezvjtgfbknp9mzslnb3two2
+8twofive2
+9vbngfdjmp
+1qzphhnlbqz76411km
+sevenfivethreetdnpmxllmkgnvhdz7tvjv
+threectnine1seven
+9fone
+9sxbxsix6zmqllpzftsftbdf9nine
+xninehhxsbzzspctdbpfdscbjq687glqdsqtvqz
+threemjrdnvqrk7bvvsgfjfbone17
+npntthqz4nine9fourbrdsqgnzlf5
+133xqjvmjmpqdkt4
+2dnvzgtnl5d9vvjlknxxqfourfive
+mtntzxzvkmqr748
+foursix6sixfour2vmqzxtzdqbzgmbrggmgtnine
+hphqmdsgmvtwo35qnmsqnqnhlkb
+flsxtqfxhsevensixgtkdseven6qzvscqbztwo
+sixgxbmgchcrksixfivedznxzkzpttsvtzqhkdzrhqnhtwo5
+69zpddjrnztqbr
+1fourone2four1hfgsrvgtht
+1rbr2gpfpdghtwo7ninedzx
+4sixfour
+9fivebcckvbdnkqhhhskb2
+fghbcczsmhnbm1ninexdcpzjknqvfive6
+5sevenjtmhs1one
+8htpbfhgsdh55one2two
+mmxsmst1fivefivesevenfivetwo4
+984six6eight96
+bhrrjtgdmj4two
+seven8three
+three3onefour8v
+five9qbf8fzlvtsix
+nkcmtl16four
+gkdlzkfrnteighttworjjmtbrb451
+txpkjjztlkth221seven
+frtrvninesixlftgsxtxvbdnjmxc7
+4mzdfjsxzvs9one6jrjv5
+96threecxhhdjkmjhsrgz
+one8sixcrchbgpz
+grjvxszd1s6
+qbxvjggkfrcfivempdck4
+7one32jzpxdgstwo3pspjhmg
+gsvgpdhthreesixeighttwo5hkncndcmthree
+xksmqqsvzthreebjzr1fiveseven8seventwo
+mlgjjjhn44
+threefour12sixseven16
+one2ghggthree4
+ninefiveseven8tbldpbcmmvn
+jxtxlqcc6twoh2
+1xlsjrcfourqvlx9one
+twothreetwo5
+tmsqz1vrrj72
+lcxdvtsl3onesix
+fxqbcnpjzeight8seven
+scpqzdhss13seven7nlkxmkntk64
+fnlcc74
+five4lkxcvztwo1two
+85nmsjmgvcv
+sixbqsxnq4
+6fiveeightfiveseven
+mbcxhgrjdtdtfpclfxzc1fnvlnz1five
+9587sixptttpksnbnzzsrls
+1jcqnzffpmrninesevenssxfndgkx
+7zffzsjgzbgzzfvv2vnrrfvnclseven
+mbghnmthjjfmcxzsixfive44
+hklcflkm7four3
+fddnsshjxf6twospgtkzzkfsix
+sevenninesevenlkrhnzdzxfive6six
+55bqeight
+5nine6mfbeightsixone1
+rjlkpq77
+jqeightwofourtbcqvkvvqzcmrbbmzfiveseven59qmtz
+ldb2jfqll
+4nineftshkg77jtxggdt9four
+nine2seven47seven487
+8lpctcvhvfivezqcrtrxrsevenqhhtxrdplfbqpr1mjfkcfrrfc
+zmlhsn6tfiveseven
+djfmdf6
+fhcthree5
+9sevenbftsixone
+four11tprnmdmvczfourgpjx
+eightfourninexdchgfblq7
+4c5sevendgtngqxzghpxpcs2
+xdqcfmhsz3ktf
+eightkvhvqgqn88rrftxjzzsrfb
+gznfkfbtbnthree1four
+273kfrsjbpzbzseven
+five9foureightvlpmphnp
+1qtgttxninetwosqfffcsfgxdz68psbmvvpmt
+nine9fivefcnpbnl6tmbsjkrr9three
+szmthreeonesix2bqfqrxkljlseven
+jvphjsqzlc2dbzchmronetwo
+8sixthree2v9threesixqkqb
+fourone3eight6fiveeightrgjmfive
+9ppveight
+two6vgkdlv73ninesix
+44886488
+lsjxprxdz58eight32
+four95skp
+2eight3three9jq7nkftgzn
+cssgnvhvnnrlklmmxdfxhtvptwo6fmtmchspb
+9five7xnx4hxvdlslgpfourfour
+onetwo9six3cpsdjprgkjthcfmkkx
+1threeeightqgxvvvgvs1lqrfivegfqqslmc
+five7eightfivesix9one29
+59eighttwooneone
+4s44549fiverhcbmpqgjm
+nineffkpxf2
+seven8fqsvjnjzphsevenj
+eightmpgfxkspplninekqzlplrmmn224twonezxf
+mqqqctworfpjkkhninevgh7eightonezdmfrrvv
+one31
+8nbcjdx3
+rdprrrcjjflkxszthreetworvfksix4
+one59three
+2rhxjrb6kjdpxqbthree6xlzgvk
+threexbsvqsseven7cxmggqrnsthree9
+gmqxghthreeone7fourvfivefoursix
+5nine8
+khcnjsfourzxjkvp5zfhpcvv
+three3xnbzpmjqsix5
+3ninehvdbz43
+47ssqq5fourfoursixcggslftbttlpb
+2threemdtlrprfzc
+2threethree
+nine84fczsrqzd7six
+fourmrbqh79
+gqdhhggdxfive6
+d99fphzhxghqt44seven
+lldllhmzrskzzbzsixfour6two91seven
+3xzjfsppg
+7five6nzfpvcpm5
+one9mpggcblrpstzpvfffivelkrqvkvkkhtzseven
+eightbr3ksix
+4eighttwothree2bzfivebn
+18twoseven
+bdjbgtxdjx57seven
+eightthree89two3vmsbxbskclh
+lgnbbjxtmgvfsix5three
+cgrsfsns653five7
+two1sevenkqllxjvqbfvfxnr
+jptmclgmdzhndpkbcd9
+twosix62threeone2
+three5chntgfivegkbzfrvvxkb
+5djqstgsrbhl8
+9v3
+8four9four89
+five2nineseven
+h3cpsxzx3four2
+fivehpzczrl5zxkzkpxcvdkshsfqzxpjqqhdg5
+bdfftptqt8kmpbdgsncceightzmtfjphnxqbslplrqxv8
+two74tworvzjftxvqzpvx
+bpjslrgkbonethreelfsxshjtpfour2kjxgzgv
+rqktwopdlvjrrxlgvrfnnine3qonesix
+fivefivec4sixgdldnine9
+eightz1zzqph
+dgmcl5153qtgxlkzgtzseven8three
+knkrvlxvjs6svsrj51fourhjbqzq
+three96
+szxkfqthreethreenine1
+9gxtwofourzeight
+fninel8
+ninevzddbcfhttwo1onesj
+mdbg8qxvzfsgmh9eighthpqcrzklheightwofp
+78lqjv3fourdthreethreeeightwonlq
+fourkkrzcbphdseight8brqjsfsbfktwo
+4tnvlcfjqsixql
+zd7nbzhclh8
+plkrkone2
+mksjljks4xfslzzlp
+nine22462seven2
+gbtwonine93
+vkvb6fiveltone2eight2
+cnxxhvlcj863sixsevenmckrblvvtbzqbc
+nfldnvnxx2eightninexnsbseven
+1six6
+nine83
+one5djxkzxrttqthree8jzqdfvthmtwooneone
+gjdj1eight
+3fivetwonzflsvgdmgtbz
+threetwosixvbssrqxjfvffour3
+2ninefivernscgdfrgpsnvtchzfxmdhjfsfivefour
+threegsmtcn12
+foursmbzsrhnnseven6twodnnjhbthree
+62twortpndjsgfgmd
+ktxsgdskqtlbnj5one1mxhztxgb2four
+threefourfmfxrmnlhninersxz1eight
+3jkqdvsevensixhbxfq
+slmseven8sndphqlhjgbzhrdrfxzphfvs
+6gfvsxprrmg7nzmjkvnm8
+34qgtjsnoneqbqrmkz9
+2sevendvqvdtjrjrhpfzkphpsixtwozkfg
+72nineseven
+nsgmfsfive8two
+71sixhzsl9sixfnrjntxpv
+onennncchq73eight3
+vsxbb13cpdpvhnmz2
+681
+mpgd2
+bzh72seven
+fiveeight4589jknzbnjlrt57
+one3dm4
+91nine6mbspjn
+bzmztdlkqslzbnghlsxtvfk2
+3two12vpl7dkkjjln4
+zdmgeight9kfvtpx7nine
+7114nine655xxx
+332
+six183fourfivelstnlsvgvx
+zsxbg9tbpsnbvzhj6eight
+nqqctrzlpggjrrrlzdfkjthree2
+fivecsvzxptmhk8
+d7hssmvk6one
+kngdgssixeight1four3
+sevengptvbjtkbxsdgzdeight8twop
+fourlmscbhkkfour89kflkf
+7bxl6mcgzfxv
+klkqmz29
+kmszrdfour2ppkkdlffivendgcfthree8
+kcvpt7
+sdjttwokhtzdksix6
+eight83four31nine4
+4eight4vxctcsgzf31qhjptxhfrjtl
+dhhfmbhtst6ninehmb2
+1ninesevenkhfmgjjltgkrgxvm48cxtzzvhn
+dczpdbfl45jcpmckczpssnqn2six7
+6tsmftwokdgltlkzqdqttflqhm
+1qthkhrrjxvbkngldslmzp2
+2sevenr6zzcvkqgkn93
+1fivec1x2gbdkqvkqpsix7
+3znplrfxnrq
+ninetwofiveseven44bsn
+onefive9zqknglr8thzhx
+sevenfourcts5lttdprpg8three9seven
+seven9vfjqdfkg3
+5tjmtkhseven3five
+crf14
+5fourxxn
+r3fivejbvrzgnl
+4nine5
+svhmflmpbkjjponemj2threefslgpxsrprjzvfxcrvp
+91threeeightfour6bmqfmr
+6krhfmtwothree2sixeight
+pdpvrlqb36
+4sixsevenseventhreegjthree
+threehgckkksz8eight3
+qqhtjq3lnvqkpjvrp42
+3three8four942
+mggbbhxd4eightvmmdvl
+fourtqpgjkszglhthree752
+ninehsnqzkrzpfgdvlg5six
+6two8xstlhvhkhdone
+fivesix55eightqpjdxkpnine
+ftwone4seventhreenine3two
+sixfivetwoqplqntzlldbmkgzsix78
+onenlqnxcr4
+seven5spnronedhtxsdgtfgsgjl1jlhf
+fivethreednbvgpbr7four5
+qchoneightpbgdzxjbshqf527four4
+51threetwo5sevenhnnpjvx
+qdkcbnkjssixtwobkfzcnfkb84
+qsjgzbgpxq9
+7eight3six
+8jvmxgnp6cqpsqtqgfive1nine
+nineg11sj
+3fourfour
+pg6djcsdmdlgjtwo1
+bxcbznvnqbfjjbfonedgl3foureightjgsqbqhzhg
+twofivetwosixv5fiveonenine
+l8eight6gdmd
+nine15bcseven2
+l4
+g5ldxkrk4fivevft
+fourxmf35
+nine6xdhfmltwofnqkf
+phbcjjmnmcvjgzfsixfour6eight5
+2ckvh
+rzone3745
+keightwosixfour466
+one3lbkl7tssqxqrbbmxkh
+6oneonezllhftdf4bfpxj
+6eightpc
+ninenine4nbfbqrtnvkl
+sixqbbffgdsixtwofivesix8
+zfplftwosixsixnine9
+two4rncnine77nineczlfdrp
+43jseven
+7mntc
+6z146fourtwo
+seventhreethreevxmbzhmpktj6twohxzjnhp7
+tz6vrdbzgzhxcfd
+seven6eighttgglxnhmknine
+8eightseven41crvrxbonetmscnl
+xbhtfgg5four86onesixthreejk
+3dlblsjq
+sevenmsrgcfmxmthreegzgxdqmkcgkjcbnx45pzlcjc
+5nine69
+9cpjmdgf
+4fourkgzmjnhplrlmeight
+ninetwo6sixmdz
+dcdbk71twothree56fourtbzkz
+tcc3nineeightseven2flrlndb4
+sixcpztsj72zpdhmvfp4two
+9hnine5
+two7kktkms
+1sevennine
+5zczmvxthreethreetwovvnfvvsjnv
+9dhjcgnnsvh4five4
+bbv46hvj68eight7
+sdmntqgftc5blnhkktqmg1five
+5ninefour
+gmg6bzgrxhgtssthreenine1
+78twothree4mtbfthree
+hclggrdf9
+jnbmj3seven4
+xdhcgkrkrtrfourcxmlzp1scxkxxzlsdjfccchzg
+rpdphff9blkl22csthreex
+stwone791seven
+cdfkxhfqr4sdlcleightnine72tkftldjnq
+tklpckfour7seven1qvxthlfourhtrdn2
+b4three4cninetwonebbv
+nfourdzxjxcp7mnzkzdnmpqsixgn
+jfcfncxone9kmdrbxfjtpvfp26
+6threeseven21ssblsvrbfsvzmbktkpztcsmpt7
+vgchkqhxrbjnlqnvpml77twonejcv
+gxklhvtwo55five
+sevenfivetwo1mtdfjgcp2sevenpj
+qvrjceightcjlp5
+tbl4zxthxzpsix
+rvzlvnhnineeight2cxxcslhpph
+shrxnz9rtfrtrtr
+1drmztt2zfournrmxfivejzksgzqfour
+chtmdlppljlllhg8threendnhkn1qzxkrtnqgrtwo
+two15eighttdlrpqjx45
+1kqd5
+3krsbnzthreetxpv
+7ninefivesix67sixseven
+sevenninesmjkdfssnl3two7
+pmjmkzdrvfour4nineseven
+t1xnlcvlfninecbrzxc5
+nine3qnjcktfiveeightkhb
+psqrone1nxcsrntkjg9
+6lgdfgxts9two9
+48six4
+threehvxfhzvxhs8three2two
+onesrmxjlv43gtsjtdneight
+5eight14fournineeightfour4
+3mljsmn7mrnvnc844
+5dmdvxxddhone9fiveone
+twogscrq26xfppjzhthreervonefour
+6ndcblbmdjpthreetwotwovpcsmffive
+5gkqzhgvrcthreeseven
+sixkhgqjqnineqhxl4
+z6ltpkcqxmd
+fivetwo5rstcq9
+threetwo563
+4fourtvksk8onefive
+294tv
+7flzfzm22brfgxsqhhckzc5
+twoone9sixsixninethree7
+2glqfourseven1one
+nine4five7418
+9xfivezxrr1xpjm896
+foursixtwoninevtzzgntnlg6oneightbxp
+2eight1fiveeightfive
+mzjxlhjmqp58six
+one34
+8fivejdmljr
+tsblxssixseven4djq
+8drrmf32
+11twok9663
+hsoneight3sevennpsbbkdvsb46
+dtrnnhxcdmzzlssffhgvbxxrgbcz2fiveonesix
+kkeightwo6975six
+jcftbeight9
+fivefivephbpdtkqfm246
+5eight97nine
+4sixfour4nppgsr36one3
+glxlmnvhjxsevensix1fourseven
+sevensixjczjhjzbj8fnsnrsevenfive2seven
+jjpngnpzglkbltbrv2tjmqrpb
+4txvpps9kvjhgsqpcv6eight2jxk
+onesix8qfvkckg145ndkfdcvznine
+nkthree86b5fgzzfoneqn
+eightgndhmrfouronexldvdvqnzxqjczfk1
diff --git a/src/2023/day01/python/main.py b/src/2023/day01/python/main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2023/day01/python/test_main.py b/src/2023/day01/python/test_main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2023/day02/input.txt b/src/2023/day02/go/input.txt
similarity index 100%
rename from src/2023/day02/input.txt
rename to src/2023/day02/go/input.txt
diff --git a/src/2023/day02/main.go b/src/2023/day02/go/main.go
similarity index 100%
rename from src/2023/day02/main.go
rename to src/2023/day02/go/main.go
diff --git a/src/2023/day02/main_test.go b/src/2023/day02/go/main_test.go
similarity index 100%
rename from src/2023/day02/main_test.go
rename to src/2023/day02/go/main_test.go
diff --git a/src/2023/day02/python/input.txt b/src/2023/day02/python/input.txt
new file mode 100644
index 0000000..f06a648
--- /dev/null
+++ b/src/2023/day02/python/input.txt
@@ -0,0 +1,100 @@
+Game 1: 7 blue, 6 green, 3 red; 3 red, 5 green, 1 blue; 1 red, 5 green, 8 blue; 3 red, 1 green, 5 blue
+Game 2: 9 green, 1 blue, 12 red; 1 blue, 18 green, 8 red; 2 blue, 6 green, 13 red; 3 blue, 13 red, 7 green; 5 blue, 4 red, 4 green; 6 blue, 7 green, 4 red
+Game 3: 5 blue, 9 red, 14 green; 10 green, 3 blue; 11 red, 2 blue, 8 green; 5 red, 2 blue; 5 blue, 7 green, 8 red
+Game 4: 2 red, 3 blue, 2 green; 17 green, 6 blue, 1 red; 3 blue, 5 green, 1 red; 4 red, 1 blue, 16 green; 5 red, 4 blue, 13 green; 14 green, 5 blue, 6 red
+Game 5: 3 red, 17 green, 10 blue; 9 blue, 5 green; 14 green, 9 blue, 11 red
+Game 6: 4 green, 18 blue, 3 red; 6 green, 8 blue, 9 red; 4 green, 9 blue, 7 red; 9 red, 1 green, 12 blue
+Game 7: 1 blue, 14 green; 1 red, 4 blue, 15 green; 3 blue, 6 green; 3 blue, 2 green, 1 red; 1 red, 3 green, 1 blue
+Game 8: 10 red, 3 blue, 3 green; 5 blue, 7 red, 3 green; 3 red, 3 green, 11 blue; 1 red, 7 green, 10 blue; 13 blue, 5 green, 5 red; 1 green, 17 blue, 3 red
+Game 9: 1 blue, 6 green; 7 green, 2 red; 3 red, 2 green; 1 blue, 4 red, 3 green; 7 green, 1 blue, 1 red
+Game 10: 14 green, 6 blue, 1 red; 8 green, 5 red, 1 blue; 8 green, 5 blue, 5 red; 2 green, 3 blue, 5 red
+Game 11: 1 blue, 2 green; 1 blue, 1 green, 7 red; 1 blue, 4 green, 7 red; 2 red, 2 green, 1 blue
+Game 12: 5 blue, 12 green, 12 red; 11 green, 3 red; 14 green, 3 blue, 18 red
+Game 13: 2 green, 6 red; 6 red, 5 blue; 7 red, 3 blue, 8 green; 7 red, 8 green; 3 blue, 2 green, 3 red; 1 blue, 8 red, 6 green
+Game 14: 18 green, 6 blue, 5 red; 5 blue, 15 red, 19 green; 7 green, 11 blue, 20 red; 5 red, 18 green, 7 blue
+Game 15: 3 red, 16 green, 1 blue; 11 green, 6 red, 1 blue; 12 green, 2 red; 17 green, 1 blue, 14 red
+Game 16: 3 red, 2 green, 5 blue; 1 green, 6 blue, 1 red; 1 green, 2 blue, 3 red; 1 blue, 1 red; 5 blue, 1 green, 2 red
+Game 17: 3 blue, 6 red; 1 blue, 2 red; 1 blue, 1 green, 7 red; 1 green, 7 red, 2 blue; 7 red, 1 blue; 1 green, 8 red, 1 blue
+Game 18: 6 green, 10 red; 6 red, 7 green; 10 red, 11 green; 10 red, 2 blue, 5 green
+Game 19: 2 blue; 1 blue, 4 green, 6 red; 7 green, 6 red, 2 blue; 2 blue, 5 red, 4 green; 1 green, 10 red
+Game 20: 6 red, 5 green, 10 blue; 5 blue, 5 green, 9 red; 7 blue, 3 green, 3 red; 9 blue, 12 red, 1 green
+Game 21: 4 red, 18 blue, 14 green; 3 green, 14 blue, 5 red; 5 green, 12 blue; 1 blue, 2 red, 1 green; 5 red, 11 green, 7 blue; 17 green, 4 red, 15 blue
+Game 22: 1 blue, 14 green, 4 red; 7 green, 10 red; 9 green, 1 blue, 9 red; 1 blue, 8 green, 5 red
+Game 23: 4 blue, 5 green, 2 red; 6 blue, 8 red, 4 green; 4 blue, 17 red, 14 green
+Game 24: 3 green, 8 blue; 3 blue, 5 green, 13 red; 17 red, 4 green
+Game 25: 19 red, 9 blue, 1 green; 3 green, 18 red, 6 blue; 1 green, 7 red, 7 blue; 8 blue, 1 red
+Game 26: 10 green, 12 blue, 2 red; 9 red; 10 blue, 12 green, 9 red
+Game 27: 2 blue, 8 green, 6 red; 5 green, 9 red; 4 red, 11 green
+Game 28: 10 blue, 20 red; 14 blue, 3 green, 2 red; 9 red, 12 blue, 1 green
+Game 29: 4 red, 1 blue, 2 green; 1 green, 6 red, 1 blue; 15 red
+Game 30: 1 red, 13 blue, 6 green; 3 blue, 4 green; 19 blue, 11 green; 1 red, 11 green, 14 blue
+Game 31: 10 red, 12 green; 12 green, 10 red; 2 blue, 15 red, 12 green; 2 green, 2 blue, 15 red; 9 green, 5 red, 2 blue
+Game 32: 5 blue, 5 green, 8 red; 5 green, 6 red; 5 blue, 8 red, 4 green; 5 green, 3 blue, 6 red
+Game 33: 1 red, 9 green, 5 blue; 17 green, 4 blue; 3 green, 2 blue; 10 green, 2 blue; 1 blue, 4 green; 2 green, 9 blue
+Game 34: 11 blue, 11 red, 9 green; 13 red, 3 blue, 5 green; 9 green, 12 blue, 5 red; 13 red, 8 blue, 5 green
+Game 35: 1 green, 3 red, 7 blue; 1 red, 3 green, 9 blue; 1 blue, 2 green, 1 red; 11 blue, 5 red, 6 green
+Game 36: 4 blue, 12 green, 16 red; 7 blue, 11 green; 8 green, 5 blue, 1 red; 14 green, 3 red
+Game 37: 13 red, 5 blue, 9 green; 1 red, 10 blue, 14 green; 1 green, 2 blue, 10 red; 13 red, 10 blue; 1 blue, 8 green
+Game 38: 3 red, 4 blue, 8 green; 1 red, 11 blue, 4 green; 13 blue, 8 green; 3 red, 3 green, 10 blue; 1 red, 1 blue, 1 green; 1 green, 2 red, 10 blue
+Game 39: 9 red, 7 blue, 1 green; 15 red, 4 green, 1 blue; 2 green, 8 blue, 7 red; 6 blue, 11 red; 12 red, 2 blue, 7 green
+Game 40: 13 red, 3 green, 1 blue; 3 green, 10 red; 16 red
+Game 41: 1 blue, 3 red; 7 blue, 5 red, 3 green; 4 red, 3 blue, 2 green; 2 blue, 5 red, 1 green; 3 green, 4 red, 3 blue; 5 blue, 2 red
+Game 42: 1 red, 4 green; 11 red, 4 green; 13 red; 1 blue, 10 red; 1 blue, 2 red, 4 green
+Game 43: 11 green, 13 red, 1 blue; 11 green, 9 red, 2 blue; 7 green; 13 green, 15 red; 1 blue, 14 green
+Game 44: 5 green, 14 blue, 15 red; 13 blue, 15 green; 9 green, 15 red, 6 blue
+Game 45: 16 red, 8 blue; 1 green, 4 blue, 6 red; 4 blue, 8 red; 12 red, 3 blue, 3 green; 2 green, 4 red, 4 blue; 2 green, 8 blue, 10 red
+Game 46: 12 blue, 3 green, 12 red; 9 red, 9 blue; 3 green, 12 red; 10 red, 6 green; 2 red, 7 blue
+Game 47: 9 green, 6 red; 1 blue, 7 red, 10 green; 1 green, 2 red; 1 red, 3 green
+Game 48: 9 blue, 5 green, 13 red; 14 green, 4 red; 15 red, 9 green, 1 blue; 4 blue, 6 red, 13 green; 9 green, 8 blue, 8 red
+Game 49: 5 blue, 3 red; 1 green, 2 red, 5 blue; 1 green, 7 blue; 3 green
+Game 50: 8 red, 6 green; 10 blue, 4 green, 6 red; 8 green, 11 blue, 9 red
+Game 51: 5 blue; 13 blue; 1 red, 2 blue, 1 green; 1 red, 8 blue
+Game 52: 7 blue; 1 red, 2 green, 12 blue; 1 red, 5 blue; 2 red, 7 blue, 4 green; 3 green, 2 red, 2 blue
+Game 53: 10 blue, 12 red; 3 green, 5 blue, 3 red; 14 red, 4 green, 7 blue; 1 red, 14 blue
+Game 54: 2 blue, 14 red, 3 green; 3 green, 7 red; 2 blue, 3 green, 9 red; 3 green, 7 red; 1 green, 14 red, 1 blue
+Game 55: 3 green, 9 red, 12 blue; 5 blue, 5 green, 2 red; 7 green, 14 red, 12 blue
+Game 56: 1 blue, 3 red, 4 green; 5 red, 8 green, 1 blue; 3 green, 1 blue, 2 red
+Game 57: 8 blue, 13 red, 2 green; 3 blue, 5 red; 7 red, 2 green; 2 red, 5 blue, 3 green; 1 green, 4 blue
+Game 58: 4 green, 3 red, 2 blue; 5 green, 2 blue, 10 red; 11 green, 1 red, 2 blue; 4 red, 5 green
+Game 59: 5 green; 4 green, 2 blue; 1 red, 9 green; 7 green, 2 blue; 16 green, 1 blue
+Game 60: 6 green, 5 blue, 1 red; 5 blue, 3 green, 6 red; 1 green, 5 blue, 14 red; 6 red, 4 blue, 3 green
+Game 61: 2 green, 6 red, 6 blue; 6 blue, 3 red; 1 green, 2 red, 2 blue; 1 red, 2 green; 5 red, 1 green, 2 blue; 2 green, 6 red, 6 blue
+Game 62: 18 green, 8 blue, 1 red; 8 green, 4 red; 13 blue, 1 red, 3 green; 7 blue, 2 green, 4 red; 4 blue, 12 green, 5 red; 12 green, 11 blue
+Game 63: 2 red, 3 blue; 10 green, 13 red, 1 blue; 11 red, 3 green, 4 blue
+Game 64: 1 green, 16 red; 17 blue, 9 red, 1 green; 14 red, 7 blue
+Game 65: 7 blue, 11 red, 11 green; 7 red, 11 green; 3 blue, 13 red, 11 green; 5 green, 6 blue; 11 blue, 8 red, 3 green
+Game 66: 3 blue, 1 green, 3 red; 5 blue, 2 green, 5 red; 1 blue, 2 green, 7 red; 2 blue, 6 red; 7 red, 2 green, 2 blue; 2 red
+Game 67: 1 blue, 6 red, 2 green; 1 blue, 10 green, 6 red; 8 red, 2 blue, 4 green; 7 green, 9 red, 1 blue; 8 red, 7 green; 5 green, 1 blue
+Game 68: 15 blue, 8 green, 2 red; 6 blue, 2 green; 5 red, 6 green, 8 blue; 6 red, 11 green, 7 blue; 1 red, 3 blue; 5 red, 6 green, 5 blue
+Game 69: 5 blue, 4 green; 1 green, 11 red, 9 blue; 4 green, 15 blue, 6 red; 11 blue, 4 green, 5 red; 8 red, 3 green; 5 blue, 8 red
+Game 70: 5 blue, 4 red, 8 green; 6 blue, 6 green; 14 blue, 7 red, 1 green; 2 green, 6 blue, 3 red; 7 red, 11 blue, 3 green
+Game 71: 13 red, 6 blue, 10 green; 7 red, 12 green; 9 green, 14 red, 2 blue
+Game 72: 9 red, 3 green, 3 blue; 8 red, 7 blue, 5 green; 3 blue, 2 green, 1 red; 1 red, 2 blue, 2 green; 10 red, 7 green, 6 blue
+Game 73: 4 green, 3 red; 1 red; 2 red, 2 blue, 2 green; 1 blue, 3 red, 1 green; 2 blue, 3 red, 2 green; 1 red, 1 blue
+Game 74: 12 green, 4 red, 4 blue; 3 red, 13 green; 1 red, 13 green, 1 blue; 1 red, 3 blue, 6 green; 6 blue, 5 red, 4 green; 7 blue, 5 green, 1 red
+Game 75: 11 red, 1 green; 12 blue, 1 red; 2 blue, 1 green, 4 red; 11 red; 12 red, 6 green, 10 blue; 4 green, 5 blue, 7 red
+Game 76: 2 blue, 5 red, 6 green; 1 red, 10 green, 11 blue; 7 red, 11 green; 4 red, 10 blue, 10 green; 7 blue, 16 green, 2 red
+Game 77: 2 blue, 11 red, 4 green; 6 green, 3 blue, 2 red; 2 blue, 2 red, 7 green; 8 red, 14 blue, 5 green; 5 green, 2 blue, 18 red
+Game 78: 9 red, 7 green, 6 blue; 12 blue, 6 red; 1 red, 15 blue, 7 green; 3 blue, 11 green, 1 red
+Game 79: 3 blue; 1 blue; 1 red, 1 blue, 1 green; 3 blue; 5 blue, 1 red; 1 blue, 1 green, 1 red
+Game 80: 18 blue, 13 green, 7 red; 18 blue, 3 green, 3 red; 2 red, 9 blue, 14 green
+Game 81: 11 blue, 6 green, 3 red; 8 green, 12 red, 10 blue; 5 red, 4 blue, 13 green
+Game 82: 2 blue, 3 red; 4 blue, 17 red; 9 red; 12 red; 1 green, 6 blue, 7 red; 20 red
+Game 83: 1 blue, 1 red; 3 red, 1 blue; 3 red, 5 green; 1 blue, 2 green, 4 red; 5 green, 3 blue, 2 red
+Game 84: 4 red, 2 blue, 2 green; 8 red, 10 blue; 1 green, 15 red, 8 blue
+Game 85: 15 green; 11 red, 2 blue, 5 green; 8 red, 2 blue, 12 green; 15 red, 10 green; 10 red, 15 green; 17 red, 1 blue, 11 green
+Game 86: 6 blue, 1 red; 2 green, 1 red, 8 blue; 2 green, 10 blue; 10 blue, 2 green; 1 red, 5 blue
+Game 87: 4 red, 4 blue; 18 red, 8 blue; 16 red; 4 red, 1 green, 3 blue; 14 red, 9 blue
+Game 88: 11 green, 7 blue, 4 red; 3 red; 2 blue, 12 red, 19 green; 13 red, 3 blue, 2 green
+Game 89: 1 green, 1 red; 1 blue, 1 red, 6 green; 6 green, 3 red; 5 green, 2 red, 6 blue; 7 blue, 2 red, 8 green; 1 red, 2 blue
+Game 90: 3 green, 3 red, 3 blue; 5 green, 2 blue, 3 red; 1 blue, 2 red; 11 green, 1 blue, 2 red; 1 green, 3 blue, 4 red
+Game 91: 7 blue, 2 red; 2 blue, 1 red, 1 green; 6 blue, 1 red; 1 red, 7 blue
+Game 92: 11 green, 16 blue; 17 red, 7 blue, 9 green; 11 green, 3 blue, 12 red; 2 blue, 1 green, 6 red
+Game 93: 6 red, 1 blue, 3 green; 1 blue, 8 red, 7 green; 3 red, 5 green; 1 red, 2 green; 3 red, 7 green; 2 green, 15 red, 1 blue
+Game 94: 7 blue, 2 red, 2 green; 9 blue, 4 red, 2 green; 9 blue, 5 red, 3 green; 1 blue, 4 red, 3 green; 4 red, 1 green, 7 blue; 9 blue, 3 green, 3 red
+Game 95: 1 blue, 2 green, 2 red; 6 green, 6 red, 1 blue; 3 blue, 5 red, 2 green; 1 blue; 5 green, 2 red, 2 blue
+Game 96: 3 blue, 6 red, 5 green; 5 blue, 8 green, 9 red; 2 red, 5 green, 1 blue; 6 green, 4 blue, 3 red; 2 green, 2 blue; 6 blue, 4 green
+Game 97: 6 green, 8 blue, 5 red; 9 green, 6 blue; 3 green, 3 blue; 2 blue, 10 green, 4 red
+Game 98: 11 blue, 1 green, 9 red; 5 green, 1 blue, 6 red; 13 blue, 6 green, 10 red; 6 blue, 4 green, 9 red
+Game 99: 4 red, 3 green, 3 blue; 6 blue, 4 green, 11 red; 3 green, 15 red; 1 blue, 6 green, 14 red
+Game 100: 14 green, 6 blue, 12 red; 2 green, 1 blue, 2 red; 12 red, 7 blue, 3 green; 1 blue, 12 red, 8 green
diff --git a/src/2023/day02/python/main.py b/src/2023/day02/python/main.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/2023/day02/python/test_main.py b/src/2023/day02/python/test_main.py
new file mode 100644
index 0000000..e69de29