diff --git a/07-a.kts b/07-a.kts
new file mode 100644
index 0000000..56b78da
--- /dev/null
+++ b/07-a.kts
@@ -0,0 +1,30 @@
+import java.math.BigInteger
+import java.util.*
+
+val scanner = Scanner(System.`in`)
+
+var sum: BigInteger = BigInteger.ZERO
+while (scanner.hasNextLine()) {
+    val line = scanner.nextLine()
+    val numbersInLine = line.split("[: ]+".toRegex()).map(String::toBigInteger)
+    val target = numbersInLine.first()
+    val numbers = numbersInLine.drop(1)
+    val possibleResults = findAllPossibleResult(setOf(numbers.first()), numbers.drop(1))
+    if (possibleResults.contains(target)) {
+        sum += target
+    }
+}
+println(sum)
+
+fun findAllPossibleResult(partialResults: Set<BigInteger>, numbers: List<BigInteger>): Set<BigInteger> {
+    if (numbers.isEmpty()) return partialResults
+
+    val head = numbers.first()
+    val tail = numbers.drop(1)
+    val newResults = partialResults.fold(HashSet<BigInteger>()) { r, p ->
+        r.add(p.plus(head))
+        r.add(p.times(head))
+        r
+    }
+    return findAllPossibleResult(newResults, tail)
+}
\ No newline at end of file
diff --git a/07-b.kts b/07-b.kts
new file mode 100644
index 0000000..df9ea34
--- /dev/null
+++ b/07-b.kts
@@ -0,0 +1,32 @@
+import java.math.BigInteger
+import java.util.*
+
+val scanner = Scanner(System.`in`)
+
+var sum: BigInteger = BigInteger.ZERO
+while (scanner.hasNextLine()) {
+    val line = scanner.nextLine()
+    val numbersInLine = line.split("[: ]+".toRegex()).map(String::toBigInteger)
+    val target = numbersInLine.first()
+    val numbers = numbersInLine.drop(1)
+    val possibleResults = findAllPossibleResult(setOf(numbers.first()), numbers.drop(1))
+    if (possibleResults.contains(target)) {
+        sum += target
+//        println(line)
+    }
+}
+println(sum)
+
+fun findAllPossibleResult(partialResults: Set<BigInteger>, numbers: List<BigInteger>): Set<BigInteger> {
+    if (numbers.isEmpty()) return partialResults
+
+    val head = numbers.first()
+    val tail = numbers.drop(1)
+    val newResults = partialResults.fold(HashSet<BigInteger>()) { r, p ->
+        r.add("$p$head".toBigInteger())
+        r.add(p.plus(head))
+        r.add(p.times(head))
+        r
+    }
+    return findAllPossibleResult(newResults, tail)
+}
\ No newline at end of file