diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..fef60a0feab7c8c58800eb3a0fbd49c31bc9ff4d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,5 @@
+build:
+	alex Lexer.x
+	happy Parser.y
+	ghc -dynamic Main.hs
+	mv Main csvql
diff --git a/pr1.cql b/pr1.cql
new file mode 100644
index 0000000000000000000000000000000000000000..f9bfb751ab7fe0abaacc7b74c0c67cd81b33533a
--- /dev/null
+++ b/pr1.cql
@@ -0,0 +1,6 @@
+.in
+A:2, # declare input files and their numbers of cols in .in section
+B:2
+
+.out # statements for the query are in .out section
+A x B; # returns the cartesian product of the two sets (conjunction)
\ No newline at end of file
diff --git a/pr10.cql b/pr10.cql
new file mode 100644
index 0000000000000000000000000000000000000000..bb4e262d6b40a215124257ed9b5b0a787064e9e9
--- /dev/null
+++ b/pr10.cql
@@ -0,0 +1,5 @@
+.in
+B:1
+
+.out
+B;
\ No newline at end of file
diff --git a/pr2.cql b/pr2.cql
new file mode 100644
index 0000000000000000000000000000000000000000..7411d3213e48552103ca4e9a2e5b7cda555ae982
--- /dev/null
+++ b/pr2.cql
@@ -0,0 +1,6 @@
+.in
+A:3
+
+.out
+filter( \(r) -> r[1] == r[2]);
+map (\(r) -> r[3,1]);
\ No newline at end of file
diff --git a/pr3.cql b/pr3.cql
new file mode 100644
index 0000000000000000000000000000000000000000..5dc784d5397ce53d453b08192bebe247592cdfa1
--- /dev/null
+++ b/pr3.cql
@@ -0,0 +1,9 @@
+.in
+P: 4,
+Q: 4
+
+.out
+P x Q;
+filter(\(r) -> r[1] == r[5]);
+let f = \(a,y) -> if (isEmpty(a)) then y else a;
+map (\(r) -> [r[1], f(r[2], r[6]), f(r[3], r[7]), f(r[4], r[8])]);
\ No newline at end of file
diff --git a/pr4.cql b/pr4.cql
new file mode 100644
index 0000000000000000000000000000000000000000..28e6b58cf18931120cabf181158fe53d7006a72b
--- /dev/null
+++ b/pr4.cql
@@ -0,0 +1,6 @@
+.in
+A:2
+
+.out
+filter (\(r) -> not(isEmpty(r[2]) ) );
+#filter (\(r) -> notEmpty(r[2])  );
\ No newline at end of file
diff --git a/pr5.cql b/pr5.cql
new file mode 100644
index 0000000000000000000000000000000000000000..f34636ec2f22bd74a8f39567878a1dec46232c78
--- /dev/null
+++ b/pr5.cql
@@ -0,0 +1,5 @@
+.in
+A:1
+
+.out
+map{A}(\(r) -> [r[1],"0",r[1]] );
\ No newline at end of file
diff --git a/pr6.cql b/pr6.cql
new file mode 100644
index 0000000000000000000000000000000000000000..3938ff99fa26642d6acd3f3c3d66b6645c4d5d96
--- /dev/null
+++ b/pr6.cql
@@ -0,0 +1,9 @@
+.in
+P:3,
+Q:3,
+R:1,
+S:1,
+T:4
+
+.out
+P x Q x R x S x T;
\ No newline at end of file
diff --git a/pr7.cql b/pr7.cql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pr8.cql b/pr8.cql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pr9.cql b/pr9.cql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/test.sh b/test.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ed78de810bafce71a8a4e9f278d37ff248f13096
--- /dev/null
+++ b/test.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+PROBLEM=$1
+INPUT=$2
+TESTCASES=~/dev/plc/testCases
+EXEC_DIR=~/dev/plc
+cd $TESTCASES/pr$PROBLEM/inputs/input$INPUT
+echo "Expected:"
+EXP=$(cat $TESTCASES/pr$PROBLEM/expected/exp$INPUT.txt)
+cat $TESTCASES/pr$PROBLEM/expected/exp$INPUT.txt
+echo "Got:"
+GOT=$($EXEC_DIR/csvql $EXEC_DIR/pr$PROBLEM.cql)
+$EXEC_DIR/csvql $EXEC_DIR/pr$PROBLEM.cql
+
+if [ "$EXP" = "$GOT" ];
+then
+    echo "Test passed"
+else
+    echo "Test failed"
+fi
\ No newline at end of file
diff --git a/testCases/pr1/.DS_Store b/testCases/pr1/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/.DS_Store differ
diff --git a/testCases/pr1/expected/exp1.txt b/testCases/pr1/expected/exp1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr1/expected/exp1.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr1/expected/exp10.txt b/testCases/pr1/expected/exp10.txt
new file mode 100644
index 0000000000000000000000000000000000000000..08a4252e867e3b9e47679c9416490b1641cbbc39
--- /dev/null
+++ b/testCases/pr1/expected/exp10.txt
@@ -0,0 +1,4 @@
+lemon,lime,mandarin,pomelo
+lemon,lime,orange,grapefruit
+ugli,,mandarin,pomelo
+ugli,,orange,grapefruit
diff --git a/testCases/pr1/expected/exp11.txt b/testCases/pr1/expected/exp11.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cb591b84537699e882441434219b286b7f99419a
--- /dev/null
+++ b/testCases/pr1/expected/exp11.txt
@@ -0,0 +1,4 @@
+lemon,lime,,pomelo
+lemon,lime,orange,grapefruit
+ugli,tangerine,,pomelo
+ugli,tangerine,orange,grapefruit
diff --git a/testCases/pr1/expected/exp12.txt b/testCases/pr1/expected/exp12.txt
new file mode 100644
index 0000000000000000000000000000000000000000..94005cc60614292a735f0f8751f8f5536c69f450
--- /dev/null
+++ b/testCases/pr1/expected/exp12.txt
@@ -0,0 +1,4 @@
+lemon,lime,mandarin,
+lemon,lime,orange,grapefruit
+ugli,tangerine,mandarin,
+ugli,tangerine,orange,grapefruit
diff --git a/testCases/pr1/expected/exp13.txt b/testCases/pr1/expected/exp13.txt
new file mode 100644
index 0000000000000000000000000000000000000000..322f987a9ccd132875c789da57e9a1c488c89004
--- /dev/null
+++ b/testCases/pr1/expected/exp13.txt
@@ -0,0 +1,4 @@
+lemon,lime,mandarin,pomelo
+lemon,lime,orange,grapefruit
+ugli,tangerine,mandarin,pomelo
+ugli,tangerine,orange,grapefruit
diff --git a/testCases/pr1/expected/exp14.txt b/testCases/pr1/expected/exp14.txt
new file mode 100644
index 0000000000000000000000000000000000000000..93e4f3e7534500da675a0211031410525546f450
--- /dev/null
+++ b/testCases/pr1/expected/exp14.txt
@@ -0,0 +1,4 @@
+lemon,lime,mandarin,pomelo
+lemon,lime,orange,pink grapefruit
+ugli,tangerine,mandarin,pomelo
+ugli,tangerine,orange,pink grapefruit
diff --git a/testCases/pr1/expected/exp15.txt b/testCases/pr1/expected/exp15.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2c2320e52bb590f33b8a5e3310b963b3d66016ff
--- /dev/null
+++ b/testCases/pr1/expected/exp15.txt
@@ -0,0 +1,130 @@
+1,2,a,b
+1,2,c,d
+1,2,e,f
+1,2,g,h
+1,2,i,j
+1,2,k,l
+1,2,m,n
+1,2,o,p
+1,2,q,r
+1,2,s,t
+1,2,u,v
+1,2,w,x
+1,2,y,z
+11,12,a,b
+11,12,c,d
+11,12,e,f
+11,12,g,h
+11,12,i,j
+11,12,k,l
+11,12,m,n
+11,12,o,p
+11,12,q,r
+11,12,s,t
+11,12,u,v
+11,12,w,x
+11,12,y,z
+13,14,a,b
+13,14,c,d
+13,14,e,f
+13,14,g,h
+13,14,i,j
+13,14,k,l
+13,14,m,n
+13,14,o,p
+13,14,q,r
+13,14,s,t
+13,14,u,v
+13,14,w,x
+13,14,y,z
+15,16,a,b
+15,16,c,d
+15,16,e,f
+15,16,g,h
+15,16,i,j
+15,16,k,l
+15,16,m,n
+15,16,o,p
+15,16,q,r
+15,16,s,t
+15,16,u,v
+15,16,w,x
+15,16,y,z
+17,18,a,b
+17,18,c,d
+17,18,e,f
+17,18,g,h
+17,18,i,j
+17,18,k,l
+17,18,m,n
+17,18,o,p
+17,18,q,r
+17,18,s,t
+17,18,u,v
+17,18,w,x
+17,18,y,z
+19,20,a,b
+19,20,c,d
+19,20,e,f
+19,20,g,h
+19,20,i,j
+19,20,k,l
+19,20,m,n
+19,20,o,p
+19,20,q,r
+19,20,s,t
+19,20,u,v
+19,20,w,x
+19,20,y,z
+3,4,a,b
+3,4,c,d
+3,4,e,f
+3,4,g,h
+3,4,i,j
+3,4,k,l
+3,4,m,n
+3,4,o,p
+3,4,q,r
+3,4,s,t
+3,4,u,v
+3,4,w,x
+3,4,y,z
+5,6,a,b
+5,6,c,d
+5,6,e,f
+5,6,g,h
+5,6,i,j
+5,6,k,l
+5,6,m,n
+5,6,o,p
+5,6,q,r
+5,6,s,t
+5,6,u,v
+5,6,w,x
+5,6,y,z
+7,8,a,b
+7,8,c,d
+7,8,e,f
+7,8,g,h
+7,8,i,j
+7,8,k,l
+7,8,m,n
+7,8,o,p
+7,8,q,r
+7,8,s,t
+7,8,u,v
+7,8,w,x
+7,8,y,z
+9,10,a,b
+9,10,c,d
+9,10,e,f
+9,10,g,h
+9,10,i,j
+9,10,k,l
+9,10,m,n
+9,10,o,p
+9,10,q,r
+9,10,s,t
+9,10,u,v
+9,10,w,x
+9,10,y,z
diff --git a/testCases/pr1/expected/exp2.txt b/testCases/pr1/expected/exp2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr1/expected/exp2.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr1/expected/exp3.txt b/testCases/pr1/expected/exp3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr1/expected/exp3.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr1/expected/exp4.txt b/testCases/pr1/expected/exp4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d2d40eb92e79db98a0bfdb51cddb6dc3fd08942e
--- /dev/null
+++ b/testCases/pr1/expected/exp4.txt
@@ -0,0 +1 @@
+lemon,lime,orange,grapefruit
diff --git a/testCases/pr1/expected/exp5.txt b/testCases/pr1/expected/exp5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a7df0989cc7648287098c6aa5355fbac0c2cddc0
--- /dev/null
+++ b/testCases/pr1/expected/exp5.txt
@@ -0,0 +1,2 @@
+lemon,lime,orange,grapefruit
+ugli,tangerine,orange,grapefruit
diff --git a/testCases/pr1/expected/exp6.txt b/testCases/pr1/expected/exp6.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a7df0989cc7648287098c6aa5355fbac0c2cddc0
--- /dev/null
+++ b/testCases/pr1/expected/exp6.txt
@@ -0,0 +1,2 @@
+lemon,lime,orange,grapefruit
+ugli,tangerine,orange,grapefruit
diff --git a/testCases/pr1/expected/exp7.txt b/testCases/pr1/expected/exp7.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1ee8c84eac34089ab37161de02df15a402a73f63
--- /dev/null
+++ b/testCases/pr1/expected/exp7.txt
@@ -0,0 +1,2 @@
+lemon,lime,mandarin,pomelo
+lemon,lime,orange,grapefruit
diff --git a/testCases/pr1/expected/exp8.txt b/testCases/pr1/expected/exp8.txt
new file mode 100644
index 0000000000000000000000000000000000000000..322f987a9ccd132875c789da57e9a1c488c89004
--- /dev/null
+++ b/testCases/pr1/expected/exp8.txt
@@ -0,0 +1,4 @@
+lemon,lime,mandarin,pomelo
+lemon,lime,orange,grapefruit
+ugli,tangerine,mandarin,pomelo
+ugli,tangerine,orange,grapefruit
diff --git a/testCases/pr1/expected/exp9.txt b/testCases/pr1/expected/exp9.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a228e1246c7bb4490e110a3f069750bfbb4a95b9
--- /dev/null
+++ b/testCases/pr1/expected/exp9.txt
@@ -0,0 +1,4 @@
+,tangerine,mandarin,pomelo
+,tangerine,orange,grapefruit
+lemon,lime,mandarin,pomelo
+lemon,lime,orange,grapefruit
diff --git a/testCases/pr1/inputs/.DS_Store b/testCases/pr1/inputs/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..351cf4a0952af6a4ac1127fc739c1499ab1f4665
Binary files /dev/null and b/testCases/pr1/inputs/.DS_Store differ
diff --git a/testCases/pr1/inputs/input1/A.csv b/testCases/pr1/inputs/input1/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr1/inputs/input1/B.csv b/testCases/pr1/inputs/input1/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr1/inputs/input10/.DS_Store b/testCases/pr1/inputs/input10/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input10/.DS_Store differ
diff --git a/testCases/pr1/inputs/input10/A.csv b/testCases/pr1/inputs/input10/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..ec32c30e1f3f773d5846b8feb05a561cee2d1c50
--- /dev/null
+++ b/testCases/pr1/inputs/input10/A.csv
@@ -0,0 +1,2 @@
+ugli,
+lemon,lime
diff --git a/testCases/pr1/inputs/input10/B.csv b/testCases/pr1/inputs/input10/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2a20c9b94d09c6f7c2d914af2a251ace2ac94d70
--- /dev/null
+++ b/testCases/pr1/inputs/input10/B.csv
@@ -0,0 +1,2 @@
+orange,grapefruit
+mandarin,pomelo
diff --git a/testCases/pr1/inputs/input11/.DS_Store b/testCases/pr1/inputs/input11/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input11/.DS_Store differ
diff --git a/testCases/pr1/inputs/input11/A.csv b/testCases/pr1/inputs/input11/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6ffa9e97f401a51d230d7f6aad1dbe0167a5fd28
--- /dev/null
+++ b/testCases/pr1/inputs/input11/A.csv
@@ -0,0 +1,2 @@
+ugli,tangerine
+lemon,lime
diff --git a/testCases/pr1/inputs/input11/B.csv b/testCases/pr1/inputs/input11/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..1cdbc609b88ddb52b1300bc43abd584fd2c64bea
--- /dev/null
+++ b/testCases/pr1/inputs/input11/B.csv
@@ -0,0 +1,2 @@
+orange,grapefruit
+,pomelo
diff --git a/testCases/pr1/inputs/input12/.DS_Store b/testCases/pr1/inputs/input12/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input12/.DS_Store differ
diff --git a/testCases/pr1/inputs/input12/A.csv b/testCases/pr1/inputs/input12/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6ffa9e97f401a51d230d7f6aad1dbe0167a5fd28
--- /dev/null
+++ b/testCases/pr1/inputs/input12/A.csv
@@ -0,0 +1,2 @@
+ugli,tangerine
+lemon,lime
diff --git a/testCases/pr1/inputs/input12/B.csv b/testCases/pr1/inputs/input12/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..4fd69c4492172c5e14e34a23ff34545328de110b
--- /dev/null
+++ b/testCases/pr1/inputs/input12/B.csv
@@ -0,0 +1,2 @@
+orange,grapefruit
+mandarin,
diff --git a/testCases/pr1/inputs/input13/.DS_Store b/testCases/pr1/inputs/input13/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input13/.DS_Store differ
diff --git a/testCases/pr1/inputs/input13/A.csv b/testCases/pr1/inputs/input13/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..10d71288093e9bfbfb6f100f8786b63b6090e9b0
--- /dev/null
+++ b/testCases/pr1/inputs/input13/A.csv
@@ -0,0 +1,2 @@
+  ugli,  tangerine
+  lemon,  lime
diff --git a/testCases/pr1/inputs/input13/B.csv b/testCases/pr1/inputs/input13/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..8e67f50ec58f9456554692f3bb641ef850b68ac5
--- /dev/null
+++ b/testCases/pr1/inputs/input13/B.csv
@@ -0,0 +1,2 @@
+orange,  grapefruit
+mandarin,   pomelo
diff --git a/testCases/pr1/inputs/input14/.DS_Store b/testCases/pr1/inputs/input14/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input14/.DS_Store differ
diff --git a/testCases/pr1/inputs/input14/A.csv b/testCases/pr1/inputs/input14/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6ffa9e97f401a51d230d7f6aad1dbe0167a5fd28
--- /dev/null
+++ b/testCases/pr1/inputs/input14/A.csv
@@ -0,0 +1,2 @@
+ugli,tangerine
+lemon,lime
diff --git a/testCases/pr1/inputs/input14/B.csv b/testCases/pr1/inputs/input14/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a6ff585a962fa33ac2c7e10719f38ec8abd3cedd
--- /dev/null
+++ b/testCases/pr1/inputs/input14/B.csv
@@ -0,0 +1,2 @@
+orange,  pink grapefruit
+mandarin, pomelo
diff --git a/testCases/pr1/inputs/input15/.DS_Store b/testCases/pr1/inputs/input15/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input15/.DS_Store differ
diff --git a/testCases/pr1/inputs/input15/A.csv b/testCases/pr1/inputs/input15/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2f7dba80d68ceecce2c3276f1199ea29c30ca93b
--- /dev/null
+++ b/testCases/pr1/inputs/input15/A.csv
@@ -0,0 +1,10 @@
+1,2
+3,4
+5,6
+7,8
+9,10
+11,12
+13,14
+15,16
+17,18
+19,20
diff --git a/testCases/pr1/inputs/input15/B.csv b/testCases/pr1/inputs/input15/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..719cd0fe90bd0c446d4e9242516bd65dbdd9ad61
--- /dev/null
+++ b/testCases/pr1/inputs/input15/B.csv
@@ -0,0 +1,13 @@
+a,b
+c,d
+e,f
+g,h
+i,j
+k,l
+m,n
+o,p
+q,r
+s,t
+u,v
+w,x
+y,z
diff --git a/testCases/pr1/inputs/input2/A.csv b/testCases/pr1/inputs/input2/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..d72f2010a822172de15795be5808b26d750dba36
--- /dev/null
+++ b/testCases/pr1/inputs/input2/A.csv
@@ -0,0 +1 @@
+1,2
diff --git a/testCases/pr1/inputs/input2/B.csv b/testCases/pr1/inputs/input2/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr1/inputs/input3/A.csv b/testCases/pr1/inputs/input3/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr1/inputs/input3/B.csv b/testCases/pr1/inputs/input3/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..d72f2010a822172de15795be5808b26d750dba36
--- /dev/null
+++ b/testCases/pr1/inputs/input3/B.csv
@@ -0,0 +1 @@
+1,2
diff --git a/testCases/pr1/inputs/input4/A.csv b/testCases/pr1/inputs/input4/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..cca5a16a6dee25629ad447d3bc9826cafeb61968
--- /dev/null
+++ b/testCases/pr1/inputs/input4/A.csv
@@ -0,0 +1 @@
+lemon,lime
diff --git a/testCases/pr1/inputs/input4/B.csv b/testCases/pr1/inputs/input4/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..7972e0c08b6831bf32994b1f75e13801d08a3d61
--- /dev/null
+++ b/testCases/pr1/inputs/input4/B.csv
@@ -0,0 +1 @@
+orange,grapefruit
diff --git a/testCases/pr1/inputs/input5/A.csv b/testCases/pr1/inputs/input5/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..961e8800bcda93d89ff19d89de9bc37e6f334503
--- /dev/null
+++ b/testCases/pr1/inputs/input5/A.csv
@@ -0,0 +1,2 @@
+lemon,lime
+ugli,tangerine
diff --git a/testCases/pr1/inputs/input5/B.csv b/testCases/pr1/inputs/input5/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..7972e0c08b6831bf32994b1f75e13801d08a3d61
--- /dev/null
+++ b/testCases/pr1/inputs/input5/B.csv
@@ -0,0 +1 @@
+orange,grapefruit
diff --git a/testCases/pr1/inputs/input6/A.csv b/testCases/pr1/inputs/input6/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6ffa9e97f401a51d230d7f6aad1dbe0167a5fd28
--- /dev/null
+++ b/testCases/pr1/inputs/input6/A.csv
@@ -0,0 +1,2 @@
+ugli,tangerine
+lemon,lime
diff --git a/testCases/pr1/inputs/input6/B.csv b/testCases/pr1/inputs/input6/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..7972e0c08b6831bf32994b1f75e13801d08a3d61
--- /dev/null
+++ b/testCases/pr1/inputs/input6/B.csv
@@ -0,0 +1 @@
+orange,grapefruit
diff --git a/testCases/pr1/inputs/input7/.DS_Store b/testCases/pr1/inputs/input7/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input7/.DS_Store differ
diff --git a/testCases/pr1/inputs/input7/A.csv b/testCases/pr1/inputs/input7/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..cca5a16a6dee25629ad447d3bc9826cafeb61968
--- /dev/null
+++ b/testCases/pr1/inputs/input7/A.csv
@@ -0,0 +1 @@
+lemon,lime
diff --git a/testCases/pr1/inputs/input7/B.csv b/testCases/pr1/inputs/input7/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2a20c9b94d09c6f7c2d914af2a251ace2ac94d70
--- /dev/null
+++ b/testCases/pr1/inputs/input7/B.csv
@@ -0,0 +1,2 @@
+orange,grapefruit
+mandarin,pomelo
diff --git a/testCases/pr1/inputs/input8/.DS_Store b/testCases/pr1/inputs/input8/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input8/.DS_Store differ
diff --git a/testCases/pr1/inputs/input8/A.csv b/testCases/pr1/inputs/input8/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6ffa9e97f401a51d230d7f6aad1dbe0167a5fd28
--- /dev/null
+++ b/testCases/pr1/inputs/input8/A.csv
@@ -0,0 +1,2 @@
+ugli,tangerine
+lemon,lime
diff --git a/testCases/pr1/inputs/input8/B.csv b/testCases/pr1/inputs/input8/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2a20c9b94d09c6f7c2d914af2a251ace2ac94d70
--- /dev/null
+++ b/testCases/pr1/inputs/input8/B.csv
@@ -0,0 +1,2 @@
+orange,grapefruit
+mandarin,pomelo
diff --git a/testCases/pr1/inputs/input9/.DS_Store b/testCases/pr1/inputs/input9/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr1/inputs/input9/.DS_Store differ
diff --git a/testCases/pr1/inputs/input9/A.csv b/testCases/pr1/inputs/input9/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..94afb3c1b9b16e20f3de24e9ae28932efb365919
--- /dev/null
+++ b/testCases/pr1/inputs/input9/A.csv
@@ -0,0 +1,2 @@
+,tangerine
+lemon,lime
diff --git a/testCases/pr1/inputs/input9/B.csv b/testCases/pr1/inputs/input9/B.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2a20c9b94d09c6f7c2d914af2a251ace2ac94d70
--- /dev/null
+++ b/testCases/pr1/inputs/input9/B.csv
@@ -0,0 +1,2 @@
+orange,grapefruit
+mandarin,pomelo
diff --git a/testCases/pr10/inputs/input1/S.csv b/testCases/pr10/inputs/input1/S.csv
new file mode 100644
index 0000000000000000000000000000000000000000..20dc646907076b4da23d9e25f70a40e167e8c3fc
--- /dev/null
+++ b/testCases/pr10/inputs/input1/S.csv
@@ -0,0 +1,3 @@
+A, A, B
+A, B, B
+A, B, C
\ No newline at end of file
diff --git a/testCases/pr10/inputs/input1/T.csv b/testCases/pr10/inputs/input1/T.csv
new file mode 100644
index 0000000000000000000000000000000000000000..de3d460ca3342531c5891a4382dab4338dfc26f5
--- /dev/null
+++ b/testCases/pr10/inputs/input1/T.csv
@@ -0,0 +1,4 @@
+A, A, B
+A, B, B
+A, B, C
+C, D,D
\ No newline at end of file
diff --git a/testCases/pr10/inputs/input2/S.csv b/testCases/pr10/inputs/input2/S.csv
new file mode 100644
index 0000000000000000000000000000000000000000..aa6e1538fb1840e6f5555982ddda848f86155547
--- /dev/null
+++ b/testCases/pr10/inputs/input2/S.csv
@@ -0,0 +1,3 @@
+A, B, B
+B, C,D
+,,
diff --git a/testCases/pr10/inputs/input2/T.csv b/testCases/pr10/inputs/input2/T.csv
new file mode 100644
index 0000000000000000000000000000000000000000..66acb064ad02cc2f2c4ddad4c743f9ad5db14269
--- /dev/null
+++ b/testCases/pr10/inputs/input2/T.csv
@@ -0,0 +1,3 @@
+B, B, B
+B, C,D
+A, ,
diff --git a/testCases/pr2/.DS_Store b/testCases/pr2/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr2/.DS_Store differ
diff --git a/testCases/pr2/expected/exp1.txt b/testCases/pr2/expected/exp1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr2/expected/exp1.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr2/expected/exp10.txt b/testCases/pr2/expected/exp10.txt
new file mode 100644
index 0000000000000000000000000000000000000000..229b264e43edf084c326e401ec1edf41eb1633c9
--- /dev/null
+++ b/testCases/pr2/expected/exp10.txt
@@ -0,0 +1,18 @@
+,
+,1
+,2
+1,
+1,1
+1,2
+2,
+2,1
+2,2
+3,
+3,1
+3,2
+4,
+4,1
+4,2
+5,
+5,1
+5,2
diff --git a/testCases/pr2/expected/exp2.txt b/testCases/pr2/expected/exp2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr2/expected/exp2.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr2/expected/exp3.txt b/testCases/pr2/expected/exp3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dffb053b86c3e5e2da48c235bcaad32591ed0c5a
--- /dev/null
+++ b/testCases/pr2/expected/exp3.txt
@@ -0,0 +1 @@
+oof,yeah
diff --git a/testCases/pr2/expected/exp4.txt b/testCases/pr2/expected/exp4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr2/expected/exp4.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr2/expected/exp5.txt b/testCases/pr2/expected/exp5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr2/expected/exp5.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr2/expected/exp6.txt b/testCases/pr2/expected/exp6.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7e7b0580620378c2b8691d3a42e1aa942de743eb
--- /dev/null
+++ b/testCases/pr2/expected/exp6.txt
@@ -0,0 +1 @@
+,yeah
diff --git a/testCases/pr2/expected/exp7.txt b/testCases/pr2/expected/exp7.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5f263f539fb93da457adce30bd2160dc18e10323
--- /dev/null
+++ b/testCases/pr2/expected/exp7.txt
@@ -0,0 +1 @@
+yeah,
diff --git a/testCases/pr2/expected/exp8.txt b/testCases/pr2/expected/exp8.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c63713e021c017a40d70fd39e3c0a08db6bb1f2a
--- /dev/null
+++ b/testCases/pr2/expected/exp8.txt
@@ -0,0 +1 @@
+yeah,yeah
diff --git a/testCases/pr2/expected/exp9.txt b/testCases/pr2/expected/exp9.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4427599865c7eebf947e33d2733b0295e15e3948
--- /dev/null
+++ b/testCases/pr2/expected/exp9.txt
@@ -0,0 +1,3 @@
+03,blah
+04,nope
+05,yeah
diff --git a/testCases/pr2/inputs/.DS_Store b/testCases/pr2/inputs/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..679d44897487c79b81c689aa618fbf488630d9c0
Binary files /dev/null and b/testCases/pr2/inputs/.DS_Store differ
diff --git a/testCases/pr2/inputs/input1/A.csv b/testCases/pr2/inputs/input1/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr2/inputs/input10/A.csv b/testCases/pr2/inputs/input10/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..69d9e09520e7466c46dd4d613e81190563a1bf35
--- /dev/null
+++ b/testCases/pr2/inputs/input10/A.csv
@@ -0,0 +1,21 @@
+1,2,1
+1,2,2
+1,2,3
+1,1,1
+1,1,2
+1,1,3
+1,1,4
+1,1,5
+1,1,
+2,2,1
+2,2,2
+2,2,3
+2,2,4
+2,2,5
+2,2,
+,,1
+,,2
+,,3
+,,4
+,,5
+,,
diff --git a/testCases/pr2/inputs/input2/A.csv b/testCases/pr2/inputs/input2/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..1157b199bd5d6686eaeb01efe73bbfd9e53b7cf0
--- /dev/null
+++ b/testCases/pr2/inputs/input2/A.csv
@@ -0,0 +1 @@
+yeah,nope,oof
diff --git a/testCases/pr2/inputs/input3/A.csv b/testCases/pr2/inputs/input3/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5d241c0f7a7e59d194837fb6e8980b198ec5aed7
--- /dev/null
+++ b/testCases/pr2/inputs/input3/A.csv
@@ -0,0 +1 @@
+yeah,yeah,oof
diff --git a/testCases/pr2/inputs/input4/A.csv b/testCases/pr2/inputs/input4/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5c07200256b5c26bb5852412472545f557773493
--- /dev/null
+++ b/testCases/pr2/inputs/input4/A.csv
@@ -0,0 +1 @@
+,yeah,oof
diff --git a/testCases/pr2/inputs/input5/A.csv b/testCases/pr2/inputs/input5/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..73c258eb34f156879c47525f86adda2901e5bade
--- /dev/null
+++ b/testCases/pr2/inputs/input5/A.csv
@@ -0,0 +1 @@
+yeah,,oof
diff --git a/testCases/pr2/inputs/input6/A.csv b/testCases/pr2/inputs/input6/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..8e60242fd23667aa3fc5b92c738147126fe34f9a
--- /dev/null
+++ b/testCases/pr2/inputs/input6/A.csv
@@ -0,0 +1 @@
+yeah,yeah,
diff --git a/testCases/pr2/inputs/input7/A.csv b/testCases/pr2/inputs/input7/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..68eacf10eacfc6074290d381e20b9d18e13d1944
--- /dev/null
+++ b/testCases/pr2/inputs/input7/A.csv
@@ -0,0 +1 @@
+,,yeah
diff --git a/testCases/pr2/inputs/input8/A.csv b/testCases/pr2/inputs/input8/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..48c47f4b1123c83945cadbdef043e967838a887e
--- /dev/null
+++ b/testCases/pr2/inputs/input8/A.csv
@@ -0,0 +1,2 @@
+yeah,yeah,yeah
+nope,yeah,nope
diff --git a/testCases/pr2/inputs/input9/A.csv b/testCases/pr2/inputs/input9/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6dd62ab66d6eb74ab55c47aae876ec38aa9394f1
--- /dev/null
+++ b/testCases/pr2/inputs/input9/A.csv
@@ -0,0 +1,5 @@
+yeah,yeah,05
+nope,nope,04
+blah,blah,03
+blah,nope,02
+blah,yeah,01
diff --git a/testCases/pr3/.DS_Store b/testCases/pr3/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr3/.DS_Store differ
diff --git a/testCases/pr3/expected/exp1.txt b/testCases/pr3/expected/exp1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr3/expected/exp1.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr3/expected/exp10.txt b/testCases/pr3/expected/exp10.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8d98e3617c8bd53e0d39ef4ef5d2db77b9e00f68
--- /dev/null
+++ b/testCases/pr3/expected/exp10.txt
@@ -0,0 +1,18 @@
+k1,1,2,3
+k1,1,2,3
+k1,1,2,c
+k1,1,2,f
+k1,1,b,3
+k1,1,e,3
+k1,a,2,3
+k1,d,2,3
+k2,4,5,6
+k2,4,5,6
+k2,4,b,c
+k2,4,e,f
+k2,a,5,c
+k2,a,b,6
+k2,d,5,f
+k2,d,e,6
+k3,7,8,9
+k3,g,h,i
diff --git a/testCases/pr3/expected/exp2.txt b/testCases/pr3/expected/exp2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr3/expected/exp2.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr3/expected/exp3.txt b/testCases/pr3/expected/exp3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr3/expected/exp3.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr3/expected/exp4.txt b/testCases/pr3/expected/exp4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr3/expected/exp4.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr3/expected/exp5.txt b/testCases/pr3/expected/exp5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..54041bb26c05d7814661ec83554c4757ec392544
--- /dev/null
+++ b/testCases/pr3/expected/exp5.txt
@@ -0,0 +1 @@
+2,6,7,8
diff --git a/testCases/pr3/expected/exp6.txt b/testCases/pr3/expected/exp6.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0adb4e951bb254c24f895f9c4e6722d0b207086b
--- /dev/null
+++ b/testCases/pr3/expected/exp6.txt
@@ -0,0 +1 @@
+2,3,4,5
diff --git a/testCases/pr3/expected/exp7.txt b/testCases/pr3/expected/exp7.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4b13925f05f634c6a19f2ee4aca37e5a9379b068
--- /dev/null
+++ b/testCases/pr3/expected/exp7.txt
@@ -0,0 +1 @@
+2,3,3,5
diff --git a/testCases/pr3/expected/exp8.txt b/testCases/pr3/expected/exp8.txt
new file mode 100644
index 0000000000000000000000000000000000000000..990768e1268921c9296fb68cdd543fbe70651446
--- /dev/null
+++ b/testCases/pr3/expected/exp8.txt
@@ -0,0 +1 @@
+2,,,
diff --git a/testCases/pr3/expected/exp9.txt b/testCases/pr3/expected/exp9.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4fb934180c0647f63b957d43e302f6420efbab0f
--- /dev/null
+++ b/testCases/pr3/expected/exp9.txt
@@ -0,0 +1,3 @@
+key1,octane,fennec,breakout
+key3,breakout,scarab,zippy
+key3,peregrine,breakout,zippy
diff --git a/testCases/pr3/inputs/.DS_Store b/testCases/pr3/inputs/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr3/inputs/.DS_Store differ
diff --git a/testCases/pr3/inputs/input1/P.csv b/testCases/pr3/inputs/input1/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr3/inputs/input1/Q.csv b/testCases/pr3/inputs/input1/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr3/inputs/input10/P.csv b/testCases/pr3/inputs/input10/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a02355aac5f1ae7432c2c9cb63fe90317cb896e1
--- /dev/null
+++ b/testCases/pr3/inputs/input10/P.csv
@@ -0,0 +1,10 @@
+k1,1,2,3
+k1,,2,3
+k1,1,,3
+k1,1,2,
+k2,4,5,6
+k2,4,,
+k2,,5,
+k2,,,6
+k3,7,8,9
+k3,,,
diff --git a/testCases/pr3/inputs/input10/Q.csv b/testCases/pr3/inputs/input10/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..1de48a50cb7a26aebf94e35501a66d8c88d46014
--- /dev/null
+++ b/testCases/pr3/inputs/input10/Q.csv
@@ -0,0 +1,5 @@
+k1,a,b,c
+k1,d,e,f
+k2,a,b,c
+k2,d,e,f
+k3,g,h,i
diff --git a/testCases/pr3/inputs/input2/P.csv b/testCases/pr3/inputs/input2/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..89caddad1cac2515b3eb11058c239ea4ac2e5d50
--- /dev/null
+++ b/testCases/pr3/inputs/input2/P.csv
@@ -0,0 +1 @@
+5,6,7,8
diff --git a/testCases/pr3/inputs/input2/Q.csv b/testCases/pr3/inputs/input2/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr3/inputs/input3/P.csv b/testCases/pr3/inputs/input3/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr3/inputs/input3/Q.csv b/testCases/pr3/inputs/input3/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..89caddad1cac2515b3eb11058c239ea4ac2e5d50
--- /dev/null
+++ b/testCases/pr3/inputs/input3/Q.csv
@@ -0,0 +1 @@
+5,6,7,8
diff --git a/testCases/pr3/inputs/input4/P.csv b/testCases/pr3/inputs/input4/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..89caddad1cac2515b3eb11058c239ea4ac2e5d50
--- /dev/null
+++ b/testCases/pr3/inputs/input4/P.csv
@@ -0,0 +1 @@
+5,6,7,8
diff --git a/testCases/pr3/inputs/input4/Q.csv b/testCases/pr3/inputs/input4/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0adb4e951bb254c24f895f9c4e6722d0b207086b
--- /dev/null
+++ b/testCases/pr3/inputs/input4/Q.csv
@@ -0,0 +1 @@
+2,3,4,5
diff --git a/testCases/pr3/inputs/input5/P.csv b/testCases/pr3/inputs/input5/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..54041bb26c05d7814661ec83554c4757ec392544
--- /dev/null
+++ b/testCases/pr3/inputs/input5/P.csv
@@ -0,0 +1 @@
+2,6,7,8
diff --git a/testCases/pr3/inputs/input5/Q.csv b/testCases/pr3/inputs/input5/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0adb4e951bb254c24f895f9c4e6722d0b207086b
--- /dev/null
+++ b/testCases/pr3/inputs/input5/Q.csv
@@ -0,0 +1 @@
+2,3,4,5
diff --git a/testCases/pr3/inputs/input6/P.csv b/testCases/pr3/inputs/input6/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..990768e1268921c9296fb68cdd543fbe70651446
--- /dev/null
+++ b/testCases/pr3/inputs/input6/P.csv
@@ -0,0 +1 @@
+2,,,
diff --git a/testCases/pr3/inputs/input6/Q.csv b/testCases/pr3/inputs/input6/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0adb4e951bb254c24f895f9c4e6722d0b207086b
--- /dev/null
+++ b/testCases/pr3/inputs/input6/Q.csv
@@ -0,0 +1 @@
+2,3,4,5
diff --git a/testCases/pr3/inputs/input7/P.csv b/testCases/pr3/inputs/input7/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..90579dfa0287339e0229e73a31380140ad9264d6
--- /dev/null
+++ b/testCases/pr3/inputs/input7/P.csv
@@ -0,0 +1 @@
+2,,3,
diff --git a/testCases/pr3/inputs/input7/Q.csv b/testCases/pr3/inputs/input7/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0adb4e951bb254c24f895f9c4e6722d0b207086b
--- /dev/null
+++ b/testCases/pr3/inputs/input7/Q.csv
@@ -0,0 +1 @@
+2,3,4,5
diff --git a/testCases/pr3/inputs/input8/P.csv b/testCases/pr3/inputs/input8/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..990768e1268921c9296fb68cdd543fbe70651446
--- /dev/null
+++ b/testCases/pr3/inputs/input8/P.csv
@@ -0,0 +1 @@
+2,,,
diff --git a/testCases/pr3/inputs/input8/Q.csv b/testCases/pr3/inputs/input8/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..990768e1268921c9296fb68cdd543fbe70651446
--- /dev/null
+++ b/testCases/pr3/inputs/input8/Q.csv
@@ -0,0 +1 @@
+2,,,
diff --git a/testCases/pr3/inputs/input9/P.csv b/testCases/pr3/inputs/input9/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..46354b06fe983deedf4dfcdd6daec5354c999132
--- /dev/null
+++ b/testCases/pr3/inputs/input9/P.csv
@@ -0,0 +1,3 @@
+key3,breakout,,
+key3,,breakout,
+key1,,,breakout
diff --git a/testCases/pr3/inputs/input9/Q.csv b/testCases/pr3/inputs/input9/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..17a6b9b945e09284034b87bbb713e0c9ceb443a1
--- /dev/null
+++ b/testCases/pr3/inputs/input9/Q.csv
@@ -0,0 +1,3 @@
+key1,octane,fennec,grog
+key2,marauder,gizmo,dominus
+key3,peregrine,scarab,zippy
diff --git a/testCases/pr4/.DS_Store b/testCases/pr4/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr4/.DS_Store differ
diff --git a/testCases/pr4/expected/.DS_Store b/testCases/pr4/expected/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr4/expected/.DS_Store differ
diff --git a/testCases/pr4/expected/exp1.txt b/testCases/pr4/expected/exp1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr4/expected/exp1.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr4/expected/exp2.txt b/testCases/pr4/expected/exp2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr4/expected/exp2.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr4/expected/exp3.txt b/testCases/pr4/expected/exp3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr4/expected/exp3.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr4/expected/exp4.txt b/testCases/pr4/expected/exp4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5d125900c5d4dba0bebcecaf379d032b654170f7
--- /dev/null
+++ b/testCases/pr4/expected/exp4.txt
@@ -0,0 +1 @@
+,purple
diff --git a/testCases/pr4/expected/exp5.txt b/testCases/pr4/expected/exp5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0b28107fbb77590f2b78a001ca02f8b924926bca
--- /dev/null
+++ b/testCases/pr4/expected/exp5.txt
@@ -0,0 +1 @@
+octane,crimson
diff --git a/testCases/pr4/expected/exp6.txt b/testCases/pr4/expected/exp6.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0b28107fbb77590f2b78a001ca02f8b924926bca
--- /dev/null
+++ b/testCases/pr4/expected/exp6.txt
@@ -0,0 +1 @@
+octane,crimson
diff --git a/testCases/pr4/expected/exp7.txt b/testCases/pr4/expected/exp7.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e72e52e529145cd76f70e4ad3257fb560497fcd8
--- /dev/null
+++ b/testCases/pr4/expected/exp7.txt
@@ -0,0 +1,3 @@
+dominus,black
+fennec,purple
+octane,crimson
diff --git a/testCases/pr4/expected/exp8.txt b/testCases/pr4/expected/exp8.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4af3862a877f57cf3ea46f760a68dff04efd3e4e
--- /dev/null
+++ b/testCases/pr4/expected/exp8.txt
@@ -0,0 +1,11 @@
+animus,orange
+animus,saffron
+breakout,green
+dominus,black
+dominus,cobalt
+dominus,sky blue
+fennec,cobalt
+fennec,purple
+octane,burnt sienna
+octane,crimson
+octane,titanium white
diff --git a/testCases/pr4/inputs/.DS_Store b/testCases/pr4/inputs/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr4/inputs/.DS_Store differ
diff --git a/testCases/pr4/inputs/input1/A.csv b/testCases/pr4/inputs/input1/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr4/inputs/input2/A.csv b/testCases/pr4/inputs/input2/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..7edb2fa5bce570555aa370748715597aee983a1b
--- /dev/null
+++ b/testCases/pr4/inputs/input2/A.csv
@@ -0,0 +1 @@
+,
diff --git a/testCases/pr4/inputs/input3/A.csv b/testCases/pr4/inputs/input3/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..7d5a31a7f265f26af85ea2eebad83857acd6de28
--- /dev/null
+++ b/testCases/pr4/inputs/input3/A.csv
@@ -0,0 +1 @@
+octane,
diff --git a/testCases/pr4/inputs/input4/A.csv b/testCases/pr4/inputs/input4/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5d125900c5d4dba0bebcecaf379d032b654170f7
--- /dev/null
+++ b/testCases/pr4/inputs/input4/A.csv
@@ -0,0 +1 @@
+,purple
diff --git a/testCases/pr4/inputs/input5/A.csv b/testCases/pr4/inputs/input5/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0b28107fbb77590f2b78a001ca02f8b924926bca
--- /dev/null
+++ b/testCases/pr4/inputs/input5/A.csv
@@ -0,0 +1 @@
+octane,crimson
diff --git a/testCases/pr4/inputs/input6/A.csv b/testCases/pr4/inputs/input6/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..b6f54abf7974697619cc10b3812334ef6f39f34e
--- /dev/null
+++ b/testCases/pr4/inputs/input6/A.csv
@@ -0,0 +1,2 @@
+octane,crimson
+fennec,
diff --git a/testCases/pr4/inputs/input7/A.csv b/testCases/pr4/inputs/input7/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..23926a489bcc95797a64cd6660dac05fe65ac230
--- /dev/null
+++ b/testCases/pr4/inputs/input7/A.csv
@@ -0,0 +1,3 @@
+octane,crimson
+fennec,purple
+dominus,black
diff --git a/testCases/pr4/inputs/input8/A.csv b/testCases/pr4/inputs/input8/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6bff415648c9dca04803b3d998e4e6ecf91da370
--- /dev/null
+++ b/testCases/pr4/inputs/input8/A.csv
@@ -0,0 +1,15 @@
+octane,crimson
+fennec,purple
+dominus,black
+fennec,
+dominus,
+octane,burnt sienna
+octane,titanium white
+dominus,sky blue
+dominus,cobalt
+fennec,cobalt
+breakout,
+breakout,green
+animus,saffron
+animus,
+animus,orange
\ No newline at end of file
diff --git a/testCases/pr5/.DS_Store b/testCases/pr5/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr5/.DS_Store differ
diff --git a/testCases/pr5/expected/exp1.txt b/testCases/pr5/expected/exp1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr5/expected/exp1.txt
@@ -0,0 +1 @@
+
diff --git a/testCases/pr5/expected/exp2.txt b/testCases/pr5/expected/exp2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4b561c8d67e9e39d54adc1f2967a1e97e6914e3b
--- /dev/null
+++ b/testCases/pr5/expected/exp2.txt
@@ -0,0 +1 @@
+,0,
diff --git a/testCases/pr5/expected/exp3.txt b/testCases/pr5/expected/exp3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6dbe09bc461cea0c7b5272214bc7d756457a5207
--- /dev/null
+++ b/testCases/pr5/expected/exp3.txt
@@ -0,0 +1 @@
+banana,0,banana
diff --git a/testCases/pr5/expected/exp4.txt b/testCases/pr5/expected/exp4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..210f8ef736cf7cc395d92eddc5c1028f22da28eb
--- /dev/null
+++ b/testCases/pr5/expected/exp4.txt
@@ -0,0 +1,2 @@
+banana,0,banana
+banana,0,banana
diff --git a/testCases/pr5/expected/exp5.txt b/testCases/pr5/expected/exp5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9865e3dadd98ea3feea13d0780fdbd72ff3167ee
--- /dev/null
+++ b/testCases/pr5/expected/exp5.txt
@@ -0,0 +1,3 @@
+,0,
+banana,0,banana
+banana,0,banana
diff --git a/testCases/pr5/expected/exp6.txt b/testCases/pr5/expected/exp6.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e416502ed560cf1d7e37e5377d2afa1b2e6ae195
--- /dev/null
+++ b/testCases/pr5/expected/exp6.txt
@@ -0,0 +1,6 @@
+apple,0,apple
+apple,0,apple
+apple,0,apple
+banana,0,banana
+banana,0,banana
+orange,0,orange
diff --git a/testCases/pr5/expected/exp7.txt b/testCases/pr5/expected/exp7.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9126a556a167df9fef63c2f05e72a6fe8579ca85
--- /dev/null
+++ b/testCases/pr5/expected/exp7.txt
@@ -0,0 +1,52 @@
+AA,0,AA
+AB,0,AB
+AC,0,AC
+AD,0,AD
+AE,0,AE
+AF,0,AF
+AG,0,AG
+AH,0,AH
+AI,0,AI
+AJ,0,AJ
+AK,0,AK
+AL,0,AL
+AM,0,AM
+AN,0,AN
+AO,0,AO
+AP,0,AP
+AQ,0,AQ
+AR,0,AR
+AS,0,AS
+AT,0,AT
+AU,0,AU
+AV,0,AV
+AW,0,AW
+AX,0,AX
+AY,0,AY
+AZ,0,AZ
+BA,0,BA
+BB,0,BB
+BC,0,BC
+BD,0,BD
+BE,0,BE
+BF,0,BF
+BG,0,BG
+BH,0,BH
+BI,0,BI
+BJ,0,BJ
+BK,0,BK
+BL,0,BL
+BM,0,BM
+BN,0,BN
+BO,0,BO
+BP,0,BP
+BQ,0,BQ
+BR,0,BR
+BS,0,BS
+BT,0,BT
+BU,0,BU
+BV,0,BV
+BW,0,BW
+BX,0,BX
+BY,0,BY
+BZ,0,BZ
diff --git a/testCases/pr5/inputs/.DS_Store b/testCases/pr5/inputs/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/testCases/pr5/inputs/.DS_Store differ
diff --git a/testCases/pr5/inputs/input1/A.csv b/testCases/pr5/inputs/input1/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr5/inputs/input2/A.csv b/testCases/pr5/inputs/input2/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/testCases/pr5/inputs/input2/A.csv
@@ -0,0 +1 @@
+
diff --git a/testCases/pr5/inputs/input3/A.csv b/testCases/pr5/inputs/input3/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..637a09b86af61897fb72f26bfb874f2ae726db82
--- /dev/null
+++ b/testCases/pr5/inputs/input3/A.csv
@@ -0,0 +1 @@
+banana
diff --git a/testCases/pr5/inputs/input4/A.csv b/testCases/pr5/inputs/input4/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..d1045c89ea05baea6b74d18b43b62c296943feea
--- /dev/null
+++ b/testCases/pr5/inputs/input4/A.csv
@@ -0,0 +1,2 @@
+banana
+banana
diff --git a/testCases/pr5/inputs/input5/A.csv b/testCases/pr5/inputs/input5/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..8b9e437beb578e66e7202c2564e61c3fd513ff87
--- /dev/null
+++ b/testCases/pr5/inputs/input5/A.csv
@@ -0,0 +1,3 @@
+banana
+
+banana
diff --git a/testCases/pr5/inputs/input6/A.csv b/testCases/pr5/inputs/input6/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e21ebdf294884b316248f3139b6fa73309d64aba
--- /dev/null
+++ b/testCases/pr5/inputs/input6/A.csv
@@ -0,0 +1,6 @@
+banana
+banana
+apple
+apple
+apple
+orange
diff --git a/testCases/pr5/inputs/input7/A.csv b/testCases/pr5/inputs/input7/A.csv
new file mode 100644
index 0000000000000000000000000000000000000000..716875e1d581c350c86634398c3e9b97626e2c0a
--- /dev/null
+++ b/testCases/pr5/inputs/input7/A.csv
@@ -0,0 +1,52 @@
+AA
+AB
+AC
+AD
+AE
+AF
+AG
+AH
+AI
+AJ
+AK
+AL
+AM
+AN
+AO
+AP
+AQ
+AR
+AS
+AT
+AU
+AV
+AW
+AX
+AY
+AZ
+BA
+BB
+BC
+BD
+BE
+BF
+BG
+BH
+BI
+BJ
+BK
+BL
+BM
+BN
+BO
+BP
+BQ
+BR
+BS
+BT
+BU
+BV
+BW
+BX
+BY
+BZ
diff --git a/testCases/pr6/expected/exp1.txt b/testCases/pr6/expected/exp1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8591cf3e56857bb08d746bbb6160b21c4164074e
--- /dev/null
+++ b/testCases/pr6/expected/exp1.txt
@@ -0,0 +1,6 @@
+1,2,3,1,2,3,10,20,1,2,3,4
+1,2,3,4,5,6,10,20,1,2,3,4
+4,5,6,1,2,3,10,20,1,2,3,4
+4,5,6,4,5,6,10,20,1,2,3,4
+7,8,9,1,2,3,10,20,1,2,3,4
+7,8,9,4,5,6,10,20,1,2,3,4
diff --git a/testCases/pr6/inputs/input1/P.csv b/testCases/pr6/inputs/input1/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..53aa2da87b94aa5d9c8eff8c89716e6c2365025b
--- /dev/null
+++ b/testCases/pr6/inputs/input1/P.csv
@@ -0,0 +1,3 @@
+1 , 2 , 3
+4 , 5 , 6
+7 , 8 , 9
\ No newline at end of file
diff --git a/testCases/pr6/inputs/input1/Q.csv b/testCases/pr6/inputs/input1/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..3bbbf7b900b790e706cbe84d6a31bb3ffa946ff8
--- /dev/null
+++ b/testCases/pr6/inputs/input1/Q.csv
@@ -0,0 +1,2 @@
+1 , 2 , 3
+4 , 5 , 6
\ No newline at end of file
diff --git a/testCases/pr6/inputs/input1/R.csv b/testCases/pr6/inputs/input1/R.csv
new file mode 100644
index 0000000000000000000000000000000000000000..cb5746e60b593218315bf771eded620422c5540d
--- /dev/null
+++ b/testCases/pr6/inputs/input1/R.csv
@@ -0,0 +1 @@
+10 
\ No newline at end of file
diff --git a/testCases/pr6/inputs/input1/S.csv b/testCases/pr6/inputs/input1/S.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2edeafb09db0093bae6ff060e2dcd2166f5c9387
--- /dev/null
+++ b/testCases/pr6/inputs/input1/S.csv
@@ -0,0 +1 @@
+20
\ No newline at end of file
diff --git a/testCases/pr6/inputs/input1/T.csv b/testCases/pr6/inputs/input1/T.csv
new file mode 100644
index 0000000000000000000000000000000000000000..53b846bb4084f2e0531766cfdccc42de8c0acc8e
--- /dev/null
+++ b/testCases/pr6/inputs/input1/T.csv
@@ -0,0 +1 @@
+1 , 2 , 3 , 4
\ No newline at end of file
diff --git a/testCases/pr7/inputs/input1/F.csv b/testCases/pr7/inputs/input1/F.csv
new file mode 100644
index 0000000000000000000000000000000000000000..48a3f006f2faa44da42215dcd8a112d212ec7c88
--- /dev/null
+++ b/testCases/pr7/inputs/input1/F.csv
@@ -0,0 +1,4 @@
+a,b, c
+d,e ,
+g,h, i
+j ,k, l
\ No newline at end of file
diff --git a/testCases/pr7/inputs/input1/G.csv b/testCases/pr7/inputs/input1/G.csv
new file mode 100644
index 0000000000000000000000000000000000000000..faff72a8cf5a10394912e175646b616da192e629
--- /dev/null
+++ b/testCases/pr7/inputs/input1/G.csv
@@ -0,0 +1,5 @@
+b,c ,d
+b,c ,e
+h, , i
+k,l ,
+k,l , l
\ No newline at end of file
diff --git a/testCases/pr8/expected/exp1.txt b/testCases/pr8/expected/exp1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/testCases/pr8/inputs/input1/P.csv b/testCases/pr8/inputs/input1/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6db62f69ef503b72b34f21b28ecf426626911a09
--- /dev/null
+++ b/testCases/pr8/inputs/input1/P.csv
@@ -0,0 +1,4 @@
+, 4 , 5 , 1
+, 2 , , 2
+2 , 1 , 7 , 3
+, 1 , 8 , 4
\ No newline at end of file
diff --git a/testCases/pr8/inputs/input1/Q.csv b/testCases/pr8/inputs/input1/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..11f80d752eeecc8e46f3894954d6773441c02365
--- /dev/null
+++ b/testCases/pr8/inputs/input1/Q.csv
@@ -0,0 +1,4 @@
+7 , 4 , 6 , 1
+3 , 5 , 8 , 2
+1 , , , 2
+3 , 2 , , 4
\ No newline at end of file
diff --git a/testCases/pr8/inputs/input2/P.csv b/testCases/pr8/inputs/input2/P.csv
new file mode 100644
index 0000000000000000000000000000000000000000..11e3558947ba77d744bda8637b05786692c66b55
--- /dev/null
+++ b/testCases/pr8/inputs/input2/P.csv
@@ -0,0 +1,2 @@
+Alice , L , , LC
+Bob , ,CC,CD
\ No newline at end of file
diff --git a/testCases/pr8/inputs/input2/Q.csv b/testCases/pr8/inputs/input2/Q.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e29fc58ab2365c2feafcd69cc06b440ccf06e407
--- /dev/null
+++ b/testCases/pr8/inputs/input2/Q.csv
@@ -0,0 +1,2 @@
+Bob , C, ,CD
+Alice , ,AAW, LC
\ No newline at end of file
diff --git a/testCases/pr9/inputs/input1/R.csv b/testCases/pr9/inputs/input1/R.csv
new file mode 100644
index 0000000000000000000000000000000000000000..30bd0151aac5dead73d7d1e3e7245748a76b60b4
--- /dev/null
+++ b/testCases/pr9/inputs/input1/R.csv
@@ -0,0 +1,5 @@
+Southampton , Romsey
+Romsey , Salisbury
+Salisbury , Warminster
+Warminster , Westbury
+Westbury , Westbury
\ No newline at end of file