diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -56,7 +56,9 @@
 bench/p30
 bench/candidates
 bench/gps
+bench/gps2
 bench/lowtests
+bench/terpret
 proto/u-conjure
 test/expr
 test/conjurable
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -33,6 +33,8 @@
   bench/p12 \
   bench/p30 \
   bench/gps \
+  bench/gps2 \
+  bench/terpret \
   proto/u-conjure
 
 TESTS = \
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -94,7 +94,7 @@
 	               , pr (1::Int)
 	               , prim "+" ((+) :: Int -> Int -> Int)
 	               , prim "*" ((*) :: Int -> Int -> Int)
-	               , prim "dec" (subtract 1 :: Int -> Int)
+	               , prim "-" ((-) :: Int -> Int -> Int)
 	               ]
 
 running
@@ -105,15 +105,16 @@
 
 	factorial :: Int -> Int
 	-- testing 4 combinations of argument values
-	-- pruning with 22/42 rules
+	-- pruning with 27/65 rules
 	-- looking through 3 candidates of size 1
-	-- looking through 6 candidates of size 2
-	-- looking through 16 candidates of size 3
-	-- looking through 39 candidates of size 4
-	-- looking through 78 candidates of size 5
-	-- looking through 166 candidates of size 6
+	-- looking through 4 candidates of size 2
+	-- looking through 13 candidates of size 3
+	-- looking through 34 candidates of size 4
+	-- looking through 75 candidates of size 5
+	-- looking through 183 candidates of size 6
+	-- looking through 577 candidates of size 7
 	factorial 0  =  1
-	factorial x  =  x * factorial (dec x)
+	factorial x  =  x * factorial (x - 1)
 
 in less than a second.
 
diff --git a/TODO.md b/TODO.md
--- a/TODO.md
+++ b/TODO.md
@@ -3,25 +3,27 @@
 
 A non-exhaustive list of things TO DO for Conjure.
 
-* pretty-print top-level ifs?
+* consider not breaking in some cases (increased crossproduct of patterns)
 
-* carry on implementing all GPS benches while taking notes on the paper
+* reduce the number of `deconstructions` considered:
 
-* consider memoizing `recs ep` in `candidateDefnsC`
-  and a sub function with `vs` arguments.
+	1. place a `traceShowId` in `deconstructions :: [Expr]`
+	2. run the GCD example
 
-* remove `requireDescent=False` requirement from `gcd`
-  (add and use `isDeconstruction`)
-  this would also eliminate the requirement of providing `dec`
+		[_ `mod` y :: Int,x `mod` _ :: Int,_ `mod` x :: Int,y `mod` _ :: Int,0 `mod` _ :: Int,0 `mod` _ :: Int]
 
-* consider not breaking in some cases (increased crossproduct of patterns)
+	3. there's no need to go variable by variable.  Just generating expressions
+	   with a _single hole_ should be enough.
 
 
+
 ### for later
 
 * allow specifying properties that need to be true
 
 * allow recursion under any lazy functions (discover them by testing!)
+
+* pretty-print top-level ifs?
 
 * exclude magic numbers?  e.g.: `1+1`?
 
diff --git a/bench/candidates.hs b/bench/candidates.hs
--- a/bench/candidates.hs
+++ b/bench/candidates.hs
@@ -38,7 +38,7 @@
     , pr (1 :: Int)
     , prim "+" ((+) :: Int -> Int -> Int)
     , prim "*" ((+) :: Int -> Int -> Int)
-    , prim "dec" (subtract 1 :: Int -> Int)
+    , prim "-" ((-) :: Int -> Int -> Int)
     ]
 
   printCandidates 9 6 "?" (undefined :: Int -> Int -> Int)
diff --git a/bench/candidates.out b/bench/candidates.out
--- a/bench/candidates.out
+++ b/bench/candidates.out
@@ -1,7487 +1,9727 @@
 Candidates for: foo :: Int -> Int
-  pruning with 13/26 rules
-  [3,2,4,3,12,7,27,25,58] direct candidates, 0 duplicates
-  [3,6,15,34,61,111,174,344,529] pattern candidates, 0 duplicates
-
-rules:
-dec 1 == 0
-x * y == x + y
-x * y == y + x
-x + 0 == x
-0 + x == x
-dec (x + y) == x + dec y
-dec (x + y) == y + dec x
-dec (x + y) == dec x + y
-dec (x + y) == dec y + x
-1 + dec x == x
-dec x + 1 == x
-(x + y) + z == x + (y + z)
-(x + y) + z == y + (x + z)
-equations:
-y + x == x + y
-y + dec x == x + dec y
-dec x + y == x + dec y
-dec y + x == dec x + y
-x + dec 0 == dec x
-dec 0 + x == dec x
-y + (x + z) == x + (y + z)
-z + (x + y) == x + (y + z)
-z + (y + x) == x + (y + z)
-y + dec (dec x) == x + dec (dec y)
-dec (dec x) + y == x + dec (dec y)
-x + dec (dec 0) == dec (dec x)
-dec (dec 0) + x == dec (dec x)
-
-direct candidates:
-
-foo x  =  x
-
-foo x  =  0
-
-foo x  =  1
-
-foo x  =  dec x
-
-foo x  =  dec 0
-
-foo x  =  x + x
-
-foo x  =  x + 1
-
-foo x  =  1 + x
-
-foo x  =  1 + 1
-
-foo x  =  dec 0 + x
-
-foo x  =  x + dec x
-
-foo x  =  x + dec 0
-
-foo x  =  x + (x + x)
-
-foo x  =  x + (x + 1)
-
-foo x  =  x + (1 + x)
-
-foo x  =  x + (1 + 1)
-
-foo x  =  1 + (x + x)
-
-foo x  =  1 + (x + 1)
-
-foo x  =  1 + (1 + x)
-
-foo x  =  1 + (1 + 1)
-
-foo x  =  dec x + dec x
-
-foo x  =  dec x + dec 0
-
-foo x  =  dec 0 + dec x
-
-foo x  =  dec 0 + dec 0
-
-foo x  =  x + (dec 0 + x)
-
-foo x  =  x + (x + dec x)
-
-foo x  =  x + (x + dec 0)
-
-foo x  =  1 + (dec 0 + x)
-
-foo x  =  1 + (x + dec x)
-
-foo x  =  1 + (x + dec 0)
-
-foo x  =  dec 0 + (x + x)
-
-
-pattern candidates:
-
-foo x  =  x
-
-foo x  =  0
-
-foo x  =  1
-
-foo x  =  dec x
-
-foo x  =  dec 0
-
-foo 0  =  0
-foo x  =  x
-
-foo 0  =  0
-foo x  =  1
-
-foo 0  =  1
-foo x  =  x
-
-foo 0  =  1
-foo x  =  0
-
-foo x  =  x + x
-
-foo x  =  x + 1
-
-foo x  =  1 + x
-
-foo x  =  1 + 1
-
-foo 0  =  0
-foo x  =  dec x
-
-foo 0  =  0
-foo x  =  dec 0
-
-foo 0  =  1
-foo x  =  dec x
-
-foo 0  =  1
-foo x  =  dec 0
-
-foo 0  =  dec 0
-foo x  =  x
-
-foo 0  =  dec 0
-foo x  =  0
-
-foo 0  =  dec 0
-foo x  =  1
-
-foo 1  =  0
-foo x  =  x
-
-foo 1  =  0
-foo x  =  1
-
-foo 1  =  1
-foo x  =  x
-
-foo 1  =  1
-foo x  =  0
-
-foo 0  =  0
-foo x  =  foo (dec x)
-
-foo 0  =  1
-foo x  =  foo (dec x)
-
-foo x  =  dec 0 + x
-
-foo x  =  x + dec x
-
-foo x  =  x + dec 0
-
-foo 0  =  0
-foo x  =  x + x
-
-foo 0  =  0
-foo x  =  x + 1
-
-foo 0  =  0
-foo x  =  1 + x
-
-foo 0  =  0
-foo x  =  1 + 1
-
-foo 0  =  1
-foo x  =  x + x
-
-foo 0  =  1
-foo x  =  x + 1
-
-foo 0  =  1
-foo x  =  1 + x
-
-foo 0  =  1
-foo x  =  1 + 1
-
-foo 0  =  dec 0
-foo x  =  dec x
-
-foo 0  =  1 + 1
-foo x  =  x
-
-foo 0  =  1 + 1
-foo x  =  0
-
-foo 0  =  1 + 1
-foo x  =  1
-
-foo 1  =  0
-foo x  =  dec x
-
-foo 1  =  0
-foo x  =  dec 0
-
-foo 1  =  1
-foo x  =  dec x
-
-foo 1  =  1
-foo x  =  dec 0
-
-foo 1  =  dec 0
-foo x  =  x
-
-foo 1  =  dec 0
-foo x  =  0
-
-foo 1  =  dec 0
-foo x  =  1
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  x
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  1
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  x
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  0
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  1
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  x
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  0
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  1
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  x
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  0
-
-foo 0  =  0
-foo x  =  dec (foo (dec x))
-
-foo 0  =  1
-foo x  =  dec (foo (dec x))
-
-foo 0  =  dec 0
-foo x  =  foo (dec x)
-
-foo 1  =  0
-foo x  =  foo (dec x)
-
-foo 1  =  1
-foo x  =  foo (dec x)
-
-foo x  =  x + (x + x)
-
-foo x  =  x + (x + 1)
-
-foo x  =  x + (1 + x)
-
-foo x  =  x + (1 + 1)
-
-foo x  =  1 + (x + x)
-
-foo x  =  1 + (x + 1)
-
-foo x  =  1 + (1 + x)
-
-foo x  =  1 + (1 + 1)
-
-foo x  =  dec x + dec x
-
-foo x  =  dec x + dec 0
-
-foo x  =  dec 0 + dec x
-
-foo x  =  dec 0 + dec 0
-
-foo 0  =  0
-foo x  =  dec 0 + x
-
-foo 0  =  0
-foo x  =  x + dec x
-
-foo 0  =  0
-foo x  =  x + dec 0
-
-foo 0  =  1
-foo x  =  dec 0 + x
-
-foo 0  =  1
-foo x  =  x + dec x
-
-foo 0  =  1
-foo x  =  x + dec 0
-
-foo 0  =  dec 0
-foo x  =  x + x
-
-foo 0  =  dec 0
-foo x  =  x + 1
-
-foo 0  =  dec 0
-foo x  =  1 + x
-
-foo 0  =  dec 0
-foo x  =  1 + 1
-
-foo 0  =  1 + 1
-foo x  =  dec x
-
-foo 0  =  1 + 1
-foo x  =  dec 0
-
-foo 1  =  0
-foo x  =  x + x
-
-foo 1  =  0
-foo x  =  x + 1
-
-foo 1  =  0
-foo x  =  1 + x
-
-foo 1  =  0
-foo x  =  1 + 1
-
-foo 1  =  1
-foo x  =  x + x
-
-foo 1  =  1
-foo x  =  x + 1
-
-foo 1  =  1
-foo x  =  1 + x
-
-foo 1  =  1
-foo x  =  1 + 1
-
-foo 1  =  dec 0
-foo x  =  dec x
-
-foo 1  =  1 + 1
-foo x  =  x
-
-foo 1  =  1 + 1
-foo x  =  0
-
-foo 1  =  1 + 1
-foo x  =  1
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  dec x
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  dec 0
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  dec x
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  dec 0
-
-foo 0  =  0
-foo 1  =  dec 0
-foo x  =  x
-
-foo 0  =  0
-foo 1  =  dec 0
-foo x  =  0
-
-foo 0  =  0
-foo 1  =  dec 0
-foo x  =  1
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  dec x
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  dec 0
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  dec x
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  dec 0
-
-foo 0  =  1
-foo 1  =  dec 0
-foo x  =  x
-
-foo 0  =  1
-foo 1  =  dec 0
-foo x  =  0
-
-foo 0  =  1
-foo 1  =  dec 0
-foo x  =  1
-
-foo 0  =  dec 0
-foo 1  =  0
-foo x  =  x
-
-foo 0  =  dec 0
-foo 1  =  0
-foo x  =  0
-
-foo 0  =  dec 0
-foo 1  =  0
-foo x  =  1
-
-foo 0  =  dec 0
-foo 1  =  1
-foo x  =  x
-
-foo 0  =  dec 0
-foo 1  =  1
-foo x  =  0
-
-foo 0  =  dec 0
-foo 1  =  1
-foo x  =  1
-
-foo 0  =  0
-foo x  =  x + foo (dec x)
-
-foo 0  =  0
-foo x  =  foo (dec x) + x
-
-foo 0  =  0
-foo x  =  foo (dec x) + 1
-
-foo 0  =  0
-foo x  =  1 + foo (dec x)
-
-foo 0  =  1
-foo x  =  x + foo (dec x)
-
-foo 0  =  1
-foo x  =  foo (dec x) + x
-
-foo 0  =  1
-foo x  =  foo (dec x) + 1
-
-foo 0  =  1
-foo x  =  1 + foo (dec x)
-
-foo 0  =  dec 0
-foo x  =  dec (foo (dec x))
-
-foo 0  =  1 + 1
-foo x  =  foo (dec x)
-
-foo 1  =  0
-foo x  =  dec (foo (dec x))
-
-foo 1  =  1
-foo x  =  dec (foo (dec x))
-
-foo 1  =  dec 0
-foo x  =  foo (dec x)
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  foo (dec x)
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  foo (dec x)
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  foo (dec x)
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  foo (dec x)
-
-foo x  =  x + (dec 0 + x)
-
-foo x  =  x + (x + dec x)
-
-foo x  =  x + (x + dec 0)
-
-foo x  =  1 + (dec 0 + x)
-
-foo x  =  1 + (x + dec x)
-
-foo x  =  1 + (x + dec 0)
-
-foo x  =  dec 0 + (x + x)
-
-foo 0  =  0
-foo x  =  x + (x + x)
-
-foo 0  =  0
-foo x  =  x + (x + 1)
-
-foo 0  =  0
-foo x  =  x + (1 + x)
-
-foo 0  =  0
-foo x  =  x + (1 + 1)
-
-foo 0  =  0
-foo x  =  1 + (x + x)
-
-foo 0  =  0
-foo x  =  1 + (x + 1)
-
-foo 0  =  0
-foo x  =  1 + (1 + x)
-
-foo 0  =  0
-foo x  =  1 + (1 + 1)
-
-foo 0  =  0
-foo x  =  dec x + dec x
-
-foo 0  =  0
-foo x  =  dec x + dec 0
-
-foo 0  =  0
-foo x  =  dec 0 + dec x
-
-foo 0  =  0
-foo x  =  dec 0 + dec 0
-
-foo 0  =  1
-foo x  =  x + (x + x)
-
-foo 0  =  1
-foo x  =  x + (x + 1)
-
-foo 0  =  1
-foo x  =  x + (1 + x)
-
-foo 0  =  1
-foo x  =  x + (1 + 1)
-
-foo 0  =  1
-foo x  =  1 + (x + x)
-
-foo 0  =  1
-foo x  =  1 + (x + 1)
-
-foo 0  =  1
-foo x  =  1 + (1 + x)
-
-foo 0  =  1
-foo x  =  1 + (1 + 1)
-
-foo 0  =  1
-foo x  =  dec x + dec x
-
-foo 0  =  1
-foo x  =  dec x + dec 0
-
-foo 0  =  1
-foo x  =  dec 0 + dec x
-
-foo 0  =  1
-foo x  =  dec 0 + dec 0
-
-foo 0  =  dec 0
-foo x  =  dec 0 + x
-
-foo 0  =  dec 0
-foo x  =  x + dec x
-
-foo 0  =  dec 0
-foo x  =  x + dec 0
-
-foo 0  =  1 + 1
-foo x  =  x + x
-
-foo 0  =  1 + 1
-foo x  =  x + 1
-
-foo 0  =  1 + 1
-foo x  =  1 + x
-
-foo 0  =  1 + (1 + 1)
-foo x  =  x
-
-foo 0  =  1 + (1 + 1)
-foo x  =  0
-
-foo 0  =  1 + (1 + 1)
-foo x  =  1
-
-foo 0  =  dec 0 + dec 0
-foo x  =  x
-
-foo 0  =  dec 0 + dec 0
-foo x  =  0
-
-foo 0  =  dec 0 + dec 0
-foo x  =  1
-
-foo 1  =  0
-foo x  =  dec 0 + x
-
-foo 1  =  0
-foo x  =  x + dec x
-
-foo 1  =  0
-foo x  =  x + dec 0
-
-foo 1  =  1
-foo x  =  dec 0 + x
-
-foo 1  =  1
-foo x  =  x + dec x
-
-foo 1  =  1
-foo x  =  x + dec 0
-
-foo 1  =  dec 0
-foo x  =  x + x
-
-foo 1  =  dec 0
-foo x  =  x + 1
-
-foo 1  =  dec 0
-foo x  =  1 + x
-
-foo 1  =  dec 0
-foo x  =  1 + 1
-
-foo 1  =  1 + 1
-foo x  =  dec x
-
-foo 1  =  1 + 1
-foo x  =  dec 0
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  x + x
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  x + 1
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  1 + x
-
-foo 0  =  0
-foo 1  =  0
-foo x  =  1 + 1
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  x + x
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  x + 1
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  1 + x
-
-foo 0  =  0
-foo 1  =  1
-foo x  =  1 + 1
-
-foo 0  =  0
-foo 1  =  dec 0
-foo x  =  dec x
-
-foo 0  =  0
-foo 1  =  dec 0
-foo x  =  dec 0
-
-foo 0  =  0
-foo 1  =  1 + 1
-foo x  =  x
-
-foo 0  =  0
-foo 1  =  1 + 1
-foo x  =  0
-
-foo 0  =  0
-foo 1  =  1 + 1
-foo x  =  1
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  x + x
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  x + 1
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  1 + x
-
-foo 0  =  1
-foo 1  =  0
-foo x  =  1 + 1
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  x + x
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  x + 1
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  1 + x
-
-foo 0  =  1
-foo 1  =  1
-foo x  =  1 + 1
-
-foo 0  =  1
-foo 1  =  dec 0
-foo x  =  dec x
-
-foo 0  =  1
-foo 1  =  dec 0
-foo x  =  dec 0
-
-foo 0  =  1
-foo 1  =  1 + 1
-foo x  =  x
-
-foo 0  =  1
-foo 1  =  1 + 1
-foo x  =  0
-
-foo 0  =  1
-foo 1  =  1 + 1
-foo x  =  1
-
-foo 0  =  dec 0
-foo 1  =  0
-foo x  =  dec x
-
-foo 0  =  dec 0
-foo 1  =  0
-foo x  =  dec 0
-
-foo 0  =  dec 0
-foo 1  =  1
-foo x  =  dec x
-
-foo 0  =  dec 0
-foo 1  =  1
-foo x  =  dec 0
-
-foo 0  =  dec 0
-foo 1  =  dec 0
-foo x  =  x
-
-foo 0  =  dec 0
-foo 1  =  dec 0
-foo x  =  0
-
-foo 0  =  dec 0
-foo 1  =  dec 0
-foo x  =  1
-
-foo 0  =  1 + 1
-foo 1  =  0
-foo x  =  x
-
-foo 0  =  1 + 1
-foo 1  =  0
-foo x  =  0
-
-foo 0  =  1 + 1
-foo 1  =  0
-foo x  =  1
-
-foo 0  =  1 + 1
-foo 1  =  1
-foo x  =  x
-
-foo 0  =  1 + 1
-foo 1  =  1
-foo x  =  0
-
-foo 0  =  1 + 1
-foo 1  =  1
-foo x  =  1
-
-
-Candidates for: ? :: Int -> Int -> Int
-  pruning with 10/23 rules
-  [3,3,4,10,17,26,54,93,162] direct candidates, 0 duplicates
-  [3,11,39,88,245,596,1542,3881,9466] pattern candidates, 0 duplicates
-
-rules:
-x * y == x + y
-x * y == y + x
-x + 0 == x
-0 + x == x
-dec (x + y) == x + dec y
-dec (x + y) == y + dec x
-dec (x + y) == dec x + y
-dec (x + y) == dec y + x
-(x + y) + z == x + (y + z)
-(x + y) + z == y + (x + z)
-equations:
-y + x == x + y
-y + dec x == x + dec y
-dec x + y == x + dec y
-dec y + x == dec x + y
-x + dec 0 == dec x
-dec 0 + x == dec x
-y + (x + z) == x + (y + z)
-z + (x + y) == x + (y + z)
-z + (y + x) == x + (y + z)
-y + dec (dec x) == x + dec (dec y)
-dec (dec x) + y == x + dec (dec y)
-x + dec (dec 0) == dec (dec x)
-dec (dec 0) + x == dec (dec x)
-
-direct candidates:
-
-x ? y  =  x
-
-x ? y  =  y
-
-x ? y  =  0
-
-x ? y  =  dec x
-
-x ? y  =  dec y
-
-x ? y  =  dec 0
-
-x ? y  =  x + x
-
-x ? y  =  x + y
-
-x ? y  =  y + x
-
-x ? y  =  y + y
-
-x ? y  =  dec x + y
-
-x ? y  =  dec y + x
-
-x ? y  =  dec 0 + x
-
-x ? y  =  dec 0 + y
-
-x ? y  =  x + dec x
-
-x ? y  =  x + dec y
-
-x ? y  =  x + dec 0
-
-x ? y  =  y + dec x
-
-x ? y  =  y + dec y
-
-x ? y  =  y + dec 0
-
-x ? y  =  x + (x + x)
-
-x ? y  =  x + (x + y)
-
-x ? y  =  x + (y + x)
-
-x ? y  =  x + (y + y)
-
-x ? y  =  y + (x + x)
-
-x ? y  =  y + (x + y)
-
-x ? y  =  y + (y + x)
-
-x ? y  =  y + (y + y)
-
-x ? y  =  dec x + dec x
-
-x ? y  =  dec x + dec y
-
-x ? y  =  dec x + dec 0
-
-x ? y  =  dec y + dec x
-
-x ? y  =  dec y + dec y
-
-x ? y  =  dec y + dec 0
-
-x ? y  =  dec 0 + dec x
-
-x ? y  =  dec 0 + dec y
-
-x ? y  =  dec 0 + dec 0
-
-x ? y  =  x + (dec x + y)
-
-x ? y  =  x + (dec y + x)
-
-x ? y  =  x + (dec 0 + x)
-
-x ? y  =  x + (dec 0 + y)
-
-x ? y  =  x + (x + dec x)
-
-x ? y  =  x + (x + dec y)
-
-x ? y  =  x + (x + dec 0)
-
-x ? y  =  x + (y + dec x)
-
-x ? y  =  x + (y + dec y)
-
-x ? y  =  x + (y + dec 0)
-
-x ? y  =  y + (dec x + y)
-
-x ? y  =  y + (dec y + x)
-
-x ? y  =  y + (dec 0 + x)
-
-x ? y  =  y + (dec 0 + y)
-
-x ? y  =  y + (x + dec x)
-
-x ? y  =  y + (x + dec y)
-
-x ? y  =  y + (x + dec 0)
-
-x ? y  =  y + (y + dec x)
-
-x ? y  =  y + (y + dec y)
-
-x ? y  =  y + (y + dec 0)
-
-x ? y  =  dec x + (y + y)
-
-x ? y  =  dec y + (x + x)
-
-x ? y  =  dec 0 + (x + x)
-
-x ? y  =  dec 0 + (x + y)
-
-x ? y  =  dec 0 + (y + x)
-
-x ? y  =  dec 0 + (y + y)
-
-
-pattern candidates:
-
-x ? y  =  x
-
-x ? y  =  y
-
-x ? y  =  0
-
-x ? y  =  dec x
-
-x ? y  =  dec y
-
-x ? y  =  dec 0
-
-x ? 0  =  x
-x ? y  =  y
-
-x ? 0  =  x
-x ? y  =  0
-
-x ? 0  =  0
-x ? y  =  x
-
-x ? 0  =  0
-x ? y  =  y
-
-0 ? x  =  x
-x ? y  =  y
-
-0 ? x  =  x
-x ? y  =  0
-
-0 ? x  =  0
-x ? y  =  x
-
-0 ? x  =  0
-x ? y  =  y
-
-x ? y  =  x + x
-
-x ? y  =  x + y
-
-x ? y  =  y + x
-
-x ? y  =  y + y
-
-x ? 0  =  x
-x ? y  =  dec x
-
-x ? 0  =  x
-x ? y  =  dec y
-
-x ? 0  =  x
-x ? y  =  dec 0
-
-x ? 0  =  0
-x ? y  =  dec x
-
-x ? 0  =  0
-x ? y  =  dec y
-
-x ? 0  =  0
-x ? y  =  dec 0
-
-x ? 0  =  dec x
-x ? y  =  x
-
-x ? 0  =  dec x
-x ? y  =  y
-
-x ? 0  =  dec x
-x ? y  =  0
-
-x ? 0  =  dec 0
-x ? y  =  x
-
-x ? 0  =  dec 0
-x ? y  =  y
-
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? x  =  x
-x ? y  =  dec x
-
-0 ? x  =  x
-x ? y  =  dec y
-
-0 ? x  =  x
-x ? y  =  dec 0
-
-0 ? x  =  0
-x ? y  =  dec x
-
-0 ? x  =  0
-x ? y  =  dec y
-
-0 ? x  =  0
-x ? y  =  dec 0
-
-0 ? x  =  dec x
-x ? y  =  x
-
-0 ? x  =  dec x
-x ? y  =  y
-
-0 ? x  =  dec x
-x ? y  =  0
-
-0 ? x  =  dec 0
-x ? y  =  x
-
-0 ? x  =  dec 0
-x ? y  =  y
-
-0 ? x  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y
-
-x ? y  =  dec x + y
-
-x ? y  =  dec y + x
-
-x ? y  =  dec 0 + x
-
-x ? y  =  dec 0 + y
-
-x ? y  =  x + dec x
-
-x ? y  =  x + dec y
-
-x ? y  =  x + dec 0
-
-x ? y  =  y + dec x
-
-x ? y  =  y + dec y
-
-x ? y  =  y + dec 0
-
-x ? 0  =  x
-x ? y  =  x + x
-
-x ? 0  =  x
-x ? y  =  x + y
-
-x ? 0  =  x
-x ? y  =  y + x
-
-x ? 0  =  x
-x ? y  =  y + y
-
-x ? 0  =  0
-x ? y  =  x + x
-
-x ? 0  =  0
-x ? y  =  x + y
-
-x ? 0  =  0
-x ? y  =  y + x
-
-x ? 0  =  0
-x ? y  =  y + y
-
-x ? 0  =  dec x
-x ? y  =  dec y
-
-x ? 0  =  dec x
-x ? y  =  dec 0
-
-x ? 0  =  dec 0
-x ? y  =  dec x
-
-x ? 0  =  dec 0
-x ? y  =  dec y
-
-x ? 0  =  x + x
-x ? y  =  x
-
-x ? 0  =  x + x
-x ? y  =  y
-
-x ? 0  =  x + x
-x ? y  =  0
-
-0 ? x  =  x
-x ? y  =  x + x
-
-0 ? x  =  x
-x ? y  =  x + y
-
-0 ? x  =  x
-x ? y  =  y + x
-
-0 ? x  =  x
-x ? y  =  y + y
-
-0 ? x  =  0
-x ? y  =  x + x
-
-0 ? x  =  0
-x ? y  =  x + y
-
-0 ? x  =  0
-x ? y  =  y + x
-
-0 ? x  =  0
-x ? y  =  y + y
-
-0 ? x  =  dec x
-x ? y  =  dec y
-
-0 ? x  =  dec x
-x ? y  =  dec 0
-
-0 ? x  =  dec 0
-x ? y  =  dec x
-
-0 ? x  =  dec 0
-x ? y  =  dec y
-
-0 ? x  =  x + x
-x ? y  =  x
-
-0 ? x  =  x + x
-x ? y  =  y
-
-0 ? x  =  x + x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  0
-
-x ? 0  =  x
-x ? y  =  x ? dec x
-
-x ? 0  =  x
-x ? y  =  x ? dec y
-
-x ? 0  =  x
-x ? y  =  y ? dec x
-
-x ? 0  =  x
-x ? y  =  y ? dec y
-
-x ? 0  =  x
-x ? y  =  0 ? dec x
-
-x ? 0  =  x
-x ? y  =  0 ? dec y
-
-x ? 0  =  x
-x ? y  =  dec x ? x
-
-x ? 0  =  x
-x ? y  =  dec x ? y
-
-x ? 0  =  x
-x ? y  =  dec x ? 0
-
-x ? 0  =  x
-x ? y  =  dec y ? x
-
-x ? 0  =  x
-x ? y  =  dec y ? y
-
-x ? 0  =  x
-x ? y  =  dec y ? 0
-
-x ? 0  =  0
-x ? y  =  x ? dec x
-
-x ? 0  =  0
-x ? y  =  x ? dec y
-
-x ? 0  =  0
-x ? y  =  y ? dec x
-
-x ? 0  =  0
-x ? y  =  y ? dec y
-
-x ? 0  =  0
-x ? y  =  0 ? dec x
-
-x ? 0  =  0
-x ? y  =  0 ? dec y
-
-x ? 0  =  0
-x ? y  =  dec x ? x
-
-x ? 0  =  0
-x ? y  =  dec x ? y
-
-x ? 0  =  0
-x ? y  =  dec x ? 0
-
-x ? 0  =  0
-x ? y  =  dec y ? x
-
-x ? 0  =  0
-x ? y  =  dec y ? y
-
-x ? 0  =  0
-x ? y  =  dec y ? 0
-
-0 ? x  =  x
-x ? y  =  x ? dec x
-
-0 ? x  =  x
-x ? y  =  x ? dec y
-
-0 ? x  =  x
-x ? y  =  y ? dec x
-
-0 ? x  =  x
-x ? y  =  y ? dec y
-
-0 ? x  =  x
-x ? y  =  0 ? dec x
-
-0 ? x  =  x
-x ? y  =  0 ? dec y
-
-0 ? x  =  x
-x ? y  =  dec x ? x
-
-0 ? x  =  x
-x ? y  =  dec x ? y
-
-0 ? x  =  x
-x ? y  =  dec x ? 0
-
-0 ? x  =  x
-x ? y  =  dec y ? x
-
-0 ? x  =  x
-x ? y  =  dec y ? y
-
-0 ? x  =  x
-x ? y  =  dec y ? 0
-
-0 ? x  =  0
-x ? y  =  x ? dec x
-
-0 ? x  =  0
-x ? y  =  x ? dec y
-
-0 ? x  =  0
-x ? y  =  y ? dec x
-
-0 ? x  =  0
-x ? y  =  y ? dec y
-
-0 ? x  =  0
-x ? y  =  0 ? dec x
-
-0 ? x  =  0
-x ? y  =  0 ? dec y
-
-0 ? x  =  0
-x ? y  =  dec x ? x
-
-0 ? x  =  0
-x ? y  =  dec x ? y
-
-0 ? x  =  0
-x ? y  =  dec x ? 0
-
-0 ? x  =  0
-x ? y  =  dec y ? x
-
-0 ? x  =  0
-x ? y  =  dec y ? y
-
-0 ? x  =  0
-x ? y  =  dec y ? 0
-
-x ? y  =  x + (x + x)
-
-x ? y  =  x + (x + y)
-
-x ? y  =  x + (y + x)
-
-x ? y  =  x + (y + y)
-
-x ? y  =  y + (x + x)
-
-x ? y  =  y + (x + y)
-
-x ? y  =  y + (y + x)
-
-x ? y  =  y + (y + y)
-
-x ? y  =  dec x + dec x
-
-x ? y  =  dec x + dec y
-
-x ? y  =  dec x + dec 0
-
-x ? y  =  dec y + dec x
-
-x ? y  =  dec y + dec y
-
-x ? y  =  dec y + dec 0
-
-x ? y  =  dec 0 + dec x
-
-x ? y  =  dec 0 + dec y
-
-x ? y  =  dec 0 + dec 0
-
-x ? 0  =  x
-x ? y  =  dec x + y
-
-x ? 0  =  x
-x ? y  =  dec y + x
-
-x ? 0  =  x
-x ? y  =  dec 0 + x
-
-x ? 0  =  x
-x ? y  =  dec 0 + y
-
-x ? 0  =  x
-x ? y  =  x + dec x
-
-x ? 0  =  x
-x ? y  =  x + dec y
-
-x ? 0  =  x
-x ? y  =  x + dec 0
-
-x ? 0  =  x
-x ? y  =  y + dec x
-
-x ? 0  =  x
-x ? y  =  y + dec y
-
-x ? 0  =  x
-x ? y  =  y + dec 0
-
-x ? 0  =  0
-x ? y  =  dec x + y
-
-x ? 0  =  0
-x ? y  =  dec y + x
-
-x ? 0  =  0
-x ? y  =  dec 0 + x
-
-x ? 0  =  0
-x ? y  =  dec 0 + y
-
-x ? 0  =  0
-x ? y  =  x + dec x
-
-x ? 0  =  0
-x ? y  =  x + dec y
-
-x ? 0  =  0
-x ? y  =  x + dec 0
-
-x ? 0  =  0
-x ? y  =  y + dec x
-
-x ? 0  =  0
-x ? y  =  y + dec y
-
-x ? 0  =  0
-x ? y  =  y + dec 0
-
-x ? 0  =  dec x
-x ? y  =  x + x
-
-x ? 0  =  dec x
-x ? y  =  x + y
-
-x ? 0  =  dec x
-x ? y  =  y + x
-
-x ? 0  =  dec x
-x ? y  =  y + y
-
-x ? 0  =  dec 0
-x ? y  =  x + x
-
-x ? 0  =  dec 0
-x ? y  =  x + y
-
-x ? 0  =  dec 0
-x ? y  =  y + x
-
-x ? 0  =  dec 0
-x ? y  =  y + y
-
-x ? 0  =  x + x
-x ? y  =  dec x
-
-x ? 0  =  x + x
-x ? y  =  dec y
-
-x ? 0  =  x + x
-x ? y  =  dec 0
-
-x ? 0  =  dec 0 + x
-x ? y  =  x
-
-x ? 0  =  dec 0 + x
-x ? y  =  y
-
-x ? 0  =  dec 0 + x
-x ? y  =  0
-
-x ? 0  =  x + dec x
-x ? y  =  x
-
-x ? 0  =  x + dec x
-x ? y  =  y
-
-x ? 0  =  x + dec x
-x ? y  =  0
-
-x ? 0  =  x + dec 0
-x ? y  =  x
-
-x ? 0  =  x + dec 0
-x ? y  =  y
-
-x ? 0  =  x + dec 0
-x ? y  =  0
-
-0 ? x  =  x
-x ? y  =  dec x + y
-
-0 ? x  =  x
-x ? y  =  dec y + x
-
-0 ? x  =  x
-x ? y  =  dec 0 + x
-
-0 ? x  =  x
-x ? y  =  dec 0 + y
-
-0 ? x  =  x
-x ? y  =  x + dec x
-
-0 ? x  =  x
-x ? y  =  x + dec y
-
-0 ? x  =  x
-x ? y  =  x + dec 0
-
-0 ? x  =  x
-x ? y  =  y + dec x
-
-0 ? x  =  x
-x ? y  =  y + dec y
-
-0 ? x  =  x
-x ? y  =  y + dec 0
-
-0 ? x  =  0
-x ? y  =  dec x + y
-
-0 ? x  =  0
-x ? y  =  dec y + x
-
-0 ? x  =  0
-x ? y  =  dec 0 + x
-
-0 ? x  =  0
-x ? y  =  dec 0 + y
-
-0 ? x  =  0
-x ? y  =  x + dec x
-
-0 ? x  =  0
-x ? y  =  x + dec y
-
-0 ? x  =  0
-x ? y  =  x + dec 0
-
-0 ? x  =  0
-x ? y  =  y + dec x
-
-0 ? x  =  0
-x ? y  =  y + dec y
-
-0 ? x  =  0
-x ? y  =  y + dec 0
-
-0 ? x  =  dec x
-x ? y  =  x + x
-
-0 ? x  =  dec x
-x ? y  =  x + y
-
-0 ? x  =  dec x
-x ? y  =  y + x
-
-0 ? x  =  dec x
-x ? y  =  y + y
-
-0 ? x  =  dec 0
-x ? y  =  x + x
-
-0 ? x  =  dec 0
-x ? y  =  x + y
-
-0 ? x  =  dec 0
-x ? y  =  y + x
-
-0 ? x  =  dec 0
-x ? y  =  y + y
-
-0 ? x  =  x + x
-x ? y  =  dec x
-
-0 ? x  =  x + x
-x ? y  =  dec y
-
-0 ? x  =  x + x
-x ? y  =  dec 0
-
-0 ? x  =  dec 0 + x
-x ? y  =  x
-
-0 ? x  =  dec 0 + x
-x ? y  =  y
-
-0 ? x  =  dec 0 + x
-x ? y  =  0
-
-0 ? x  =  x + dec x
-x ? y  =  x
-
-0 ? x  =  x + dec x
-x ? y  =  y
-
-0 ? x  =  x + dec x
-x ? y  =  0
-
-0 ? x  =  x + dec 0
-x ? y  =  x
-
-0 ? x  =  x + dec 0
-x ? y  =  y
-
-0 ? x  =  x + dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  0
-
-x ? 0  =  x
-x ? y  =  dec x ? dec x
-
-x ? 0  =  x
-x ? y  =  dec x ? dec y
-
-x ? 0  =  x
-x ? y  =  dec x ? dec 0
-
-x ? 0  =  x
-x ? y  =  dec y ? dec x
-
-x ? 0  =  x
-x ? y  =  dec y ? dec y
-
-x ? 0  =  x
-x ? y  =  dec y ? dec 0
-
-x ? 0  =  x
-x ? y  =  dec 0 ? dec x
-
-x ? 0  =  x
-x ? y  =  dec 0 ? dec y
-
-x ? 0  =  0
-x ? y  =  dec x ? dec x
-
-x ? 0  =  0
-x ? y  =  dec x ? dec y
-
-x ? 0  =  0
-x ? y  =  dec x ? dec 0
-
-x ? 0  =  0
-x ? y  =  dec y ? dec x
-
-x ? 0  =  0
-x ? y  =  dec y ? dec y
-
-x ? 0  =  0
-x ? y  =  dec y ? dec 0
-
-x ? 0  =  0
-x ? y  =  dec 0 ? dec x
-
-x ? 0  =  0
-x ? y  =  dec 0 ? dec y
-
-0 ? x  =  x
-x ? y  =  dec x ? dec x
-
-0 ? x  =  x
-x ? y  =  dec x ? dec y
-
-0 ? x  =  x
-x ? y  =  dec x ? dec 0
-
-0 ? x  =  x
-x ? y  =  dec y ? dec x
-
-0 ? x  =  x
-x ? y  =  dec y ? dec y
-
-0 ? x  =  x
-x ? y  =  dec y ? dec 0
-
-0 ? x  =  x
-x ? y  =  dec 0 ? dec x
-
-0 ? x  =  x
-x ? y  =  dec 0 ? dec y
-
-0 ? x  =  0
-x ? y  =  dec x ? dec x
-
-0 ? x  =  0
-x ? y  =  dec x ? dec y
-
-0 ? x  =  0
-x ? y  =  dec x ? dec 0
-
-0 ? x  =  0
-x ? y  =  dec y ? dec x
-
-0 ? x  =  0
-x ? y  =  dec y ? dec y
-
-0 ? x  =  0
-x ? y  =  dec y ? dec 0
-
-0 ? x  =  0
-x ? y  =  dec 0 ? dec x
-
-0 ? x  =  0
-x ? y  =  dec 0 ? dec y
-
-x ? 0  =  x
-x ? y  =  dec (x ? dec x)
-
-x ? 0  =  x
-x ? y  =  dec (x ? dec y)
-
-x ? 0  =  x
-x ? y  =  dec (y ? dec x)
-
-x ? 0  =  x
-x ? y  =  dec (y ? dec y)
-
-x ? 0  =  x
-x ? y  =  dec (0 ? dec x)
-
-x ? 0  =  x
-x ? y  =  dec (0 ? dec y)
-
-x ? 0  =  x
-x ? y  =  dec (dec x ? x)
-
-x ? 0  =  x
-x ? y  =  dec (dec x ? y)
-
-x ? 0  =  x
-x ? y  =  dec (dec x ? 0)
-
-x ? 0  =  x
-x ? y  =  dec (dec y ? x)
-
-x ? 0  =  x
-x ? y  =  dec (dec y ? y)
-
-x ? 0  =  x
-x ? y  =  dec (dec y ? 0)
-
-x ? 0  =  0
-x ? y  =  dec (x ? dec x)
-
-x ? 0  =  0
-x ? y  =  dec (x ? dec y)
-
-x ? 0  =  0
-x ? y  =  dec (y ? dec x)
-
-x ? 0  =  0
-x ? y  =  dec (y ? dec y)
-
-x ? 0  =  0
-x ? y  =  dec (0 ? dec x)
-
-x ? 0  =  0
-x ? y  =  dec (0 ? dec y)
-
-x ? 0  =  0
-x ? y  =  dec (dec x ? x)
-
-x ? 0  =  0
-x ? y  =  dec (dec x ? y)
-
-x ? 0  =  0
-x ? y  =  dec (dec x ? 0)
-
-x ? 0  =  0
-x ? y  =  dec (dec y ? x)
-
-x ? 0  =  0
-x ? y  =  dec (dec y ? y)
-
-x ? 0  =  0
-x ? y  =  dec (dec y ? 0)
-
-x ? 0  =  dec x
-x ? y  =  x ? dec x
-
-x ? 0  =  dec x
-x ? y  =  x ? dec y
-
-x ? 0  =  dec x
-x ? y  =  y ? dec x
-
-x ? 0  =  dec x
-x ? y  =  y ? dec y
-
-x ? 0  =  dec x
-x ? y  =  0 ? dec x
-
-x ? 0  =  dec x
-x ? y  =  0 ? dec y
-
-x ? 0  =  dec x
-x ? y  =  dec x ? x
-
-x ? 0  =  dec x
-x ? y  =  dec x ? y
-
-x ? 0  =  dec x
-x ? y  =  dec x ? 0
-
-x ? 0  =  dec x
-x ? y  =  dec y ? x
-
-x ? 0  =  dec x
-x ? y  =  dec y ? y
-
-x ? 0  =  dec x
-x ? y  =  dec y ? 0
-
-x ? 0  =  dec 0
-x ? y  =  x ? dec x
-
-x ? 0  =  dec 0
-x ? y  =  x ? dec y
-
-x ? 0  =  dec 0
-x ? y  =  y ? dec x
-
-x ? 0  =  dec 0
-x ? y  =  y ? dec y
-
-x ? 0  =  dec 0
-x ? y  =  0 ? dec x
-
-x ? 0  =  dec 0
-x ? y  =  0 ? dec y
-
-x ? 0  =  dec 0
-x ? y  =  dec x ? x
-
-x ? 0  =  dec 0
-x ? y  =  dec x ? y
-
-x ? 0  =  dec 0
-x ? y  =  dec x ? 0
-
-x ? 0  =  dec 0
-x ? y  =  dec y ? x
-
-x ? 0  =  dec 0
-x ? y  =  dec y ? y
-
-x ? 0  =  dec 0
-x ? y  =  dec y ? 0
-
-0 ? x  =  x
-x ? y  =  dec (x ? dec x)
-
-0 ? x  =  x
-x ? y  =  dec (x ? dec y)
-
-0 ? x  =  x
-x ? y  =  dec (y ? dec x)
-
-0 ? x  =  x
-x ? y  =  dec (y ? dec y)
-
-0 ? x  =  x
-x ? y  =  dec (0 ? dec x)
-
-0 ? x  =  x
-x ? y  =  dec (0 ? dec y)
-
-0 ? x  =  x
-x ? y  =  dec (dec x ? x)
-
-0 ? x  =  x
-x ? y  =  dec (dec x ? y)
-
-0 ? x  =  x
-x ? y  =  dec (dec x ? 0)
-
-0 ? x  =  x
-x ? y  =  dec (dec y ? x)
-
-0 ? x  =  x
-x ? y  =  dec (dec y ? y)
-
-0 ? x  =  x
-x ? y  =  dec (dec y ? 0)
-
-0 ? x  =  0
-x ? y  =  dec (x ? dec x)
-
-0 ? x  =  0
-x ? y  =  dec (x ? dec y)
-
-0 ? x  =  0
-x ? y  =  dec (y ? dec x)
-
-0 ? x  =  0
-x ? y  =  dec (y ? dec y)
-
-0 ? x  =  0
-x ? y  =  dec (0 ? dec x)
-
-0 ? x  =  0
-x ? y  =  dec (0 ? dec y)
-
-0 ? x  =  0
-x ? y  =  dec (dec x ? x)
-
-0 ? x  =  0
-x ? y  =  dec (dec x ? y)
-
-0 ? x  =  0
-x ? y  =  dec (dec x ? 0)
-
-0 ? x  =  0
-x ? y  =  dec (dec y ? x)
-
-0 ? x  =  0
-x ? y  =  dec (dec y ? y)
-
-0 ? x  =  0
-x ? y  =  dec (dec y ? 0)
-
-0 ? x  =  dec x
-x ? y  =  x ? dec x
-
-0 ? x  =  dec x
-x ? y  =  x ? dec y
-
-0 ? x  =  dec x
-x ? y  =  y ? dec x
-
-0 ? x  =  dec x
-x ? y  =  y ? dec y
-
-0 ? x  =  dec x
-x ? y  =  0 ? dec x
-
-0 ? x  =  dec x
-x ? y  =  0 ? dec y
-
-0 ? x  =  dec x
-x ? y  =  dec x ? x
-
-0 ? x  =  dec x
-x ? y  =  dec x ? y
-
-0 ? x  =  dec x
-x ? y  =  dec x ? 0
-
-0 ? x  =  dec x
-x ? y  =  dec y ? x
-
-0 ? x  =  dec x
-x ? y  =  dec y ? y
-
-0 ? x  =  dec x
-x ? y  =  dec y ? 0
-
-0 ? x  =  dec 0
-x ? y  =  x ? dec x
-
-0 ? x  =  dec 0
-x ? y  =  x ? dec y
-
-0 ? x  =  dec 0
-x ? y  =  y ? dec x
-
-0 ? x  =  dec 0
-x ? y  =  y ? dec y
-
-0 ? x  =  dec 0
-x ? y  =  0 ? dec x
-
-0 ? x  =  dec 0
-x ? y  =  0 ? dec y
-
-0 ? x  =  dec 0
-x ? y  =  dec x ? x
-
-0 ? x  =  dec 0
-x ? y  =  dec x ? y
-
-0 ? x  =  dec 0
-x ? y  =  dec x ? 0
-
-0 ? x  =  dec 0
-x ? y  =  dec y ? x
-
-0 ? x  =  dec 0
-x ? y  =  dec y ? y
-
-0 ? x  =  dec 0
-x ? y  =  dec y ? 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x ? dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x ? dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y ? dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y ? dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  0 ? dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  0 ? dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec x ? x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec x ? y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec x ? 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec y ? x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec y ? y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec y ? 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x ? x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x ? 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x ? x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x ? 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x ? x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x ? 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x ? dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x ? dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y ? dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y ? dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  0 ? dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  0 ? dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec x ? x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec x ? y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec x ? 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec y ? x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec y ? y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec y ? 0
-
-0 ? 0  =  0
-0 ? x  =  x ? dec x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0 ? dec x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x ? dec x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0 ? dec x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x ? dec x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0 ? dec x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x ? dec x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0 ? dec x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x ? dec x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0 ? dec x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x ? dec x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0 ? dec x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x ? dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x ? dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y ? dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y ? dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  0 ? dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  0 ? dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec x ? x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec x ? y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec x ? 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec y ? x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec y ? y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec y ? 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x ? x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x ? 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x ? x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x ? 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x ? x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x ? 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x ? dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x ? dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y ? dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y ? dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  0 ? dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  0 ? dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec x ? x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec x ? y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec x ? 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec y ? x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec y ? y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec y ? 0
-
-x ? y  =  x + (dec x + y)
-
-x ? y  =  x + (dec y + x)
-
-x ? y  =  x + (dec 0 + x)
-
-x ? y  =  x + (dec 0 + y)
-
-x ? y  =  x + (x + dec x)
-
-x ? y  =  x + (x + dec y)
-
-x ? y  =  x + (x + dec 0)
-
-x ? y  =  x + (y + dec x)
-
-x ? y  =  x + (y + dec y)
-
-x ? y  =  x + (y + dec 0)
-
-x ? y  =  y + (dec x + y)
-
-x ? y  =  y + (dec y + x)
-
-x ? y  =  y + (dec 0 + x)
-
-x ? y  =  y + (dec 0 + y)
-
-x ? y  =  y + (x + dec x)
-
-x ? y  =  y + (x + dec y)
-
-x ? y  =  y + (x + dec 0)
-
-x ? y  =  y + (y + dec x)
-
-x ? y  =  y + (y + dec y)
-
-x ? y  =  y + (y + dec 0)
-
-x ? y  =  dec x + (y + y)
-
-x ? y  =  dec y + (x + x)
-
-x ? y  =  dec 0 + (x + x)
-
-x ? y  =  dec 0 + (x + y)
-
-x ? y  =  dec 0 + (y + x)
-
-x ? y  =  dec 0 + (y + y)
-
-x ? 0  =  x
-x ? y  =  x + (x + x)
-
-x ? 0  =  x
-x ? y  =  x + (x + y)
-
-x ? 0  =  x
-x ? y  =  x + (y + x)
-
-x ? 0  =  x
-x ? y  =  x + (y + y)
-
-x ? 0  =  x
-x ? y  =  y + (x + x)
-
-x ? 0  =  x
-x ? y  =  y + (x + y)
-
-x ? 0  =  x
-x ? y  =  y + (y + x)
-
-x ? 0  =  x
-x ? y  =  y + (y + y)
-
-x ? 0  =  x
-x ? y  =  dec x + dec x
-
-x ? 0  =  x
-x ? y  =  dec x + dec y
-
-x ? 0  =  x
-x ? y  =  dec x + dec 0
-
-x ? 0  =  x
-x ? y  =  dec y + dec x
-
-x ? 0  =  x
-x ? y  =  dec y + dec y
-
-x ? 0  =  x
-x ? y  =  dec y + dec 0
-
-x ? 0  =  x
-x ? y  =  dec 0 + dec x
-
-x ? 0  =  x
-x ? y  =  dec 0 + dec y
-
-x ? 0  =  x
-x ? y  =  dec 0 + dec 0
-
-x ? 0  =  0
-x ? y  =  x + (x + x)
-
-x ? 0  =  0
-x ? y  =  x + (x + y)
-
-x ? 0  =  0
-x ? y  =  x + (y + x)
-
-x ? 0  =  0
-x ? y  =  x + (y + y)
-
-x ? 0  =  0
-x ? y  =  y + (x + x)
-
-x ? 0  =  0
-x ? y  =  y + (x + y)
-
-x ? 0  =  0
-x ? y  =  y + (y + x)
-
-x ? 0  =  0
-x ? y  =  y + (y + y)
-
-x ? 0  =  0
-x ? y  =  dec x + dec x
-
-x ? 0  =  0
-x ? y  =  dec x + dec y
-
-x ? 0  =  0
-x ? y  =  dec x + dec 0
-
-x ? 0  =  0
-x ? y  =  dec y + dec x
-
-x ? 0  =  0
-x ? y  =  dec y + dec y
-
-x ? 0  =  0
-x ? y  =  dec y + dec 0
-
-x ? 0  =  0
-x ? y  =  dec 0 + dec x
-
-x ? 0  =  0
-x ? y  =  dec 0 + dec y
-
-x ? 0  =  0
-x ? y  =  dec 0 + dec 0
-
-x ? 0  =  dec x
-x ? y  =  dec x + y
-
-x ? 0  =  dec x
-x ? y  =  dec y + x
-
-x ? 0  =  dec x
-x ? y  =  dec 0 + x
-
-x ? 0  =  dec x
-x ? y  =  dec 0 + y
-
-x ? 0  =  dec x
-x ? y  =  x + dec x
-
-x ? 0  =  dec x
-x ? y  =  x + dec y
-
-x ? 0  =  dec x
-x ? y  =  x + dec 0
-
-x ? 0  =  dec x
-x ? y  =  y + dec x
-
-x ? 0  =  dec x
-x ? y  =  y + dec y
-
-x ? 0  =  dec x
-x ? y  =  y + dec 0
-
-x ? 0  =  dec 0
-x ? y  =  dec x + y
-
-x ? 0  =  dec 0
-x ? y  =  dec y + x
-
-x ? 0  =  dec 0
-x ? y  =  dec 0 + x
-
-x ? 0  =  dec 0
-x ? y  =  dec 0 + y
-
-x ? 0  =  dec 0
-x ? y  =  x + dec x
-
-x ? 0  =  dec 0
-x ? y  =  x + dec y
-
-x ? 0  =  dec 0
-x ? y  =  x + dec 0
-
-x ? 0  =  dec 0
-x ? y  =  y + dec x
-
-x ? 0  =  dec 0
-x ? y  =  y + dec y
-
-x ? 0  =  dec 0
-x ? y  =  y + dec 0
-
-x ? 0  =  x + x
-x ? y  =  x + y
-
-x ? 0  =  x + x
-x ? y  =  y + x
-
-x ? 0  =  x + x
-x ? y  =  y + y
-
-x ? 0  =  dec 0 + x
-x ? y  =  dec x
-
-x ? 0  =  dec 0 + x
-x ? y  =  dec y
-
-x ? 0  =  dec 0 + x
-x ? y  =  dec 0
-
-x ? 0  =  x + dec x
-x ? y  =  dec x
-
-x ? 0  =  x + dec x
-x ? y  =  dec y
-
-x ? 0  =  x + dec x
-x ? y  =  dec 0
-
-x ? 0  =  x + dec 0
-x ? y  =  dec x
-
-x ? 0  =  x + dec 0
-x ? y  =  dec y
-
-x ? 0  =  x + dec 0
-x ? y  =  dec 0
-
-x ? 0  =  x + (x + x)
-x ? y  =  x
-
-x ? 0  =  x + (x + x)
-x ? y  =  y
-
-x ? 0  =  x + (x + x)
-x ? y  =  0
-
-x ? 0  =  dec x + dec x
-x ? y  =  x
-
-x ? 0  =  dec x + dec x
-x ? y  =  y
-
-x ? 0  =  dec x + dec x
-x ? y  =  0
-
-x ? 0  =  dec x + dec 0
-x ? y  =  x
-
-x ? 0  =  dec x + dec 0
-x ? y  =  y
-
-x ? 0  =  dec x + dec 0
-x ? y  =  0
-
-x ? 0  =  dec 0 + dec x
-x ? y  =  x
-
-x ? 0  =  dec 0 + dec x
-x ? y  =  y
-
-x ? 0  =  dec 0 + dec x
-x ? y  =  0
-
-x ? 0  =  dec 0 + dec 0
-x ? y  =  x
-
-x ? 0  =  dec 0 + dec 0
-x ? y  =  y
-
-x ? 0  =  dec 0 + dec 0
-x ? y  =  0
-
-0 ? x  =  x
-x ? y  =  x + (x + x)
-
-0 ? x  =  x
-x ? y  =  x + (x + y)
-
-0 ? x  =  x
-x ? y  =  x + (y + x)
-
-0 ? x  =  x
-x ? y  =  x + (y + y)
-
-0 ? x  =  x
-x ? y  =  y + (x + x)
-
-0 ? x  =  x
-x ? y  =  y + (x + y)
-
-0 ? x  =  x
-x ? y  =  y + (y + x)
-
-0 ? x  =  x
-x ? y  =  y + (y + y)
-
-0 ? x  =  x
-x ? y  =  dec x + dec x
-
-0 ? x  =  x
-x ? y  =  dec x + dec y
-
-0 ? x  =  x
-x ? y  =  dec x + dec 0
-
-0 ? x  =  x
-x ? y  =  dec y + dec x
-
-0 ? x  =  x
-x ? y  =  dec y + dec y
-
-0 ? x  =  x
-x ? y  =  dec y + dec 0
-
-0 ? x  =  x
-x ? y  =  dec 0 + dec x
-
-0 ? x  =  x
-x ? y  =  dec 0 + dec y
-
-0 ? x  =  x
-x ? y  =  dec 0 + dec 0
-
-0 ? x  =  0
-x ? y  =  x + (x + x)
-
-0 ? x  =  0
-x ? y  =  x + (x + y)
-
-0 ? x  =  0
-x ? y  =  x + (y + x)
-
-0 ? x  =  0
-x ? y  =  x + (y + y)
-
-0 ? x  =  0
-x ? y  =  y + (x + x)
-
-0 ? x  =  0
-x ? y  =  y + (x + y)
-
-0 ? x  =  0
-x ? y  =  y + (y + x)
-
-0 ? x  =  0
-x ? y  =  y + (y + y)
-
-0 ? x  =  0
-x ? y  =  dec x + dec x
-
-0 ? x  =  0
-x ? y  =  dec x + dec y
-
-0 ? x  =  0
-x ? y  =  dec x + dec 0
-
-0 ? x  =  0
-x ? y  =  dec y + dec x
-
-0 ? x  =  0
-x ? y  =  dec y + dec y
-
-0 ? x  =  0
-x ? y  =  dec y + dec 0
-
-0 ? x  =  0
-x ? y  =  dec 0 + dec x
-
-0 ? x  =  0
-x ? y  =  dec 0 + dec y
-
-0 ? x  =  0
-x ? y  =  dec 0 + dec 0
-
-0 ? x  =  dec x
-x ? y  =  dec x + y
-
-0 ? x  =  dec x
-x ? y  =  dec y + x
-
-0 ? x  =  dec x
-x ? y  =  dec 0 + x
-
-0 ? x  =  dec x
-x ? y  =  dec 0 + y
-
-0 ? x  =  dec x
-x ? y  =  x + dec x
-
-0 ? x  =  dec x
-x ? y  =  x + dec y
-
-0 ? x  =  dec x
-x ? y  =  x + dec 0
-
-0 ? x  =  dec x
-x ? y  =  y + dec x
-
-0 ? x  =  dec x
-x ? y  =  y + dec y
-
-0 ? x  =  dec x
-x ? y  =  y + dec 0
-
-0 ? x  =  dec 0
-x ? y  =  dec x + y
-
-0 ? x  =  dec 0
-x ? y  =  dec y + x
-
-0 ? x  =  dec 0
-x ? y  =  dec 0 + x
-
-0 ? x  =  dec 0
-x ? y  =  dec 0 + y
-
-0 ? x  =  dec 0
-x ? y  =  x + dec x
-
-0 ? x  =  dec 0
-x ? y  =  x + dec y
-
-0 ? x  =  dec 0
-x ? y  =  x + dec 0
-
-0 ? x  =  dec 0
-x ? y  =  y + dec x
-
-0 ? x  =  dec 0
-x ? y  =  y + dec y
-
-0 ? x  =  dec 0
-x ? y  =  y + dec 0
-
-0 ? x  =  x + x
-x ? y  =  x + y
-
-0 ? x  =  x + x
-x ? y  =  y + x
-
-0 ? x  =  x + x
-x ? y  =  y + y
-
-0 ? x  =  dec 0 + x
-x ? y  =  dec x
-
-0 ? x  =  dec 0 + x
-x ? y  =  dec y
-
-0 ? x  =  dec 0 + x
-x ? y  =  dec 0
-
-0 ? x  =  x + dec x
-x ? y  =  dec x
-
-0 ? x  =  x + dec x
-x ? y  =  dec y
-
-0 ? x  =  x + dec x
-x ? y  =  dec 0
-
-0 ? x  =  x + dec 0
-x ? y  =  dec x
-
-0 ? x  =  x + dec 0
-x ? y  =  dec y
-
-0 ? x  =  x + dec 0
-x ? y  =  dec 0
-
-0 ? x  =  x + (x + x)
-x ? y  =  x
-
-0 ? x  =  x + (x + x)
-x ? y  =  y
-
-0 ? x  =  x + (x + x)
-x ? y  =  0
-
-0 ? x  =  dec x + dec x
-x ? y  =  x
-
-0 ? x  =  dec x + dec x
-x ? y  =  y
-
-0 ? x  =  dec x + dec x
-x ? y  =  0
-
-0 ? x  =  dec x + dec 0
-x ? y  =  x
-
-0 ? x  =  dec x + dec 0
-x ? y  =  y
-
-0 ? x  =  dec x + dec 0
-x ? y  =  0
-
-0 ? x  =  dec 0 + dec x
-x ? y  =  x
-
-0 ? x  =  dec 0 + dec x
-x ? y  =  y
-
-0 ? x  =  dec 0 + dec x
-x ? y  =  0
-
-0 ? x  =  dec 0 + dec 0
-x ? y  =  x
-
-0 ? x  =  dec 0 + dec 0
-x ? y  =  y
-
-0 ? x  =  dec 0 + dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec x + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec y + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec 0 + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  dec 0 + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x + dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x + dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x + dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y + dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y + dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y + dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec x + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec y + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec 0 + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  dec 0 + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x + dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x + dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x + dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y + dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y + dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y + dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0 + x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0 + x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  dec 0 + x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + dec x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + dec x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + dec x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + dec 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + dec 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x
-x ? 0  =  x + dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec x + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec y + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec 0 + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  dec 0 + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x + dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x + dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x + dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y + dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y + dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y + dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec x + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec y + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec 0 + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  dec 0 + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x + dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x + dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x + dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y + dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y + dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y + dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0 + x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0 + x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  dec 0 + x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + dec x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + dec x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + dec x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + dec 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + dec 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  0
-x ? 0  =  x + dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x + x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x + x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec x
-x ? 0  =  x + x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  x + x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  x + y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  y + x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  y + y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x + x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x + x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec 0
-x ? 0  =  x + x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x + x
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec 0 + x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec 0 + x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec 0 + x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  dec 0 + x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  dec 0 + x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  dec 0 + x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x + dec x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x + dec x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x + dec x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x + dec x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x + dec x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x + dec x
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x + dec 0
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x + dec 0
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x + dec 0
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  0
-0 ? x  =  x + dec 0
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  0
-0 ? x  =  x + dec 0
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  0
-0 ? x  =  x + dec 0
-x ? 0  =  0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x + x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  x + y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y + x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x
-x ? y  =  y + y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x + x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  x + y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y + x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  0
-x ? y  =  y + y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec x
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  dec 0
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  x
-x ? 0  =  x + x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x + x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  x + y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y + x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x
-x ? y  =  y + y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x + x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  x + y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y + x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  0
-x ? y  =  y + y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec x
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  dec 0
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  0
-x ? 0  =  x + x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec x
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  x
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  dec x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  dec y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  0
-x ? y  =  dec 0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  dec x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  dec 0
-x ? 0  =  dec 0
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  x + x
-x ? 0  =  x
-x ? y  =  0
-
-0 ? 0  =  dec 0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  x
-
-0 ? 0  =  dec 0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  y
-
-0 ? 0  =  dec 0
-0 ? x  =  x + x
-x ? 0  =  0
-x ? y  =  0
-
-
-Candidates for: goo :: [Int] -> [Int]
-  pruning with 4/4 rules
-  [2,0,1,0,1,0,1,0,1] direct candidates, 0 duplicates
-  [2,1,2,3,4,7,10,17,26] pattern candidates, 0 duplicates
-
-rules:
-xs ++ [] == xs
-[] ++ xs == xs
-(xs ++ ys) ++ zs == xs ++ (ys ++ zs)
-(x:xs) ++ ys == x:(xs ++ ys)
-
-direct candidates:
-
-goo xs  =  xs
-
-goo xs  =  []
-
-goo xs  =  xs ++ xs
-
-goo xs  =  xs ++ (xs ++ xs)
-
-
-pattern candidates:
-
-goo xs  =  xs
-
-goo xs  =  []
-
-goo []  =  []
-goo (x:xs)  =  xs
-
-goo []  =  []
-goo (x:xs)  =  goo xs
-
-goo xs  =  xs ++ xs
-
-goo []  =  []
-goo (x:xs)  =  x:xs
-
-goo []  =  []
-goo (x:xs)  =  [x]
-
-goo []  =  []
-goo (x:xs)  =  xs ++ xs
-
-goo []  =  []
-goo (x:xs)  =  x:goo xs
-
-goo []  =  []
-goo (x:xs)  =  xs ++ goo xs
-
-goo []  =  []
-goo (x:xs)  =  goo xs ++ xs
-
-goo xs  =  xs ++ (xs ++ xs)
-
-goo []  =  []
-goo (x:xs)  =  goo xs ++ goo xs
-
-goo []  =  []
-goo (x:xs)  =  x:x:xs
-
-goo []  =  []
-goo (x:xs)  =  [x,x]
-
-goo []  =  []
-goo (x:xs)  =  x:(xs ++ xs)
-
-goo []  =  []
-goo (x:xs)  =  xs ++ (x:xs)
-
-goo []  =  []
-goo (x:xs)  =  xs ++ [x]
-
-goo []  =  []
-goo (x:xs)  =  xs ++ (xs ++ xs)
-
-
-Candidates for: ?? :: [Int] -> [Int] -> [Int]
-  pruning with 4/4 rules
-  [3,0,4,0,8,0,16,0,32] direct candidates, 0 duplicates
-  [3,8,15,66,152,362,1400,2084,11820] pattern candidates, 0 duplicates
-
-rules:
-xs ++ [] == xs
-[] ++ xs == xs
-(xs ++ ys) ++ zs == xs ++ (ys ++ zs)
-(x:xs) ++ ys == x:(xs ++ ys)
-
-direct candidates:
-
-xs ?? ys  =  xs
-
-xs ?? ys  =  ys
-
-xs ?? ys  =  []
-
-xs ?? ys  =  xs ++ xs
-
-xs ?? ys  =  xs ++ ys
-
-xs ?? ys  =  ys ++ xs
-
-xs ?? ys  =  ys ++ ys
-
-xs ?? ys  =  xs ++ (xs ++ xs)
-
-xs ?? ys  =  xs ++ (xs ++ ys)
-
-xs ?? ys  =  xs ++ (ys ++ xs)
-
-xs ?? ys  =  xs ++ (ys ++ ys)
-
-xs ?? ys  =  ys ++ (xs ++ xs)
-
-xs ?? ys  =  ys ++ (xs ++ ys)
-
-xs ?? ys  =  ys ++ (ys ++ xs)
-
-xs ?? ys  =  ys ++ (ys ++ ys)
-
-
-pattern candidates:
-
-xs ?? ys  =  xs
-
-xs ?? ys  =  ys
-
-xs ?? ys  =  []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys
-
-xs ?? ys  =  xs ++ xs
-
-xs ?? ys  =  xs ++ ys
-
-xs ?? ys  =  ys ++ xs
-
-xs ?? ys  =  ys ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [] ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [] ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [] ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [] ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [x]
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [x]
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ ys
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  xs
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  ys
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [x]
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [x]
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ ys
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  xs
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  ys
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ?? []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ?? []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  [] ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  [] ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ?? xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ?? []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  [] ?? xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ?? xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ?? []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  [] ?? xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ?? xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ?? []
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  [] ?? xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ?? []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ?? []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  [] ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  [] ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [] ?? xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [] ?? xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [] ?? xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [] ?? xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [] ?? xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ?? []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [] ?? xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ?? []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ?? []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  [] ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  [] ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ?? xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ?? []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  [] ?? xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ?? xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ?? []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  [] ?? xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ?? xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ?? []
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  [] ?? xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ?? []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ?? ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ?? []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  [] ?? xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  [] ?? ys
-
-xs ?? ys  =  xs ++ (xs ++ xs)
-
-xs ?? ys  =  xs ++ (xs ++ ys)
-
-xs ?? ys  =  xs ++ (ys ++ xs)
-
-xs ?? ys  =  xs ++ (ys ++ ys)
-
-xs ?? ys  =  ys ++ (xs ++ xs)
-
-xs ?? ys  =  ys ++ (xs ++ ys)
-
-xs ?? ys  =  ys ++ (ys ++ xs)
-
-xs ?? ys  =  ys ++ (ys ++ ys)
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  x:xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  x:ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  [x]
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  y:xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  y:ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  [y]
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ++ xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ++ xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  x:xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  x:ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  [x]
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  y:xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  y:ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  [y]
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ++ xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ++ xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  x:xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  x:xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  x:xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  [x]
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  [x]
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  [x]
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ++ xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ++ xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs
-(x:xs) ?? []  =  xs ++ xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  x:xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  x:ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  [x]
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  y:xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  y:ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  [y]
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ++ xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ++ xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  x:xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  x:ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  [x]
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  y:xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  y:ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  [y]
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ++ xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ++ xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys ++ ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  x:xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  x:xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  x:xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  [x]
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  [x]
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  [x]
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ++ xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ++ xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  []
-(x:xs) ?? []  =  xs ++ xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  x:xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  x:xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  x:xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  x:xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  x:xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  x:xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [x]
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [x]
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [x]
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [x]
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [x]
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  [x]
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ++ xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ++ xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ++ xs
-(x:xs) ?? []  =  xs
-(x:xs) ?? (y:ys)  =  []
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ++ xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  xs
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ++ xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  ys
-
-[] ?? []  =  []
-[] ?? (x:xs)  =  xs ++ xs
-(x:xs) ?? []  =  []
-(x:xs) ?? (y:ys)  =  []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (x:xs) ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (x:xs) ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (x:xs) ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (x:ys) ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (x:ys) ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (x:ys) ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [x] ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [x] ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [x] ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (xs ++ xs) ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (xs ++ xs) ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (xs ++ xs) ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (xs ++ ys) ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (xs ++ ys) ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (xs ++ ys) ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (ys ++ xs) ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (ys ++ xs) ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (ys ++ xs) ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (ys ++ ys) ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (ys ++ ys) ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  (ys ++ ys) ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (x:xs) ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (x:xs) ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (x:xs) ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (x:ys) ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (x:ys) ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (x:ys) ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [x] ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [x] ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [x] ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (xs ++ xs) ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (xs ++ xs) ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (xs ++ xs) ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (xs ++ ys) ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (xs ++ ys) ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (xs ++ ys) ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (ys ++ xs) ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (ys ++ xs) ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (ys ++ xs) ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (ys ++ ys) ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (ys ++ ys) ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  (ys ++ ys) ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? (x:xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? (x:ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? [x]
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? (xs ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? (xs ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? (ys ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? (ys ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? (x:xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? (x:ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? [x]
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? (xs ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? (xs ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? (ys ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? (ys ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? (x:xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? (x:ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? [x]
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? (xs ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? (xs ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? (ys ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? (ys ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? (x:xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? (x:ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? [x]
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? (xs ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? (xs ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? (ys ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? (ys ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? (x:xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? (x:ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? [x]
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? (xs ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? (xs ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? (ys ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? (ys ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? (x:xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? (x:ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? [x]
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? (xs ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? (xs ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? (ys ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? (ys ++ ys)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:xs ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:xs ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:xs ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:ys ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:ys ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:ys ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [x,] ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [x,] ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ xs ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ xs ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ xs ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ ys ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ ys ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ ys ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ [] ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ [] ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ xs ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ xs ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ xs ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ ys ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ ys ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ ys ?? []
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ [] ?? xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ [] ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? xs ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? ys ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? [] ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? xs ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? ys ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? [] ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [] ?? xs ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [] ?? ys ++ xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? xs ++ ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? ys ++ ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ?? [] ++ ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? xs ++ ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? ys ++ ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ?? [] ++ ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [] ?? xs ++ ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [] ?? ys ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:xs ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:xs ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:xs ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:ys ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:ys ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:ys ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [x,] ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [x,] ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ xs ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ xs ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ xs ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ ys ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ ys ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ ys ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ [] ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ [] ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ xs ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ xs ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ xs ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ ys ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ ys ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ ys ?? []
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ [] ?? xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ [] ?? ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? xs ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? ys ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? [] ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? xs ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? ys ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? [] ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [] ?? xs ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [] ?? ys ++ xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? xs ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? ys ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ?? [] ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? xs ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? ys ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ?? [] ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [] ?? xs ++ ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [] ?? ys ++ ys
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  xs ?? xs
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  xs ?? ys
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  xs ?? []
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  ys ?? xs
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  ys ?? ys
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  ys ?? []
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  [] ?? xs
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  [] ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:xs ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:xs ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:xs ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:ys ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:ys ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:ys ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [x,] ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [x,] ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ xs ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ xs ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ xs ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ ys ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ ys ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ ys ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ [] ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ [] ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ xs ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ xs ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ xs ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ ys ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ ys ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ ys ?? []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ [] ?? xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ [] ?? ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? xs ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? ys ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? [] ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? xs ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? ys ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? [] ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? xs ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? ys ++ xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? xs ++ ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? ys ++ ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ?? [] ++ ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? xs ++ ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? ys ++ ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ?? [] ++ ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? xs ++ ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [] ?? ys ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:xs ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:xs ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:xs ?? []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:ys ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:ys ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:ys ?? []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [x,] ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [x,] ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ xs ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ xs ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ xs ?? []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ ys ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ ys ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ ys ?? []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ [] ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ [] ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ xs ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ xs ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ xs ?? []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ ys ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ ys ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ ys ?? []
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ [] ?? xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ [] ?? ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? xs ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? ys ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? [] ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? xs ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? ys ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? [] ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? xs ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? ys ++ xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? xs ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? ys ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ?? [] ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? xs ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? ys ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ?? [] ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? xs ++ ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [] ?? ys ++ ys
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  xs ?? xs
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  xs ?? ys
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  xs ?? []
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  ys ?? xs
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  ys ?? ys
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  ys ?? []
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  [] ?? xs
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  [] ?? ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:x:xs
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:x:ys
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  [x,x]
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:(xs ++ xs)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:(xs ++ ys)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:(ys ++ xs)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  x:(ys ++ ys)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ (x:xs)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ (x:ys)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ [x]
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ (xs ++ xs)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ (xs ++ ys)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ (ys ++ xs)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  xs ++ (ys ++ ys)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ (x:xs)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ (x:ys)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ [x]
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ (xs ++ xs)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ (xs ++ ys)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ (ys ++ xs)
-
-xs ?? []  =  xs
-xs ?? (x:ys)  =  ys ++ (ys ++ ys)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:x:xs
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:x:ys
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  [x,x]
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:(xs ++ xs)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:(xs ++ ys)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:(ys ++ xs)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  x:(ys ++ ys)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ (x:xs)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ (x:ys)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ [x]
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ (xs ++ xs)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ (xs ++ ys)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ (ys ++ xs)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  xs ++ (ys ++ ys)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ (x:xs)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ (x:ys)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ [x]
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ (xs ++ xs)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ (xs ++ ys)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ (ys ++ xs)
-
-xs ?? []  =  []
-xs ?? (x:ys)  =  ys ++ (ys ++ ys)
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  x:xs
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  x:ys
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  [x]
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  xs ++ ys
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  ys ++ xs
-
-xs ?? []  =  xs ++ xs
-xs ?? (x:ys)  =  ys ++ ys
-
-xs ?? []  =  xs ++ (xs ++ xs)
-xs ?? (x:ys)  =  xs
-
-xs ?? []  =  xs ++ (xs ++ xs)
-xs ?? (x:ys)  =  ys
-
-xs ?? []  =  xs ++ (xs ++ xs)
-xs ?? (x:ys)  =  []
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:x:xs
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:x:ys
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  [x,x]
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:(xs ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:(xs ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:(ys ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  x:(ys ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ (x:xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ (x:ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ [x]
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ (xs ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ (xs ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ (ys ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  xs ++ (ys ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ (x:xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ (x:ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ [x]
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ (xs ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ (xs ++ ys)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ (ys ++ xs)
-
-[] ?? xs  =  xs
-(x:xs) ?? ys  =  ys ++ (ys ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:x:xs
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:x:ys
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  [x,x]
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:(xs ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:(xs ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:(ys ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  x:(ys ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ (x:xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ (x:ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ [x]
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ (xs ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ (xs ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ (ys ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  xs ++ (ys ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ (x:xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ (x:ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ [x]
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ (xs ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ (xs ++ ys)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ (ys ++ xs)
-
-[] ?? xs  =  []
-(x:xs) ?? ys  =  ys ++ (ys ++ ys)
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  x:xs
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  x:ys
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  [x]
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  xs ++ ys
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  ys ++ xs
-
-[] ?? xs  =  xs ++ xs
-(x:xs) ?? ys  =  ys ++ ys
-
-[] ?? xs  =  xs ++ (xs ++ xs)
-(x:xs) ?? ys  =  xs
-
-[] ?? xs  =  xs ++ (xs ++ xs)
-(x:xs) ?? ys  =  ys
-
-[] ?? xs  =  xs ++ (xs ++ xs)
-(x:xs) ?? ys  =  []
-
-
-Candidates for: ton :: Bool -> Bool
-  pruning with 39/49 rules
-  [3,1,0,0,0,0,0,0,0] direct candidates, 0 duplicates
-  [3,3,0,0,0,0,0,0,0] pattern candidates, 0 duplicates
-
-rules:
-not False == True
-not True == False
-p && p == p
-p || p == p
-not (not p) == p
-p && False == False
-p && True == p
-False && p == False
-True && p == p
-p || False == p
-p || True == True
-False || p == p
-True || p == True
-not (p && q) == not p || not q
-not (p && q) == not q || not p
-not (p || q) == not p && not q
-not (p || q) == not q && not p
-p && not p == False
-not p && p == False
-p || not p == True
-not p || p == True
-(p && q) && r == p && (q && r)
-(p && q) && r == q && (p && r)
-(p || q) || r == p || (q || r)
-(p || q) || r == q || (p || r)
-p && (p && q) == p && q
-p && (q && p) == p && q
-p && (q && p) == q && p
-p || (p || q) == p || q
-p || (q || p) == p || q
-p || (q || p) == q || p
-p && (p || q) == p
-p && (q || p) == p
-(p || q) && p == p
-(p || q) && q == q
-p || p && q == p
-p || q && p == p
-p && q || p == p
-p && q || q == q
-equations:
-q && p == p && q
-q || p == p || q
-q && (p && r) == p && (q && r)
-r && (p && q) == p && (q && r)
-r && (q && p) == p && (q && r)
-q || (p || r) == p || (q || r)
-r || (p || q) == p || (q || r)
-r || (q || p) == p || (q || r)
-(r || q) && p == p && (q || r)
-r && q || p == p || q && r
-
-direct candidates:
-
-ton p  =  p
-
-ton p  =  False
-
-ton p  =  True
-
-ton p  =  not p
-
-
-pattern candidates:
-
-ton p  =  p
-
-ton p  =  False
-
-ton p  =  True
-
-ton p  =  not p
-
-ton False  =  False
-ton True  =  True
-
-ton False  =  True
-ton True  =  False
-
-
-Candidates for: &| :: Bool -> Bool -> Bool
-  pruning with 39/49 rules
-  [4,2,4,8,4,32,36,112,264] direct candidates, 0 duplicates
-  [4,14,30,8,4,32,36,112,264] pattern candidates, 0 duplicates
-
-rules:
-not False == True
-not True == False
-p && p == p
-p || p == p
-not (not p) == p
-p && False == False
-p && True == p
-False && p == False
-True && p == p
-p || False == p
-p || True == True
-False || p == p
-True || p == True
-not (p && q) == not p || not q
-not (p && q) == not q || not p
-not (p || q) == not p && not q
-not (p || q) == not q && not p
-p && not p == False
-not p && p == False
-p || not p == True
-not p || p == True
-(p && q) && r == p && (q && r)
-(p && q) && r == q && (p && r)
-(p || q) || r == p || (q || r)
-(p || q) || r == q || (p || r)
-p && (p && q) == p && q
-p && (q && p) == p && q
-p && (q && p) == q && p
-p || (p || q) == p || q
-p || (q || p) == p || q
-p || (q || p) == q || p
-p && (p || q) == p
-p && (q || p) == p
-(p || q) && p == p
-(p || q) && q == q
-p || p && q == p
-p || q && p == p
-p && q || p == p
-p && q || q == q
-equations:
-q && p == p && q
-q || p == p || q
-q && (p && r) == p && (q && r)
-r && (p && q) == p && (q && r)
-r && (q && p) == p && (q && r)
-q || (p || r) == p || (q || r)
-r || (p || q) == p || (q || r)
-r || (q || p) == p || (q || r)
-(r || q) && p == p && (q || r)
-r && q || p == p || q && r
-
-direct candidates:
-
-p &| q  =  p
-
-p &| q  =  q
-
-p &| q  =  False
-
-p &| q  =  True
-
-p &| q  =  not p
-
-p &| q  =  not q
-
-p &| q  =  p && q
-
-p &| q  =  q && p
-
-p &| q  =  p || q
-
-p &| q  =  q || p
-
-p &| q  =  not p && q
-
-p &| q  =  not q && p
-
-p &| q  =  not p || q
-
-p &| q  =  not q || p
-
-p &| q  =  p && not q
-
-p &| q  =  q && not p
-
-p &| q  =  p || not q
-
-p &| q  =  q || not p
-
-p &| q  =  not p && not q
-
-p &| q  =  not q && not p
-
-p &| q  =  not p || not q
-
-p &| q  =  not q || not p
-
-p &| q  =  p && (not p && q)
-
-p &| q  =  p && (not p || q)
-
-p &| q  =  p && (q && not p)
-
-p &| q  =  p && (q || not p)
-
-p &| q  =  q && (not q && p)
-
-p &| q  =  q && (not q || p)
-
-p &| q  =  q && (p && not q)
-
-p &| q  =  q && (p || not q)
-
-p &| q  =  p || not p && q
-
-p &| q  =  p || (not p || q)
-
-p &| q  =  p || q && not p
-
-p &| q  =  p || (q || not p)
-
-p &| q  =  q || not q && p
-
-p &| q  =  q || (not q || p)
-
-p &| q  =  q || p && not q
-
-p &| q  =  q || (p || not q)
-
-p &| q  =  not p && (p || q)
-
-p &| q  =  not p && (q || p)
-
-p &| q  =  not q && (p || q)
-
-p &| q  =  not q && (q || p)
-
-p &| q  =  not p || p && q
-
-p &| q  =  not p || q && p
-
-p &| q  =  not q || p && q
-
-p &| q  =  not q || q && p
-
-p &| q  =  (p || q) && not p
-
-p &| q  =  (p || q) && not q
-
-p &| q  =  (q || p) && not p
-
-p &| q  =  (q || p) && not q
-
-p &| q  =  p && q || not p
-
-p &| q  =  p && q || not q
-
-p &| q  =  q && p || not p
-
-p &| q  =  q && p || not q
-
-
-pattern candidates:
-
-p &| q  =  p
-
-p &| q  =  q
-
-p &| q  =  False
-
-p &| q  =  True
-
-p &| q  =  not p
-
-p &| q  =  not q
-
-p &| False  =  p
-p &| True  =  False
-
-p &| False  =  p
-p &| True  =  True
-
-p &| False  =  False
-p &| True  =  p
-
-p &| False  =  False
-p &| True  =  True
-
-p &| False  =  True
-p &| True  =  p
-
-p &| False  =  True
-p &| True  =  False
-
-False &| p  =  p
-True &| p  =  False
-
-False &| p  =  p
-True &| p  =  True
-
-False &| p  =  False
-True &| p  =  p
-
-False &| p  =  False
-True &| p  =  True
-
-False &| p  =  True
-True &| p  =  p
-
-False &| p  =  True
-True &| p  =  False
-
-p &| q  =  p && q
-
-p &| q  =  q && p
-
-p &| q  =  p || q
-
-p &| q  =  q || p
-
-p &| False  =  p
-p &| True  =  not p
-
-p &| False  =  False
-p &| True  =  not p
-
-p &| False  =  True
-p &| True  =  not p
-
-p &| False  =  not p
-p &| True  =  p
-
-p &| False  =  not p
-p &| True  =  False
-
-p &| False  =  not p
-p &| True  =  True
-
-False &| p  =  p
-True &| p  =  not p
-
-False &| p  =  False
-True &| p  =  not p
-
-False &| p  =  True
-True &| p  =  not p
-
-False &| p  =  not p
-True &| p  =  p
-
-False &| p  =  not p
-True &| p  =  False
-
-False &| p  =  not p
-True &| p  =  True
-
-False &| False  =  False
-False &| True  =  False
-True &| False  =  False
-True &| True  =  True
-
-False &| False  =  False
-False &| True  =  False
-True &| False  =  True
-True &| True  =  False
-
-False &| False  =  False
-False &| True  =  False
-True &| False  =  True
-True &| True  =  True
-
-False &| False  =  False
-False &| True  =  True
-True &| False  =  False
-True &| True  =  False
-
-False &| False  =  False
-False &| True  =  True
-True &| False  =  False
-True &| True  =  True
-
-False &| False  =  False
-False &| True  =  True
-True &| False  =  True
-True &| True  =  False
-
-False &| False  =  False
-False &| True  =  True
-True &| False  =  True
-True &| True  =  True
-
-False &| False  =  True
-False &| True  =  False
-True &| False  =  False
-True &| True  =  False
-
-False &| False  =  True
-False &| True  =  False
-True &| False  =  False
-True &| True  =  True
-
-False &| False  =  True
-False &| True  =  False
-True &| False  =  True
-True &| True  =  False
-
-False &| False  =  True
-False &| True  =  False
-True &| False  =  True
-True &| True  =  True
-
-False &| False  =  True
-False &| True  =  True
-True &| False  =  False
-True &| True  =  False
-
-False &| False  =  True
-False &| True  =  True
-True &| False  =  False
-True &| True  =  True
-
-False &| False  =  True
-False &| True  =  True
-True &| False  =  True
-True &| True  =  False
-
-p &| q  =  not p && q
-
-p &| q  =  not q && p
-
-p &| q  =  not p || q
-
-p &| q  =  not q || p
-
-p &| q  =  p && not q
-
-p &| q  =  q && not p
-
-p &| q  =  p || not q
-
-p &| q  =  q || not p
-
-p &| q  =  not p && not q
-
-p &| q  =  not q && not p
-
-p &| q  =  not p || not q
-
-p &| q  =  not q || not p
-
-p &| q  =  p && (not p && q)
-
-p &| q  =  p && (not p || q)
-
-p &| q  =  p && (q && not p)
-
-p &| q  =  p && (q || not p)
-
-p &| q  =  q && (not q && p)
-
-p &| q  =  q && (not q || p)
-
-p &| q  =  q && (p && not q)
-
-p &| q  =  q && (p || not q)
-
-p &| q  =  p || not p && q
-
-p &| q  =  p || (not p || q)
-
-p &| q  =  p || q && not p
-
-p &| q  =  p || (q || not p)
-
-p &| q  =  q || not q && p
-
-p &| q  =  q || (not q || p)
-
-p &| q  =  q || p && not q
-
-p &| q  =  q || (p || not q)
-
-p &| q  =  not p && (p || q)
-
-p &| q  =  not p && (q || p)
-
-p &| q  =  not q && (p || q)
-
-p &| q  =  not q && (q || p)
-
-p &| q  =  not p || p && q
-
-p &| q  =  not p || q && p
-
-p &| q  =  not q || p && q
-
-p &| q  =  not q || q && p
+  pruning with 15/35 rules
+  [3,0,7,0,20,0,75,0,297] direct candidates, 0 duplicates
+  [3,4,12,32,54,139,287,691,1713] pattern candidates, 0 duplicates
+
+rules:
+x * y == x + y
+x * y == y + x
+x - x == 0
+x + 0 == x
+0 + x == x
+x - 0 == x
+(x + y) + z == x + (y + z)
+(x + y) + z == y + (x + z)
+x - (y - z) == z + (x - y)
+(x - y) - z == x - (y + z)
+(x - y) - z == x - (z + y)
+(x + y) - z == x + (y - z)
+(x + y) - z == y + (x - z)
+x + (y - x) == y
+(x - y) + y == x
+equations:
+y + x == x + y
+y + (x + z) == x + (y + z)
+z + (x + y) == x + (y + z)
+z + (y + x) == x + (y + z)
+y + (x - z) == x + (y - z)
+(x - z) + y == x + (y - z)
+(z - y) + x == (x - y) + z
+y - (x + y) == 0 - x
+y - (y + x) == 0 - x
+z - (y + z) == x - (x + y)
+z - (y + z) == x - (y + x)
+z - (z + y) == x - (x + y)
+z - (z + y) == x - (y + x)
+x + (0 - y) == x - y
+(0 - y) + x == x - y
+x - (x + 1) == 0 - 1
+x - (1 + x) == 0 - 1
+y - (y + 1) == x - (x + 1)
+y - (y + 1) == x - (1 + x)
+y - (1 + y) == x - (1 + x)
+
+direct candidates:
+
+foo x  =  x
+
+foo x  =  0
+
+foo x  =  1
+
+foo x  =  x + x
+
+foo x  =  x + 1
+
+foo x  =  1 + x
+
+foo x  =  1 + 1
+
+foo x  =  x - 1
+
+foo x  =  0 - x
+
+foo x  =  0 - 1
+
+foo x  =  (0 - 1) + x
+
+foo x  =  x + (x + x)
+
+foo x  =  x + (x + 1)
+
+foo x  =  x + (1 + x)
+
+foo x  =  x + (1 + 1)
+
+foo x  =  x + (x - 1)
+
+foo x  =  x + (0 - 1)
+
+foo x  =  1 + (x + x)
+
+foo x  =  1 + (x + 1)
+
+foo x  =  1 + (1 + x)
+
+foo x  =  1 + (1 + 1)
+
+foo x  =  1 + (0 - x)
+
+foo x  =  x - (x + x)
+
+foo x  =  x - (x + 1)
+
+foo x  =  x - (1 + x)
+
+foo x  =  x - (1 + 1)
+
+foo x  =  0 - (x + x)
+
+foo x  =  0 - (x + 1)
+
+foo x  =  0 - (1 + x)
+
+foo x  =  0 - (1 + 1)
+
+
+pattern candidates:
+
+foo x  =  x
+
+foo x  =  0
+
+foo x  =  1
+
+foo 0  =  0
+foo x  =  x
+
+foo 0  =  0
+foo x  =  1
+
+foo 0  =  1
+foo x  =  x
+
+foo 0  =  1
+foo x  =  0
+
+foo x  =  x + x
+
+foo x  =  x + 1
+
+foo x  =  1 + x
+
+foo x  =  1 + 1
+
+foo x  =  x - 1
+
+foo x  =  0 - x
+
+foo x  =  0 - 1
+
+foo x  =  1 - x
+
+foo 1  =  0
+foo x  =  x
+
+foo 1  =  0
+foo x  =  1
+
+foo 1  =  1
+foo x  =  x
+
+foo 1  =  1
+foo x  =  0
+
+foo 0  =  0
+foo x  =  x + x
+
+foo 0  =  0
+foo x  =  x + 1
+
+foo 0  =  0
+foo x  =  1 + x
+
+foo 0  =  0
+foo x  =  1 + 1
+
+foo 0  =  0
+foo x  =  x - 1
+
+foo 0  =  0
+foo x  =  0 - x
+
+foo 0  =  0
+foo x  =  0 - 1
+
+foo 0  =  0
+foo x  =  1 - x
+
+foo 0  =  1
+foo x  =  x + x
+
+foo 0  =  1
+foo x  =  x + 1
+
+foo 0  =  1
+foo x  =  1 + x
+
+foo 0  =  1
+foo x  =  1 + 1
+
+foo 0  =  1
+foo x  =  x - 1
+
+foo 0  =  1
+foo x  =  0 - x
+
+foo 0  =  1
+foo x  =  0 - 1
+
+foo 0  =  1
+foo x  =  1 - x
+
+foo 0  =  1 + 1
+foo x  =  x
+
+foo 0  =  1 + 1
+foo x  =  0
+
+foo 0  =  1 + 1
+foo x  =  1
+
+foo 0  =  0 - 1
+foo x  =  x
+
+foo 0  =  0 - 1
+foo x  =  0
+
+foo 0  =  0 - 1
+foo x  =  1
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  x
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  1
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  x
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  0
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  1
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  x
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  0
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  1
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  x
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  0
+
+foo 0  =  0
+foo x  =  foo (x - 1)
+
+foo 0  =  0
+foo x  =  foo (1 - x)
+
+foo 0  =  1
+foo x  =  foo (x - 1)
+
+foo 0  =  1
+foo x  =  foo (1 - x)
+
+foo x  =  (x - 1) + x
+
+foo x  =  (0 - x) + 1
+
+foo x  =  (0 - 1) + x
+
+foo x  =  (1 - x) + 1
+
+foo x  =  x + (x + x)
+
+foo x  =  x + (x + 1)
+
+foo x  =  x + (1 + x)
+
+foo x  =  x + (1 + 1)
+
+foo x  =  x + (x - 1)
+
+foo x  =  x + (0 - 1)
+
+foo x  =  1 + (x + x)
+
+foo x  =  1 + (x + 1)
+
+foo x  =  1 + (1 + x)
+
+foo x  =  1 + (1 + 1)
+
+foo x  =  1 + (0 - x)
+
+foo x  =  1 + (1 - x)
+
+foo x  =  x - (x + x)
+
+foo x  =  x - (x + 1)
+
+foo x  =  x - (1 + x)
+
+foo x  =  x - (1 + 1)
+
+foo x  =  0 - (x + x)
+
+foo x  =  0 - (x + 1)
+
+foo x  =  0 - (1 + x)
+
+foo x  =  0 - (1 + 1)
+
+foo x  =  1 - (x + x)
+
+foo x  =  1 - (x + 1)
+
+foo x  =  1 - (1 + x)
+
+foo x  =  1 - (1 + 1)
+
+foo 1  =  0
+foo x  =  x + x
+
+foo 1  =  0
+foo x  =  x + 1
+
+foo 1  =  0
+foo x  =  1 + x
+
+foo 1  =  0
+foo x  =  1 + 1
+
+foo 1  =  0
+foo x  =  x - 1
+
+foo 1  =  0
+foo x  =  0 - x
+
+foo 1  =  0
+foo x  =  0 - 1
+
+foo 1  =  0
+foo x  =  1 - x
+
+foo 1  =  1
+foo x  =  x + x
+
+foo 1  =  1
+foo x  =  x + 1
+
+foo 1  =  1
+foo x  =  1 + x
+
+foo 1  =  1
+foo x  =  1 + 1
+
+foo 1  =  1
+foo x  =  x - 1
+
+foo 1  =  1
+foo x  =  0 - x
+
+foo 1  =  1
+foo x  =  0 - 1
+
+foo 1  =  1
+foo x  =  1 - x
+
+foo 1  =  1 + 1
+foo x  =  x
+
+foo 1  =  1 + 1
+foo x  =  0
+
+foo 1  =  1 + 1
+foo x  =  1
+
+foo 1  =  0 - 1
+foo x  =  x
+
+foo 1  =  0 - 1
+foo x  =  0
+
+foo 1  =  0 - 1
+foo x  =  1
+
+foo 1  =  0
+foo x  =  foo (x - 1)
+
+foo 1  =  0
+foo x  =  foo (1 - x)
+
+foo 1  =  1
+foo x  =  foo (x - 1)
+
+foo 1  =  1
+foo x  =  foo (1 - x)
+
+foo 0  =  0
+foo x  =  (x - 1) + x
+
+foo 0  =  0
+foo x  =  (0 - x) + 1
+
+foo 0  =  0
+foo x  =  (0 - 1) + x
+
+foo 0  =  0
+foo x  =  (1 - x) + 1
+
+foo 0  =  0
+foo x  =  x + (x + x)
+
+foo 0  =  0
+foo x  =  x + (x + 1)
+
+foo 0  =  0
+foo x  =  x + (1 + x)
+
+foo 0  =  0
+foo x  =  x + (1 + 1)
+
+foo 0  =  0
+foo x  =  x + (x - 1)
+
+foo 0  =  0
+foo x  =  x + (0 - 1)
+
+foo 0  =  0
+foo x  =  1 + (x + x)
+
+foo 0  =  0
+foo x  =  1 + (x + 1)
+
+foo 0  =  0
+foo x  =  1 + (1 + x)
+
+foo 0  =  0
+foo x  =  1 + (1 + 1)
+
+foo 0  =  0
+foo x  =  1 + (0 - x)
+
+foo 0  =  0
+foo x  =  1 + (1 - x)
+
+foo 0  =  0
+foo x  =  x - (x + x)
+
+foo 0  =  0
+foo x  =  x - (x + 1)
+
+foo 0  =  0
+foo x  =  x - (1 + x)
+
+foo 0  =  0
+foo x  =  x - (1 + 1)
+
+foo 0  =  0
+foo x  =  0 - (x + x)
+
+foo 0  =  0
+foo x  =  0 - (x + 1)
+
+foo 0  =  0
+foo x  =  0 - (1 + x)
+
+foo 0  =  0
+foo x  =  0 - (1 + 1)
+
+foo 0  =  0
+foo x  =  1 - (x + x)
+
+foo 0  =  0
+foo x  =  1 - (x + 1)
+
+foo 0  =  0
+foo x  =  1 - (1 + x)
+
+foo 0  =  0
+foo x  =  1 - (1 + 1)
+
+foo 0  =  1
+foo x  =  (x - 1) + x
+
+foo 0  =  1
+foo x  =  (0 - x) + 1
+
+foo 0  =  1
+foo x  =  (0 - 1) + x
+
+foo 0  =  1
+foo x  =  (1 - x) + 1
+
+foo 0  =  1
+foo x  =  x + (x + x)
+
+foo 0  =  1
+foo x  =  x + (x + 1)
+
+foo 0  =  1
+foo x  =  x + (1 + x)
+
+foo 0  =  1
+foo x  =  x + (1 + 1)
+
+foo 0  =  1
+foo x  =  x + (x - 1)
+
+foo 0  =  1
+foo x  =  x + (0 - 1)
+
+foo 0  =  1
+foo x  =  1 + (x + x)
+
+foo 0  =  1
+foo x  =  1 + (x + 1)
+
+foo 0  =  1
+foo x  =  1 + (1 + x)
+
+foo 0  =  1
+foo x  =  1 + (1 + 1)
+
+foo 0  =  1
+foo x  =  1 + (0 - x)
+
+foo 0  =  1
+foo x  =  1 + (1 - x)
+
+foo 0  =  1
+foo x  =  x - (x + x)
+
+foo 0  =  1
+foo x  =  x - (x + 1)
+
+foo 0  =  1
+foo x  =  x - (1 + x)
+
+foo 0  =  1
+foo x  =  x - (1 + 1)
+
+foo 0  =  1
+foo x  =  0 - (x + x)
+
+foo 0  =  1
+foo x  =  0 - (x + 1)
+
+foo 0  =  1
+foo x  =  0 - (1 + x)
+
+foo 0  =  1
+foo x  =  0 - (1 + 1)
+
+foo 0  =  1
+foo x  =  1 - (x + x)
+
+foo 0  =  1
+foo x  =  1 - (x + 1)
+
+foo 0  =  1
+foo x  =  1 - (1 + x)
+
+foo 0  =  1
+foo x  =  1 - (1 + 1)
+
+foo 0  =  1 + 1
+foo x  =  x + x
+
+foo 0  =  1 + 1
+foo x  =  x + 1
+
+foo 0  =  1 + 1
+foo x  =  1 + x
+
+foo 0  =  1 + 1
+foo x  =  x - 1
+
+foo 0  =  1 + 1
+foo x  =  0 - x
+
+foo 0  =  1 + 1
+foo x  =  0 - 1
+
+foo 0  =  1 + 1
+foo x  =  1 - x
+
+foo 0  =  0 - 1
+foo x  =  x + x
+
+foo 0  =  0 - 1
+foo x  =  x + 1
+
+foo 0  =  0 - 1
+foo x  =  1 + x
+
+foo 0  =  0 - 1
+foo x  =  1 + 1
+
+foo 0  =  0 - 1
+foo x  =  x - 1
+
+foo 0  =  0 - 1
+foo x  =  0 - x
+
+foo 0  =  0 - 1
+foo x  =  1 - x
+
+foo 0  =  1 + (1 + 1)
+foo x  =  x
+
+foo 0  =  1 + (1 + 1)
+foo x  =  0
+
+foo 0  =  1 + (1 + 1)
+foo x  =  1
+
+foo 0  =  0 - (1 + 1)
+foo x  =  x
+
+foo 0  =  0 - (1 + 1)
+foo x  =  0
+
+foo 0  =  0 - (1 + 1)
+foo x  =  1
+
+foo 0  =  1 - (1 + 1)
+foo x  =  x
+
+foo 0  =  1 - (1 + 1)
+foo x  =  0
+
+foo 0  =  1 - (1 + 1)
+foo x  =  1
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  x + x
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  x + 1
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  1 + x
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  1 + 1
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  x - 1
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  0 - x
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  0 - 1
+
+foo 0  =  0
+foo 1  =  0
+foo x  =  1 - x
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  x + x
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  x + 1
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  1 + x
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  1 + 1
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  x - 1
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  0 - x
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  0 - 1
+
+foo 0  =  0
+foo 1  =  1
+foo x  =  1 - x
+
+foo 0  =  0
+foo 1  =  1 + 1
+foo x  =  x
+
+foo 0  =  0
+foo 1  =  1 + 1
+foo x  =  0
+
+foo 0  =  0
+foo 1  =  1 + 1
+foo x  =  1
+
+foo 0  =  0
+foo 1  =  0 - 1
+foo x  =  x
+
+foo 0  =  0
+foo 1  =  0 - 1
+foo x  =  0
+
+foo 0  =  0
+foo 1  =  0 - 1
+foo x  =  1
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  x + x
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  x + 1
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  1 + x
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  1 + 1
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  x - 1
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  0 - x
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  0 - 1
+
+foo 0  =  1
+foo 1  =  0
+foo x  =  1 - x
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  x + x
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  x + 1
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  1 + x
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  1 + 1
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  x - 1
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  0 - x
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  0 - 1
+
+foo 0  =  1
+foo 1  =  1
+foo x  =  1 - x
+
+foo 0  =  1
+foo 1  =  1 + 1
+foo x  =  x
+
+foo 0  =  1
+foo 1  =  1 + 1
+foo x  =  0
+
+foo 0  =  1
+foo 1  =  1 + 1
+foo x  =  1
+
+foo 0  =  1
+foo 1  =  0 - 1
+foo x  =  x
+
+foo 0  =  1
+foo 1  =  0 - 1
+foo x  =  0
+
+foo 0  =  1
+foo 1  =  0 - 1
+foo x  =  1
+
+foo 0  =  1 + 1
+foo 1  =  0
+foo x  =  x
+
+foo 0  =  1 + 1
+foo 1  =  0
+foo x  =  0
+
+foo 0  =  1 + 1
+foo 1  =  0
+foo x  =  1
+
+foo 0  =  1 + 1
+foo 1  =  1
+foo x  =  x
+
+foo 0  =  1 + 1
+foo 1  =  1
+foo x  =  0
+
+foo 0  =  1 + 1
+foo 1  =  1
+foo x  =  1
+
+foo 0  =  0 - 1
+foo 1  =  0
+foo x  =  x
+
+foo 0  =  0 - 1
+foo 1  =  0
+foo x  =  0
+
+foo 0  =  0 - 1
+foo 1  =  0
+foo x  =  1
+
+foo 0  =  0 - 1
+foo 1  =  1
+foo x  =  x
+
+foo 0  =  0 - 1
+foo 1  =  1
+foo x  =  0
+
+foo 0  =  0 - 1
+foo 1  =  1
+foo x  =  1
+
+
+Candidates for: ? :: Int -> Int -> Int
+  pruning with 10/23 rules
+  [3,3,4,10,17,26,54,93,162] direct candidates, 0 duplicates
+  [3,11,42,117,346,955,2714,7510,20754] pattern candidates, 0 duplicates
+
+rules:
+x * y == x + y
+x * y == y + x
+x + 0 == x
+0 + x == x
+dec (x + y) == x + dec y
+dec (x + y) == y + dec x
+dec (x + y) == dec x + y
+dec (x + y) == dec y + x
+(x + y) + z == x + (y + z)
+(x + y) + z == y + (x + z)
+equations:
+y + x == x + y
+y + dec x == x + dec y
+dec x + y == x + dec y
+dec y + x == dec x + y
+x + dec 0 == dec x
+dec 0 + x == dec x
+y + (x + z) == x + (y + z)
+z + (x + y) == x + (y + z)
+z + (y + x) == x + (y + z)
+y + dec (dec x) == x + dec (dec y)
+dec (dec x) + y == x + dec (dec y)
+x + dec (dec 0) == dec (dec x)
+dec (dec 0) + x == dec (dec x)
+
+direct candidates:
+
+x ? y  =  x
+
+x ? y  =  y
+
+x ? y  =  0
+
+x ? y  =  dec x
+
+x ? y  =  dec y
+
+x ? y  =  dec 0
+
+x ? y  =  x + x
+
+x ? y  =  x + y
+
+x ? y  =  y + x
+
+x ? y  =  y + y
+
+x ? y  =  dec x + y
+
+x ? y  =  dec y + x
+
+x ? y  =  dec 0 + x
+
+x ? y  =  dec 0 + y
+
+x ? y  =  x + dec x
+
+x ? y  =  x + dec y
+
+x ? y  =  x + dec 0
+
+x ? y  =  y + dec x
+
+x ? y  =  y + dec y
+
+x ? y  =  y + dec 0
+
+x ? y  =  x + (x + x)
+
+x ? y  =  x + (x + y)
+
+x ? y  =  x + (y + x)
+
+x ? y  =  x + (y + y)
+
+x ? y  =  y + (x + x)
+
+x ? y  =  y + (x + y)
+
+x ? y  =  y + (y + x)
+
+x ? y  =  y + (y + y)
+
+x ? y  =  dec x + dec x
+
+x ? y  =  dec x + dec y
+
+x ? y  =  dec x + dec 0
+
+x ? y  =  dec y + dec x
+
+x ? y  =  dec y + dec y
+
+x ? y  =  dec y + dec 0
+
+x ? y  =  dec 0 + dec x
+
+x ? y  =  dec 0 + dec y
+
+x ? y  =  dec 0 + dec 0
+
+x ? y  =  x + (dec x + y)
+
+x ? y  =  x + (dec y + x)
+
+x ? y  =  x + (dec 0 + x)
+
+x ? y  =  x + (dec 0 + y)
+
+x ? y  =  x + (x + dec x)
+
+x ? y  =  x + (x + dec y)
+
+x ? y  =  x + (x + dec 0)
+
+x ? y  =  x + (y + dec x)
+
+x ? y  =  x + (y + dec y)
+
+x ? y  =  x + (y + dec 0)
+
+x ? y  =  y + (dec x + y)
+
+x ? y  =  y + (dec y + x)
+
+x ? y  =  y + (dec 0 + x)
+
+x ? y  =  y + (dec 0 + y)
+
+x ? y  =  y + (x + dec x)
+
+x ? y  =  y + (x + dec y)
+
+x ? y  =  y + (x + dec 0)
+
+x ? y  =  y + (y + dec x)
+
+x ? y  =  y + (y + dec y)
+
+x ? y  =  y + (y + dec 0)
+
+x ? y  =  dec x + (y + y)
+
+x ? y  =  dec y + (x + x)
+
+x ? y  =  dec 0 + (x + x)
+
+x ? y  =  dec 0 + (x + y)
+
+x ? y  =  dec 0 + (y + x)
+
+x ? y  =  dec 0 + (y + y)
+
+
+pattern candidates:
+
+x ? y  =  x
+
+x ? y  =  y
+
+x ? y  =  0
+
+x ? y  =  dec x
+
+x ? y  =  dec y
+
+x ? y  =  dec 0
+
+x ? 0  =  x
+x ? y  =  y
+
+x ? 0  =  x
+x ? y  =  0
+
+x ? 0  =  0
+x ? y  =  x
+
+x ? 0  =  0
+x ? y  =  y
+
+0 ? x  =  x
+x ? y  =  y
+
+0 ? x  =  x
+x ? y  =  0
+
+0 ? x  =  0
+x ? y  =  x
+
+0 ? x  =  0
+x ? y  =  y
+
+x ? y  =  x + x
+
+x ? y  =  x + y
+
+x ? y  =  y + x
+
+x ? y  =  y + y
+
+x ? y  =  dec (dec x)
+
+x ? y  =  dec (dec y)
+
+x ? y  =  dec (dec 0)
+
+x ? 0  =  x
+x ? y  =  dec x
+
+x ? 0  =  x
+x ? y  =  dec y
+
+x ? 0  =  x
+x ? y  =  dec 0
+
+x ? 0  =  0
+x ? y  =  dec x
+
+x ? 0  =  0
+x ? y  =  dec y
+
+x ? 0  =  0
+x ? y  =  dec 0
+
+x ? 0  =  dec x
+x ? y  =  x
+
+x ? 0  =  dec x
+x ? y  =  y
+
+x ? 0  =  dec x
+x ? y  =  0
+
+x ? 0  =  dec 0
+x ? y  =  x
+
+x ? 0  =  dec 0
+x ? y  =  y
+
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? x  =  x
+x ? y  =  dec x
+
+0 ? x  =  x
+x ? y  =  dec y
+
+0 ? x  =  x
+x ? y  =  dec 0
+
+0 ? x  =  0
+x ? y  =  dec x
+
+0 ? x  =  0
+x ? y  =  dec y
+
+0 ? x  =  0
+x ? y  =  dec 0
+
+0 ? x  =  dec x
+x ? y  =  x
+
+0 ? x  =  dec x
+x ? y  =  y
+
+0 ? x  =  dec x
+x ? y  =  0
+
+0 ? x  =  dec 0
+x ? y  =  x
+
+0 ? x  =  dec 0
+x ? y  =  y
+
+0 ? x  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y
+
+x ? y  =  dec x + x
+
+x ? y  =  dec x + y
+
+x ? y  =  dec y + x
+
+x ? y  =  dec y + y
+
+x ? y  =  dec 0 + x
+
+x ? y  =  dec 0 + y
+
+x ? y  =  dec (dec (dec x))
+
+x ? y  =  dec (dec (dec y))
+
+x ? y  =  dec (dec (dec 0))
+
+x ? y  =  x + dec x
+
+x ? y  =  x + dec y
+
+x ? y  =  x + dec 0
+
+x ? y  =  y + dec x
+
+x ? y  =  y + dec y
+
+x ? y  =  y + dec 0
+
+x ? 0  =  x
+x ? y  =  x + x
+
+x ? 0  =  x
+x ? y  =  x + y
+
+x ? 0  =  x
+x ? y  =  y + x
+
+x ? 0  =  x
+x ? y  =  y + y
+
+x ? 0  =  x
+x ? y  =  dec (dec x)
+
+x ? 0  =  x
+x ? y  =  dec (dec y)
+
+x ? 0  =  x
+x ? y  =  dec (dec 0)
+
+x ? 0  =  0
+x ? y  =  x + x
+
+x ? 0  =  0
+x ? y  =  x + y
+
+x ? 0  =  0
+x ? y  =  y + x
+
+x ? 0  =  0
+x ? y  =  y + y
+
+x ? 0  =  0
+x ? y  =  dec (dec x)
+
+x ? 0  =  0
+x ? y  =  dec (dec y)
+
+x ? 0  =  0
+x ? y  =  dec (dec 0)
+
+x ? 0  =  dec x
+x ? y  =  dec y
+
+x ? 0  =  dec x
+x ? y  =  dec 0
+
+x ? 0  =  dec 0
+x ? y  =  dec x
+
+x ? 0  =  dec 0
+x ? y  =  dec y
+
+x ? 0  =  x + x
+x ? y  =  x
+
+x ? 0  =  x + x
+x ? y  =  y
+
+x ? 0  =  x + x
+x ? y  =  0
+
+x ? 0  =  dec (dec x)
+x ? y  =  x
+
+x ? 0  =  dec (dec x)
+x ? y  =  y
+
+x ? 0  =  dec (dec x)
+x ? y  =  0
+
+x ? 0  =  dec (dec 0)
+x ? y  =  x
+
+x ? 0  =  dec (dec 0)
+x ? y  =  y
+
+x ? 0  =  dec (dec 0)
+x ? y  =  0
+
+0 ? x  =  x
+x ? y  =  x + x
+
+0 ? x  =  x
+x ? y  =  x + y
+
+0 ? x  =  x
+x ? y  =  y + x
+
+0 ? x  =  x
+x ? y  =  y + y
+
+0 ? x  =  x
+x ? y  =  dec (dec x)
+
+0 ? x  =  x
+x ? y  =  dec (dec y)
+
+0 ? x  =  x
+x ? y  =  dec (dec 0)
+
+0 ? x  =  0
+x ? y  =  x + x
+
+0 ? x  =  0
+x ? y  =  x + y
+
+0 ? x  =  0
+x ? y  =  y + x
+
+0 ? x  =  0
+x ? y  =  y + y
+
+0 ? x  =  0
+x ? y  =  dec (dec x)
+
+0 ? x  =  0
+x ? y  =  dec (dec y)
+
+0 ? x  =  0
+x ? y  =  dec (dec 0)
+
+0 ? x  =  dec x
+x ? y  =  dec y
+
+0 ? x  =  dec x
+x ? y  =  dec 0
+
+0 ? x  =  dec 0
+x ? y  =  dec x
+
+0 ? x  =  dec 0
+x ? y  =  dec y
+
+0 ? x  =  x + x
+x ? y  =  x
+
+0 ? x  =  x + x
+x ? y  =  y
+
+0 ? x  =  x + x
+x ? y  =  0
+
+0 ? x  =  dec (dec x)
+x ? y  =  x
+
+0 ? x  =  dec (dec x)
+x ? y  =  y
+
+0 ? x  =  dec (dec x)
+x ? y  =  0
+
+0 ? x  =  dec (dec 0)
+x ? y  =  x
+
+0 ? x  =  dec (dec 0)
+x ? y  =  y
+
+0 ? x  =  dec (dec 0)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  0
+
+x ? 0  =  x
+x ? y  =  x ? dec y
+
+x ? 0  =  x
+x ? y  =  y ? dec y
+
+x ? 0  =  x
+x ? y  =  0 ? dec y
+
+x ? 0  =  x
+x ? y  =  dec x ? x
+
+x ? 0  =  x
+x ? y  =  dec x ? y
+
+x ? 0  =  x
+x ? y  =  dec x ? 0
+
+x ? 0  =  0
+x ? y  =  x ? dec y
+
+x ? 0  =  0
+x ? y  =  y ? dec y
+
+x ? 0  =  0
+x ? y  =  0 ? dec y
+
+x ? 0  =  0
+x ? y  =  dec x ? x
+
+x ? 0  =  0
+x ? y  =  dec x ? y
+
+x ? 0  =  0
+x ? y  =  dec x ? 0
+
+0 ? x  =  x
+x ? y  =  x ? dec y
+
+0 ? x  =  x
+x ? y  =  y ? dec y
+
+0 ? x  =  x
+x ? y  =  0 ? dec y
+
+0 ? x  =  x
+x ? y  =  dec x ? x
+
+0 ? x  =  x
+x ? y  =  dec x ? y
+
+0 ? x  =  x
+x ? y  =  dec x ? 0
+
+0 ? x  =  0
+x ? y  =  x ? dec y
+
+0 ? x  =  0
+x ? y  =  y ? dec y
+
+0 ? x  =  0
+x ? y  =  0 ? dec y
+
+0 ? x  =  0
+x ? y  =  dec x ? x
+
+0 ? x  =  0
+x ? y  =  dec x ? y
+
+0 ? x  =  0
+x ? y  =  dec x ? 0
+
+x ? y  =  dec (dec x) + x
+
+x ? y  =  dec (dec x) + y
+
+x ? y  =  dec (dec y) + x
+
+x ? y  =  dec (dec y) + y
+
+x ? y  =  dec (dec 0) + x
+
+x ? y  =  dec (dec 0) + y
+
+x ? y  =  dec (dec (dec (dec x)))
+
+x ? y  =  dec (dec (dec (dec y)))
+
+x ? y  =  dec (dec (dec (dec 0)))
+
+x ? y  =  x + (x + x)
+
+x ? y  =  x + (x + y)
+
+x ? y  =  x + (y + x)
+
+x ? y  =  x + (y + y)
+
+x ? y  =  x + dec (dec x)
+
+x ? y  =  x + dec (dec y)
+
+x ? y  =  x + dec (dec 0)
+
+x ? y  =  y + (x + x)
+
+x ? y  =  y + (x + y)
+
+x ? y  =  y + (y + x)
+
+x ? y  =  y + (y + y)
+
+x ? y  =  y + dec (dec x)
+
+x ? y  =  y + dec (dec y)
+
+x ? y  =  y + dec (dec 0)
+
+x ? y  =  dec x + dec x
+
+x ? y  =  dec x + dec y
+
+x ? y  =  dec x + dec 0
+
+x ? y  =  dec y + dec x
+
+x ? y  =  dec y + dec y
+
+x ? y  =  dec y + dec 0
+
+x ? y  =  dec 0 + dec x
+
+x ? y  =  dec 0 + dec y
+
+x ? y  =  dec 0 + dec 0
+
+x ? 0  =  x
+x ? y  =  dec x + x
+
+x ? 0  =  x
+x ? y  =  dec x + y
+
+x ? 0  =  x
+x ? y  =  dec y + x
+
+x ? 0  =  x
+x ? y  =  dec y + y
+
+x ? 0  =  x
+x ? y  =  dec 0 + x
+
+x ? 0  =  x
+x ? y  =  dec 0 + y
+
+x ? 0  =  x
+x ? y  =  dec (dec (dec x))
+
+x ? 0  =  x
+x ? y  =  dec (dec (dec y))
+
+x ? 0  =  x
+x ? y  =  dec (dec (dec 0))
+
+x ? 0  =  x
+x ? y  =  x + dec x
+
+x ? 0  =  x
+x ? y  =  x + dec y
+
+x ? 0  =  x
+x ? y  =  x + dec 0
+
+x ? 0  =  x
+x ? y  =  y + dec x
+
+x ? 0  =  x
+x ? y  =  y + dec y
+
+x ? 0  =  x
+x ? y  =  y + dec 0
+
+x ? 0  =  0
+x ? y  =  dec x + x
+
+x ? 0  =  0
+x ? y  =  dec x + y
+
+x ? 0  =  0
+x ? y  =  dec y + x
+
+x ? 0  =  0
+x ? y  =  dec y + y
+
+x ? 0  =  0
+x ? y  =  dec 0 + x
+
+x ? 0  =  0
+x ? y  =  dec 0 + y
+
+x ? 0  =  0
+x ? y  =  dec (dec (dec x))
+
+x ? 0  =  0
+x ? y  =  dec (dec (dec y))
+
+x ? 0  =  0
+x ? y  =  dec (dec (dec 0))
+
+x ? 0  =  0
+x ? y  =  x + dec x
+
+x ? 0  =  0
+x ? y  =  x + dec y
+
+x ? 0  =  0
+x ? y  =  x + dec 0
+
+x ? 0  =  0
+x ? y  =  y + dec x
+
+x ? 0  =  0
+x ? y  =  y + dec y
+
+x ? 0  =  0
+x ? y  =  y + dec 0
+
+x ? 0  =  dec x
+x ? y  =  x + x
+
+x ? 0  =  dec x
+x ? y  =  x + y
+
+x ? 0  =  dec x
+x ? y  =  y + x
+
+x ? 0  =  dec x
+x ? y  =  y + y
+
+x ? 0  =  dec x
+x ? y  =  dec (dec x)
+
+x ? 0  =  dec x
+x ? y  =  dec (dec y)
+
+x ? 0  =  dec x
+x ? y  =  dec (dec 0)
+
+x ? 0  =  dec 0
+x ? y  =  x + x
+
+x ? 0  =  dec 0
+x ? y  =  x + y
+
+x ? 0  =  dec 0
+x ? y  =  y + x
+
+x ? 0  =  dec 0
+x ? y  =  y + y
+
+x ? 0  =  dec 0
+x ? y  =  dec (dec x)
+
+x ? 0  =  dec 0
+x ? y  =  dec (dec y)
+
+x ? 0  =  dec 0
+x ? y  =  dec (dec 0)
+
+x ? 0  =  x + x
+x ? y  =  dec x
+
+x ? 0  =  x + x
+x ? y  =  dec y
+
+x ? 0  =  x + x
+x ? y  =  dec 0
+
+x ? 0  =  dec (dec x)
+x ? y  =  dec x
+
+x ? 0  =  dec (dec x)
+x ? y  =  dec y
+
+x ? 0  =  dec (dec x)
+x ? y  =  dec 0
+
+x ? 0  =  dec (dec 0)
+x ? y  =  dec x
+
+x ? 0  =  dec (dec 0)
+x ? y  =  dec y
+
+x ? 0  =  dec (dec 0)
+x ? y  =  dec 0
+
+x ? 0  =  dec x + x
+x ? y  =  x
+
+x ? 0  =  dec x + x
+x ? y  =  y
+
+x ? 0  =  dec x + x
+x ? y  =  0
+
+x ? 0  =  dec 0 + x
+x ? y  =  x
+
+x ? 0  =  dec 0 + x
+x ? y  =  y
+
+x ? 0  =  dec 0 + x
+x ? y  =  0
+
+x ? 0  =  dec (dec (dec x))
+x ? y  =  x
+
+x ? 0  =  dec (dec (dec x))
+x ? y  =  y
+
+x ? 0  =  dec (dec (dec x))
+x ? y  =  0
+
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  x
+
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  y
+
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  0
+
+x ? 0  =  x + dec x
+x ? y  =  x
+
+x ? 0  =  x + dec x
+x ? y  =  y
+
+x ? 0  =  x + dec x
+x ? y  =  0
+
+x ? 0  =  x + dec 0
+x ? y  =  x
+
+x ? 0  =  x + dec 0
+x ? y  =  y
+
+x ? 0  =  x + dec 0
+x ? y  =  0
+
+0 ? x  =  x
+x ? y  =  dec x + x
+
+0 ? x  =  x
+x ? y  =  dec x + y
+
+0 ? x  =  x
+x ? y  =  dec y + x
+
+0 ? x  =  x
+x ? y  =  dec y + y
+
+0 ? x  =  x
+x ? y  =  dec 0 + x
+
+0 ? x  =  x
+x ? y  =  dec 0 + y
+
+0 ? x  =  x
+x ? y  =  dec (dec (dec x))
+
+0 ? x  =  x
+x ? y  =  dec (dec (dec y))
+
+0 ? x  =  x
+x ? y  =  dec (dec (dec 0))
+
+0 ? x  =  x
+x ? y  =  x + dec x
+
+0 ? x  =  x
+x ? y  =  x + dec y
+
+0 ? x  =  x
+x ? y  =  x + dec 0
+
+0 ? x  =  x
+x ? y  =  y + dec x
+
+0 ? x  =  x
+x ? y  =  y + dec y
+
+0 ? x  =  x
+x ? y  =  y + dec 0
+
+0 ? x  =  0
+x ? y  =  dec x + x
+
+0 ? x  =  0
+x ? y  =  dec x + y
+
+0 ? x  =  0
+x ? y  =  dec y + x
+
+0 ? x  =  0
+x ? y  =  dec y + y
+
+0 ? x  =  0
+x ? y  =  dec 0 + x
+
+0 ? x  =  0
+x ? y  =  dec 0 + y
+
+0 ? x  =  0
+x ? y  =  dec (dec (dec x))
+
+0 ? x  =  0
+x ? y  =  dec (dec (dec y))
+
+0 ? x  =  0
+x ? y  =  dec (dec (dec 0))
+
+0 ? x  =  0
+x ? y  =  x + dec x
+
+0 ? x  =  0
+x ? y  =  x + dec y
+
+0 ? x  =  0
+x ? y  =  x + dec 0
+
+0 ? x  =  0
+x ? y  =  y + dec x
+
+0 ? x  =  0
+x ? y  =  y + dec y
+
+0 ? x  =  0
+x ? y  =  y + dec 0
+
+0 ? x  =  dec x
+x ? y  =  x + x
+
+0 ? x  =  dec x
+x ? y  =  x + y
+
+0 ? x  =  dec x
+x ? y  =  y + x
+
+0 ? x  =  dec x
+x ? y  =  y + y
+
+0 ? x  =  dec x
+x ? y  =  dec (dec x)
+
+0 ? x  =  dec x
+x ? y  =  dec (dec y)
+
+0 ? x  =  dec x
+x ? y  =  dec (dec 0)
+
+0 ? x  =  dec 0
+x ? y  =  x + x
+
+0 ? x  =  dec 0
+x ? y  =  x + y
+
+0 ? x  =  dec 0
+x ? y  =  y + x
+
+0 ? x  =  dec 0
+x ? y  =  y + y
+
+0 ? x  =  dec 0
+x ? y  =  dec (dec x)
+
+0 ? x  =  dec 0
+x ? y  =  dec (dec y)
+
+0 ? x  =  dec 0
+x ? y  =  dec (dec 0)
+
+0 ? x  =  x + x
+x ? y  =  dec x
+
+0 ? x  =  x + x
+x ? y  =  dec y
+
+0 ? x  =  x + x
+x ? y  =  dec 0
+
+0 ? x  =  dec (dec x)
+x ? y  =  dec x
+
+0 ? x  =  dec (dec x)
+x ? y  =  dec y
+
+0 ? x  =  dec (dec x)
+x ? y  =  dec 0
+
+0 ? x  =  dec (dec 0)
+x ? y  =  dec x
+
+0 ? x  =  dec (dec 0)
+x ? y  =  dec y
+
+0 ? x  =  dec (dec 0)
+x ? y  =  dec 0
+
+0 ? x  =  dec x + x
+x ? y  =  x
+
+0 ? x  =  dec x + x
+x ? y  =  y
+
+0 ? x  =  dec x + x
+x ? y  =  0
+
+0 ? x  =  dec 0 + x
+x ? y  =  x
+
+0 ? x  =  dec 0 + x
+x ? y  =  y
+
+0 ? x  =  dec 0 + x
+x ? y  =  0
+
+0 ? x  =  dec (dec (dec x))
+x ? y  =  x
+
+0 ? x  =  dec (dec (dec x))
+x ? y  =  y
+
+0 ? x  =  dec (dec (dec x))
+x ? y  =  0
+
+0 ? x  =  dec (dec (dec 0))
+x ? y  =  x
+
+0 ? x  =  dec (dec (dec 0))
+x ? y  =  y
+
+0 ? x  =  dec (dec (dec 0))
+x ? y  =  0
+
+0 ? x  =  x + dec x
+x ? y  =  x
+
+0 ? x  =  x + dec x
+x ? y  =  y
+
+0 ? x  =  x + dec x
+x ? y  =  0
+
+0 ? x  =  x + dec 0
+x ? y  =  x
+
+0 ? x  =  x + dec 0
+x ? y  =  y
+
+0 ? x  =  x + dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  0
+
+x ? 0  =  x
+x ? y  =  x ? dec (dec y)
+
+x ? 0  =  x
+x ? y  =  y ? dec (dec y)
+
+x ? 0  =  x
+x ? y  =  0 ? dec (dec y)
+
+x ? 0  =  x
+x ? y  =  dec x ? dec x
+
+x ? 0  =  x
+x ? y  =  dec x ? dec y
+
+x ? 0  =  x
+x ? y  =  dec x ? dec 0
+
+x ? 0  =  x
+x ? y  =  dec y ? dec y
+
+x ? 0  =  x
+x ? y  =  dec 0 ? dec y
+
+x ? 0  =  x
+x ? y  =  dec (dec x) ? x
+
+x ? 0  =  x
+x ? y  =  dec (dec x) ? y
+
+x ? 0  =  x
+x ? y  =  dec (dec x) ? 0
+
+x ? 0  =  0
+x ? y  =  x ? dec (dec y)
+
+x ? 0  =  0
+x ? y  =  y ? dec (dec y)
+
+x ? 0  =  0
+x ? y  =  0 ? dec (dec y)
+
+x ? 0  =  0
+x ? y  =  dec x ? dec x
+
+x ? 0  =  0
+x ? y  =  dec x ? dec y
+
+x ? 0  =  0
+x ? y  =  dec x ? dec 0
+
+x ? 0  =  0
+x ? y  =  dec y ? dec y
+
+x ? 0  =  0
+x ? y  =  dec 0 ? dec y
+
+x ? 0  =  0
+x ? y  =  dec (dec x) ? x
+
+x ? 0  =  0
+x ? y  =  dec (dec x) ? y
+
+x ? 0  =  0
+x ? y  =  dec (dec x) ? 0
+
+0 ? x  =  x
+x ? y  =  x ? dec (dec y)
+
+0 ? x  =  x
+x ? y  =  y ? dec (dec y)
+
+0 ? x  =  x
+x ? y  =  0 ? dec (dec y)
+
+0 ? x  =  x
+x ? y  =  dec x ? dec x
+
+0 ? x  =  x
+x ? y  =  dec x ? dec y
+
+0 ? x  =  x
+x ? y  =  dec x ? dec 0
+
+0 ? x  =  x
+x ? y  =  dec y ? dec y
+
+0 ? x  =  x
+x ? y  =  dec 0 ? dec y
+
+0 ? x  =  x
+x ? y  =  dec (dec x) ? x
+
+0 ? x  =  x
+x ? y  =  dec (dec x) ? y
+
+0 ? x  =  x
+x ? y  =  dec (dec x) ? 0
+
+0 ? x  =  0
+x ? y  =  x ? dec (dec y)
+
+0 ? x  =  0
+x ? y  =  y ? dec (dec y)
+
+0 ? x  =  0
+x ? y  =  0 ? dec (dec y)
+
+0 ? x  =  0
+x ? y  =  dec x ? dec x
+
+0 ? x  =  0
+x ? y  =  dec x ? dec y
+
+0 ? x  =  0
+x ? y  =  dec x ? dec 0
+
+0 ? x  =  0
+x ? y  =  dec y ? dec y
+
+0 ? x  =  0
+x ? y  =  dec 0 ? dec y
+
+0 ? x  =  0
+x ? y  =  dec (dec x) ? x
+
+0 ? x  =  0
+x ? y  =  dec (dec x) ? y
+
+0 ? x  =  0
+x ? y  =  dec (dec x) ? 0
+
+x ? 0  =  x
+x ? y  =  dec (x ? dec y)
+
+x ? 0  =  x
+x ? y  =  dec (y ? dec y)
+
+x ? 0  =  x
+x ? y  =  dec (0 ? dec y)
+
+x ? 0  =  x
+x ? y  =  dec (dec x ? x)
+
+x ? 0  =  x
+x ? y  =  dec (dec x ? y)
+
+x ? 0  =  x
+x ? y  =  dec (dec x ? 0)
+
+x ? 0  =  0
+x ? y  =  dec (x ? dec y)
+
+x ? 0  =  0
+x ? y  =  dec (y ? dec y)
+
+x ? 0  =  0
+x ? y  =  dec (0 ? dec y)
+
+x ? 0  =  0
+x ? y  =  dec (dec x ? x)
+
+x ? 0  =  0
+x ? y  =  dec (dec x ? y)
+
+x ? 0  =  0
+x ? y  =  dec (dec x ? 0)
+
+x ? 0  =  dec x
+x ? y  =  x ? dec y
+
+x ? 0  =  dec x
+x ? y  =  y ? dec y
+
+x ? 0  =  dec x
+x ? y  =  0 ? dec y
+
+x ? 0  =  dec x
+x ? y  =  dec x ? x
+
+x ? 0  =  dec x
+x ? y  =  dec x ? y
+
+x ? 0  =  dec x
+x ? y  =  dec x ? 0
+
+x ? 0  =  dec 0
+x ? y  =  x ? dec y
+
+x ? 0  =  dec 0
+x ? y  =  y ? dec y
+
+x ? 0  =  dec 0
+x ? y  =  0 ? dec y
+
+x ? 0  =  dec 0
+x ? y  =  dec x ? x
+
+x ? 0  =  dec 0
+x ? y  =  dec x ? y
+
+x ? 0  =  dec 0
+x ? y  =  dec x ? 0
+
+0 ? x  =  x
+x ? y  =  dec (x ? dec y)
+
+0 ? x  =  x
+x ? y  =  dec (y ? dec y)
+
+0 ? x  =  x
+x ? y  =  dec (0 ? dec y)
+
+0 ? x  =  x
+x ? y  =  dec (dec x ? x)
+
+0 ? x  =  x
+x ? y  =  dec (dec x ? y)
+
+0 ? x  =  x
+x ? y  =  dec (dec x ? 0)
+
+0 ? x  =  0
+x ? y  =  dec (x ? dec y)
+
+0 ? x  =  0
+x ? y  =  dec (y ? dec y)
+
+0 ? x  =  0
+x ? y  =  dec (0 ? dec y)
+
+0 ? x  =  0
+x ? y  =  dec (dec x ? x)
+
+0 ? x  =  0
+x ? y  =  dec (dec x ? y)
+
+0 ? x  =  0
+x ? y  =  dec (dec x ? 0)
+
+0 ? x  =  dec x
+x ? y  =  x ? dec y
+
+0 ? x  =  dec x
+x ? y  =  y ? dec y
+
+0 ? x  =  dec x
+x ? y  =  0 ? dec y
+
+0 ? x  =  dec x
+x ? y  =  dec x ? x
+
+0 ? x  =  dec x
+x ? y  =  dec x ? y
+
+0 ? x  =  dec x
+x ? y  =  dec x ? 0
+
+0 ? x  =  dec 0
+x ? y  =  x ? dec y
+
+0 ? x  =  dec 0
+x ? y  =  y ? dec y
+
+0 ? x  =  dec 0
+x ? y  =  0 ? dec y
+
+0 ? x  =  dec 0
+x ? y  =  dec x ? x
+
+0 ? x  =  dec 0
+x ? y  =  dec x ? y
+
+0 ? x  =  dec 0
+x ? y  =  dec x ? 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x ? dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y ? dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  0 ? dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec x ? x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec x ? y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec x ? 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x ? x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x ? 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x ? x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x ? 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x ? x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x ? 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x ? dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y ? dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  0 ? dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec x ? x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec x ? y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec x ? 0
+
+0 ? 0  =  0
+0 ? x  =  x ? dec x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0 ? dec x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x ? dec x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0 ? dec x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x ? dec x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0 ? dec x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x ? dec x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0 ? dec x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x ? dec x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0 ? dec x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x ? dec x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0 ? dec x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x ? dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y ? dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  0 ? dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec x ? x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec x ? y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec x ? 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x ? x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x ? 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x ? x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x ? 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x ? x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x ? 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x ? dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y ? dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  0 ? dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec x ? x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec x ? y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec x ? 0
+
+x ? y  =  dec (dec (dec x)) + x
+
+x ? y  =  dec (dec (dec x)) + y
+
+x ? y  =  dec (dec (dec y)) + x
+
+x ? y  =  dec (dec (dec y)) + y
+
+x ? y  =  dec (dec (dec 0)) + x
+
+x ? y  =  dec (dec (dec 0)) + y
+
+x ? y  =  dec (dec (dec (dec (dec x))))
+
+x ? y  =  dec (dec (dec (dec (dec y))))
+
+x ? y  =  dec (dec (dec (dec (dec 0))))
+
+x ? y  =  x + (dec x + x)
+
+x ? y  =  x + (dec x + y)
+
+x ? y  =  x + (dec y + x)
+
+x ? y  =  x + (dec y + y)
+
+x ? y  =  x + (dec 0 + x)
+
+x ? y  =  x + (dec 0 + y)
+
+x ? y  =  x + dec (dec (dec x))
+
+x ? y  =  x + dec (dec (dec y))
+
+x ? y  =  x + dec (dec (dec 0))
+
+x ? y  =  x + (x + dec x)
+
+x ? y  =  x + (x + dec y)
+
+x ? y  =  x + (x + dec 0)
+
+x ? y  =  x + (y + dec x)
+
+x ? y  =  x + (y + dec y)
+
+x ? y  =  x + (y + dec 0)
+
+x ? y  =  y + (dec x + x)
+
+x ? y  =  y + (dec x + y)
+
+x ? y  =  y + (dec y + x)
+
+x ? y  =  y + (dec y + y)
+
+x ? y  =  y + (dec 0 + x)
+
+x ? y  =  y + (dec 0 + y)
+
+x ? y  =  y + dec (dec (dec x))
+
+x ? y  =  y + dec (dec (dec y))
+
+x ? y  =  y + dec (dec (dec 0))
+
+x ? y  =  y + (x + dec x)
+
+x ? y  =  y + (x + dec y)
+
+x ? y  =  y + (x + dec 0)
+
+x ? y  =  y + (y + dec x)
+
+x ? y  =  y + (y + dec y)
+
+x ? y  =  y + (y + dec 0)
+
+x ? y  =  dec x + (x + x)
+
+x ? y  =  dec x + (x + y)
+
+x ? y  =  dec x + (y + x)
+
+x ? y  =  dec x + (y + y)
+
+x ? y  =  dec x + dec (dec x)
+
+x ? y  =  dec x + dec (dec y)
+
+x ? y  =  dec x + dec (dec 0)
+
+x ? y  =  dec y + (x + x)
+
+x ? y  =  dec y + (x + y)
+
+x ? y  =  dec y + (y + x)
+
+x ? y  =  dec y + (y + y)
+
+x ? y  =  dec y + dec (dec x)
+
+x ? y  =  dec y + dec (dec y)
+
+x ? y  =  dec y + dec (dec 0)
+
+x ? y  =  dec 0 + (x + x)
+
+x ? y  =  dec 0 + (x + y)
+
+x ? y  =  dec 0 + (y + x)
+
+x ? y  =  dec 0 + (y + y)
+
+x ? y  =  dec 0 + dec (dec x)
+
+x ? y  =  dec 0 + dec (dec y)
+
+x ? y  =  dec 0 + dec (dec 0)
+
+x ? y  =  dec (dec x) + dec x
+
+x ? y  =  dec (dec x) + dec y
+
+x ? y  =  dec (dec x) + dec 0
+
+x ? y  =  dec (dec y) + dec x
+
+x ? y  =  dec (dec y) + dec y
+
+x ? y  =  dec (dec y) + dec 0
+
+x ? y  =  dec (dec 0) + dec x
+
+x ? y  =  dec (dec 0) + dec y
+
+x ? y  =  dec (dec 0) + dec 0
+
+x ? 0  =  x
+x ? y  =  dec (dec x) + x
+
+x ? 0  =  x
+x ? y  =  dec (dec x) + y
+
+x ? 0  =  x
+x ? y  =  dec (dec y) + x
+
+x ? 0  =  x
+x ? y  =  dec (dec y) + y
+
+x ? 0  =  x
+x ? y  =  dec (dec 0) + x
+
+x ? 0  =  x
+x ? y  =  dec (dec 0) + y
+
+x ? 0  =  x
+x ? y  =  dec (dec (dec (dec x)))
+
+x ? 0  =  x
+x ? y  =  dec (dec (dec (dec y)))
+
+x ? 0  =  x
+x ? y  =  dec (dec (dec (dec 0)))
+
+x ? 0  =  x
+x ? y  =  x + (x + x)
+
+x ? 0  =  x
+x ? y  =  x + (x + y)
+
+x ? 0  =  x
+x ? y  =  x + (y + x)
+
+x ? 0  =  x
+x ? y  =  x + (y + y)
+
+x ? 0  =  x
+x ? y  =  x + dec (dec x)
+
+x ? 0  =  x
+x ? y  =  x + dec (dec y)
+
+x ? 0  =  x
+x ? y  =  x + dec (dec 0)
+
+x ? 0  =  x
+x ? y  =  y + (x + x)
+
+x ? 0  =  x
+x ? y  =  y + (x + y)
+
+x ? 0  =  x
+x ? y  =  y + (y + x)
+
+x ? 0  =  x
+x ? y  =  y + (y + y)
+
+x ? 0  =  x
+x ? y  =  y + dec (dec x)
+
+x ? 0  =  x
+x ? y  =  y + dec (dec y)
+
+x ? 0  =  x
+x ? y  =  y + dec (dec 0)
+
+x ? 0  =  x
+x ? y  =  dec x + dec x
+
+x ? 0  =  x
+x ? y  =  dec x + dec y
+
+x ? 0  =  x
+x ? y  =  dec x + dec 0
+
+x ? 0  =  x
+x ? y  =  dec y + dec x
+
+x ? 0  =  x
+x ? y  =  dec y + dec y
+
+x ? 0  =  x
+x ? y  =  dec y + dec 0
+
+x ? 0  =  x
+x ? y  =  dec 0 + dec x
+
+x ? 0  =  x
+x ? y  =  dec 0 + dec y
+
+x ? 0  =  x
+x ? y  =  dec 0 + dec 0
+
+x ? 0  =  0
+x ? y  =  dec (dec x) + x
+
+x ? 0  =  0
+x ? y  =  dec (dec x) + y
+
+x ? 0  =  0
+x ? y  =  dec (dec y) + x
+
+x ? 0  =  0
+x ? y  =  dec (dec y) + y
+
+x ? 0  =  0
+x ? y  =  dec (dec 0) + x
+
+x ? 0  =  0
+x ? y  =  dec (dec 0) + y
+
+x ? 0  =  0
+x ? y  =  dec (dec (dec (dec x)))
+
+x ? 0  =  0
+x ? y  =  dec (dec (dec (dec y)))
+
+x ? 0  =  0
+x ? y  =  dec (dec (dec (dec 0)))
+
+x ? 0  =  0
+x ? y  =  x + (x + x)
+
+x ? 0  =  0
+x ? y  =  x + (x + y)
+
+x ? 0  =  0
+x ? y  =  x + (y + x)
+
+x ? 0  =  0
+x ? y  =  x + (y + y)
+
+x ? 0  =  0
+x ? y  =  x + dec (dec x)
+
+x ? 0  =  0
+x ? y  =  x + dec (dec y)
+
+x ? 0  =  0
+x ? y  =  x + dec (dec 0)
+
+x ? 0  =  0
+x ? y  =  y + (x + x)
+
+x ? 0  =  0
+x ? y  =  y + (x + y)
+
+x ? 0  =  0
+x ? y  =  y + (y + x)
+
+x ? 0  =  0
+x ? y  =  y + (y + y)
+
+x ? 0  =  0
+x ? y  =  y + dec (dec x)
+
+x ? 0  =  0
+x ? y  =  y + dec (dec y)
+
+x ? 0  =  0
+x ? y  =  y + dec (dec 0)
+
+x ? 0  =  0
+x ? y  =  dec x + dec x
+
+x ? 0  =  0
+x ? y  =  dec x + dec y
+
+x ? 0  =  0
+x ? y  =  dec x + dec 0
+
+x ? 0  =  0
+x ? y  =  dec y + dec x
+
+x ? 0  =  0
+x ? y  =  dec y + dec y
+
+x ? 0  =  0
+x ? y  =  dec y + dec 0
+
+x ? 0  =  0
+x ? y  =  dec 0 + dec x
+
+x ? 0  =  0
+x ? y  =  dec 0 + dec y
+
+x ? 0  =  0
+x ? y  =  dec 0 + dec 0
+
+x ? 0  =  dec x
+x ? y  =  dec x + x
+
+x ? 0  =  dec x
+x ? y  =  dec x + y
+
+x ? 0  =  dec x
+x ? y  =  dec y + x
+
+x ? 0  =  dec x
+x ? y  =  dec y + y
+
+x ? 0  =  dec x
+x ? y  =  dec 0 + x
+
+x ? 0  =  dec x
+x ? y  =  dec 0 + y
+
+x ? 0  =  dec x
+x ? y  =  dec (dec (dec x))
+
+x ? 0  =  dec x
+x ? y  =  dec (dec (dec y))
+
+x ? 0  =  dec x
+x ? y  =  dec (dec (dec 0))
+
+x ? 0  =  dec x
+x ? y  =  x + dec x
+
+x ? 0  =  dec x
+x ? y  =  x + dec y
+
+x ? 0  =  dec x
+x ? y  =  x + dec 0
+
+x ? 0  =  dec x
+x ? y  =  y + dec x
+
+x ? 0  =  dec x
+x ? y  =  y + dec y
+
+x ? 0  =  dec x
+x ? y  =  y + dec 0
+
+x ? 0  =  dec 0
+x ? y  =  dec x + x
+
+x ? 0  =  dec 0
+x ? y  =  dec x + y
+
+x ? 0  =  dec 0
+x ? y  =  dec y + x
+
+x ? 0  =  dec 0
+x ? y  =  dec y + y
+
+x ? 0  =  dec 0
+x ? y  =  dec 0 + x
+
+x ? 0  =  dec 0
+x ? y  =  dec 0 + y
+
+x ? 0  =  dec 0
+x ? y  =  dec (dec (dec x))
+
+x ? 0  =  dec 0
+x ? y  =  dec (dec (dec y))
+
+x ? 0  =  dec 0
+x ? y  =  dec (dec (dec 0))
+
+x ? 0  =  dec 0
+x ? y  =  x + dec x
+
+x ? 0  =  dec 0
+x ? y  =  x + dec y
+
+x ? 0  =  dec 0
+x ? y  =  x + dec 0
+
+x ? 0  =  dec 0
+x ? y  =  y + dec x
+
+x ? 0  =  dec 0
+x ? y  =  y + dec y
+
+x ? 0  =  dec 0
+x ? y  =  y + dec 0
+
+x ? 0  =  x + x
+x ? y  =  x + y
+
+x ? 0  =  x + x
+x ? y  =  y + x
+
+x ? 0  =  x + x
+x ? y  =  y + y
+
+x ? 0  =  x + x
+x ? y  =  dec (dec x)
+
+x ? 0  =  x + x
+x ? y  =  dec (dec y)
+
+x ? 0  =  x + x
+x ? y  =  dec (dec 0)
+
+x ? 0  =  dec (dec x)
+x ? y  =  x + x
+
+x ? 0  =  dec (dec x)
+x ? y  =  x + y
+
+x ? 0  =  dec (dec x)
+x ? y  =  y + x
+
+x ? 0  =  dec (dec x)
+x ? y  =  y + y
+
+x ? 0  =  dec (dec x)
+x ? y  =  dec (dec y)
+
+x ? 0  =  dec (dec x)
+x ? y  =  dec (dec 0)
+
+x ? 0  =  dec (dec 0)
+x ? y  =  x + x
+
+x ? 0  =  dec (dec 0)
+x ? y  =  x + y
+
+x ? 0  =  dec (dec 0)
+x ? y  =  y + x
+
+x ? 0  =  dec (dec 0)
+x ? y  =  y + y
+
+x ? 0  =  dec (dec 0)
+x ? y  =  dec (dec x)
+
+x ? 0  =  dec (dec 0)
+x ? y  =  dec (dec y)
+
+x ? 0  =  dec x + x
+x ? y  =  dec x
+
+x ? 0  =  dec x + x
+x ? y  =  dec y
+
+x ? 0  =  dec x + x
+x ? y  =  dec 0
+
+x ? 0  =  dec 0 + x
+x ? y  =  dec x
+
+x ? 0  =  dec 0 + x
+x ? y  =  dec y
+
+x ? 0  =  dec 0 + x
+x ? y  =  dec 0
+
+x ? 0  =  dec (dec (dec x))
+x ? y  =  dec x
+
+x ? 0  =  dec (dec (dec x))
+x ? y  =  dec y
+
+x ? 0  =  dec (dec (dec x))
+x ? y  =  dec 0
+
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  dec x
+
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  dec y
+
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  dec 0
+
+x ? 0  =  x + dec x
+x ? y  =  dec x
+
+x ? 0  =  x + dec x
+x ? y  =  dec y
+
+x ? 0  =  x + dec x
+x ? y  =  dec 0
+
+x ? 0  =  x + dec 0
+x ? y  =  dec x
+
+x ? 0  =  x + dec 0
+x ? y  =  dec y
+
+x ? 0  =  x + dec 0
+x ? y  =  dec 0
+
+x ? 0  =  dec (dec x) + x
+x ? y  =  x
+
+x ? 0  =  dec (dec x) + x
+x ? y  =  y
+
+x ? 0  =  dec (dec x) + x
+x ? y  =  0
+
+x ? 0  =  dec (dec 0) + x
+x ? y  =  x
+
+x ? 0  =  dec (dec 0) + x
+x ? y  =  y
+
+x ? 0  =  dec (dec 0) + x
+x ? y  =  0
+
+x ? 0  =  dec (dec (dec (dec x)))
+x ? y  =  x
+
+x ? 0  =  dec (dec (dec (dec x)))
+x ? y  =  y
+
+x ? 0  =  dec (dec (dec (dec x)))
+x ? y  =  0
+
+x ? 0  =  dec (dec (dec (dec 0)))
+x ? y  =  x
+
+x ? 0  =  dec (dec (dec (dec 0)))
+x ? y  =  y
+
+x ? 0  =  dec (dec (dec (dec 0)))
+x ? y  =  0
+
+x ? 0  =  x + (x + x)
+x ? y  =  x
+
+x ? 0  =  x + (x + x)
+x ? y  =  y
+
+x ? 0  =  x + (x + x)
+x ? y  =  0
+
+x ? 0  =  x + dec (dec x)
+x ? y  =  x
+
+x ? 0  =  x + dec (dec x)
+x ? y  =  y
+
+x ? 0  =  x + dec (dec x)
+x ? y  =  0
+
+x ? 0  =  x + dec (dec 0)
+x ? y  =  x
+
+x ? 0  =  x + dec (dec 0)
+x ? y  =  y
+
+x ? 0  =  x + dec (dec 0)
+x ? y  =  0
+
+x ? 0  =  dec x + dec x
+x ? y  =  x
+
+x ? 0  =  dec x + dec x
+x ? y  =  y
+
+x ? 0  =  dec x + dec x
+x ? y  =  0
+
+x ? 0  =  dec x + dec 0
+x ? y  =  x
+
+x ? 0  =  dec x + dec 0
+x ? y  =  y
+
+x ? 0  =  dec x + dec 0
+x ? y  =  0
+
+x ? 0  =  dec 0 + dec x
+x ? y  =  x
+
+x ? 0  =  dec 0 + dec x
+x ? y  =  y
+
+x ? 0  =  dec 0 + dec x
+x ? y  =  0
+
+x ? 0  =  dec 0 + dec 0
+x ? y  =  x
+
+x ? 0  =  dec 0 + dec 0
+x ? y  =  y
+
+x ? 0  =  dec 0 + dec 0
+x ? y  =  0
+
+0 ? x  =  x
+x ? y  =  dec (dec x) + x
+
+0 ? x  =  x
+x ? y  =  dec (dec x) + y
+
+0 ? x  =  x
+x ? y  =  dec (dec y) + x
+
+0 ? x  =  x
+x ? y  =  dec (dec y) + y
+
+0 ? x  =  x
+x ? y  =  dec (dec 0) + x
+
+0 ? x  =  x
+x ? y  =  dec (dec 0) + y
+
+0 ? x  =  x
+x ? y  =  dec (dec (dec (dec x)))
+
+0 ? x  =  x
+x ? y  =  dec (dec (dec (dec y)))
+
+0 ? x  =  x
+x ? y  =  dec (dec (dec (dec 0)))
+
+0 ? x  =  x
+x ? y  =  x + (x + x)
+
+0 ? x  =  x
+x ? y  =  x + (x + y)
+
+0 ? x  =  x
+x ? y  =  x + (y + x)
+
+0 ? x  =  x
+x ? y  =  x + (y + y)
+
+0 ? x  =  x
+x ? y  =  x + dec (dec x)
+
+0 ? x  =  x
+x ? y  =  x + dec (dec y)
+
+0 ? x  =  x
+x ? y  =  x + dec (dec 0)
+
+0 ? x  =  x
+x ? y  =  y + (x + x)
+
+0 ? x  =  x
+x ? y  =  y + (x + y)
+
+0 ? x  =  x
+x ? y  =  y + (y + x)
+
+0 ? x  =  x
+x ? y  =  y + (y + y)
+
+0 ? x  =  x
+x ? y  =  y + dec (dec x)
+
+0 ? x  =  x
+x ? y  =  y + dec (dec y)
+
+0 ? x  =  x
+x ? y  =  y + dec (dec 0)
+
+0 ? x  =  x
+x ? y  =  dec x + dec x
+
+0 ? x  =  x
+x ? y  =  dec x + dec y
+
+0 ? x  =  x
+x ? y  =  dec x + dec 0
+
+0 ? x  =  x
+x ? y  =  dec y + dec x
+
+0 ? x  =  x
+x ? y  =  dec y + dec y
+
+0 ? x  =  x
+x ? y  =  dec y + dec 0
+
+0 ? x  =  x
+x ? y  =  dec 0 + dec x
+
+0 ? x  =  x
+x ? y  =  dec 0 + dec y
+
+0 ? x  =  x
+x ? y  =  dec 0 + dec 0
+
+0 ? x  =  0
+x ? y  =  dec (dec x) + x
+
+0 ? x  =  0
+x ? y  =  dec (dec x) + y
+
+0 ? x  =  0
+x ? y  =  dec (dec y) + x
+
+0 ? x  =  0
+x ? y  =  dec (dec y) + y
+
+0 ? x  =  0
+x ? y  =  dec (dec 0) + x
+
+0 ? x  =  0
+x ? y  =  dec (dec 0) + y
+
+0 ? x  =  0
+x ? y  =  dec (dec (dec (dec x)))
+
+0 ? x  =  0
+x ? y  =  dec (dec (dec (dec y)))
+
+0 ? x  =  0
+x ? y  =  dec (dec (dec (dec 0)))
+
+0 ? x  =  0
+x ? y  =  x + (x + x)
+
+0 ? x  =  0
+x ? y  =  x + (x + y)
+
+0 ? x  =  0
+x ? y  =  x + (y + x)
+
+0 ? x  =  0
+x ? y  =  x + (y + y)
+
+0 ? x  =  0
+x ? y  =  x + dec (dec x)
+
+0 ? x  =  0
+x ? y  =  x + dec (dec y)
+
+0 ? x  =  0
+x ? y  =  x + dec (dec 0)
+
+0 ? x  =  0
+x ? y  =  y + (x + x)
+
+0 ? x  =  0
+x ? y  =  y + (x + y)
+
+0 ? x  =  0
+x ? y  =  y + (y + x)
+
+0 ? x  =  0
+x ? y  =  y + (y + y)
+
+0 ? x  =  0
+x ? y  =  y + dec (dec x)
+
+0 ? x  =  0
+x ? y  =  y + dec (dec y)
+
+0 ? x  =  0
+x ? y  =  y + dec (dec 0)
+
+0 ? x  =  0
+x ? y  =  dec x + dec x
+
+0 ? x  =  0
+x ? y  =  dec x + dec y
+
+0 ? x  =  0
+x ? y  =  dec x + dec 0
+
+0 ? x  =  0
+x ? y  =  dec y + dec x
+
+0 ? x  =  0
+x ? y  =  dec y + dec y
+
+0 ? x  =  0
+x ? y  =  dec y + dec 0
+
+0 ? x  =  0
+x ? y  =  dec 0 + dec x
+
+0 ? x  =  0
+x ? y  =  dec 0 + dec y
+
+0 ? x  =  0
+x ? y  =  dec 0 + dec 0
+
+0 ? x  =  dec x
+x ? y  =  dec x + x
+
+0 ? x  =  dec x
+x ? y  =  dec x + y
+
+0 ? x  =  dec x
+x ? y  =  dec y + x
+
+0 ? x  =  dec x
+x ? y  =  dec y + y
+
+0 ? x  =  dec x
+x ? y  =  dec 0 + x
+
+0 ? x  =  dec x
+x ? y  =  dec 0 + y
+
+0 ? x  =  dec x
+x ? y  =  dec (dec (dec x))
+
+0 ? x  =  dec x
+x ? y  =  dec (dec (dec y))
+
+0 ? x  =  dec x
+x ? y  =  dec (dec (dec 0))
+
+0 ? x  =  dec x
+x ? y  =  x + dec x
+
+0 ? x  =  dec x
+x ? y  =  x + dec y
+
+0 ? x  =  dec x
+x ? y  =  x + dec 0
+
+0 ? x  =  dec x
+x ? y  =  y + dec x
+
+0 ? x  =  dec x
+x ? y  =  y + dec y
+
+0 ? x  =  dec x
+x ? y  =  y + dec 0
+
+0 ? x  =  dec 0
+x ? y  =  dec x + x
+
+0 ? x  =  dec 0
+x ? y  =  dec x + y
+
+0 ? x  =  dec 0
+x ? y  =  dec y + x
+
+0 ? x  =  dec 0
+x ? y  =  dec y + y
+
+0 ? x  =  dec 0
+x ? y  =  dec 0 + x
+
+0 ? x  =  dec 0
+x ? y  =  dec 0 + y
+
+0 ? x  =  dec 0
+x ? y  =  dec (dec (dec x))
+
+0 ? x  =  dec 0
+x ? y  =  dec (dec (dec y))
+
+0 ? x  =  dec 0
+x ? y  =  dec (dec (dec 0))
+
+0 ? x  =  dec 0
+x ? y  =  x + dec x
+
+0 ? x  =  dec 0
+x ? y  =  x + dec y
+
+0 ? x  =  dec 0
+x ? y  =  x + dec 0
+
+0 ? x  =  dec 0
+x ? y  =  y + dec x
+
+0 ? x  =  dec 0
+x ? y  =  y + dec y
+
+0 ? x  =  dec 0
+x ? y  =  y + dec 0
+
+0 ? x  =  x + x
+x ? y  =  x + y
+
+0 ? x  =  x + x
+x ? y  =  y + x
+
+0 ? x  =  x + x
+x ? y  =  y + y
+
+0 ? x  =  x + x
+x ? y  =  dec (dec x)
+
+0 ? x  =  x + x
+x ? y  =  dec (dec y)
+
+0 ? x  =  x + x
+x ? y  =  dec (dec 0)
+
+0 ? x  =  dec (dec x)
+x ? y  =  x + x
+
+0 ? x  =  dec (dec x)
+x ? y  =  x + y
+
+0 ? x  =  dec (dec x)
+x ? y  =  y + x
+
+0 ? x  =  dec (dec x)
+x ? y  =  y + y
+
+0 ? x  =  dec (dec x)
+x ? y  =  dec (dec y)
+
+0 ? x  =  dec (dec x)
+x ? y  =  dec (dec 0)
+
+0 ? x  =  dec (dec 0)
+x ? y  =  x + x
+
+0 ? x  =  dec (dec 0)
+x ? y  =  x + y
+
+0 ? x  =  dec (dec 0)
+x ? y  =  y + x
+
+0 ? x  =  dec (dec 0)
+x ? y  =  y + y
+
+0 ? x  =  dec (dec 0)
+x ? y  =  dec (dec x)
+
+0 ? x  =  dec (dec 0)
+x ? y  =  dec (dec y)
+
+0 ? x  =  dec x + x
+x ? y  =  dec x
+
+0 ? x  =  dec x + x
+x ? y  =  dec y
+
+0 ? x  =  dec x + x
+x ? y  =  dec 0
+
+0 ? x  =  dec 0 + x
+x ? y  =  dec x
+
+0 ? x  =  dec 0 + x
+x ? y  =  dec y
+
+0 ? x  =  dec 0 + x
+x ? y  =  dec 0
+
+0 ? x  =  dec (dec (dec x))
+x ? y  =  dec x
+
+0 ? x  =  dec (dec (dec x))
+x ? y  =  dec y
+
+0 ? x  =  dec (dec (dec x))
+x ? y  =  dec 0
+
+0 ? x  =  dec (dec (dec 0))
+x ? y  =  dec x
+
+0 ? x  =  dec (dec (dec 0))
+x ? y  =  dec y
+
+0 ? x  =  dec (dec (dec 0))
+x ? y  =  dec 0
+
+0 ? x  =  x + dec x
+x ? y  =  dec x
+
+0 ? x  =  x + dec x
+x ? y  =  dec y
+
+0 ? x  =  x + dec x
+x ? y  =  dec 0
+
+0 ? x  =  x + dec 0
+x ? y  =  dec x
+
+0 ? x  =  x + dec 0
+x ? y  =  dec y
+
+0 ? x  =  x + dec 0
+x ? y  =  dec 0
+
+0 ? x  =  dec (dec x) + x
+x ? y  =  x
+
+0 ? x  =  dec (dec x) + x
+x ? y  =  y
+
+0 ? x  =  dec (dec x) + x
+x ? y  =  0
+
+0 ? x  =  dec (dec 0) + x
+x ? y  =  x
+
+0 ? x  =  dec (dec 0) + x
+x ? y  =  y
+
+0 ? x  =  dec (dec 0) + x
+x ? y  =  0
+
+0 ? x  =  dec (dec (dec (dec x)))
+x ? y  =  x
+
+0 ? x  =  dec (dec (dec (dec x)))
+x ? y  =  y
+
+0 ? x  =  dec (dec (dec (dec x)))
+x ? y  =  0
+
+0 ? x  =  dec (dec (dec (dec 0)))
+x ? y  =  x
+
+0 ? x  =  dec (dec (dec (dec 0)))
+x ? y  =  y
+
+0 ? x  =  dec (dec (dec (dec 0)))
+x ? y  =  0
+
+0 ? x  =  x + (x + x)
+x ? y  =  x
+
+0 ? x  =  x + (x + x)
+x ? y  =  y
+
+0 ? x  =  x + (x + x)
+x ? y  =  0
+
+0 ? x  =  x + dec (dec x)
+x ? y  =  x
+
+0 ? x  =  x + dec (dec x)
+x ? y  =  y
+
+0 ? x  =  x + dec (dec x)
+x ? y  =  0
+
+0 ? x  =  x + dec (dec 0)
+x ? y  =  x
+
+0 ? x  =  x + dec (dec 0)
+x ? y  =  y
+
+0 ? x  =  x + dec (dec 0)
+x ? y  =  0
+
+0 ? x  =  dec x + dec x
+x ? y  =  x
+
+0 ? x  =  dec x + dec x
+x ? y  =  y
+
+0 ? x  =  dec x + dec x
+x ? y  =  0
+
+0 ? x  =  dec x + dec 0
+x ? y  =  x
+
+0 ? x  =  dec x + dec 0
+x ? y  =  y
+
+0 ? x  =  dec x + dec 0
+x ? y  =  0
+
+0 ? x  =  dec 0 + dec x
+x ? y  =  x
+
+0 ? x  =  dec 0 + dec x
+x ? y  =  y
+
+0 ? x  =  dec 0 + dec x
+x ? y  =  0
+
+0 ? x  =  dec 0 + dec 0
+x ? y  =  x
+
+0 ? x  =  dec 0 + dec 0
+x ? y  =  y
+
+0 ? x  =  dec 0 + dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec x + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec x + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec y + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec y + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec 0 + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec 0 + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec (dec x))
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec (dec y))
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec (dec 0))
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x + dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x + dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x + dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y + dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y + dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y + dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec x + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec x + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec y + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec y + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec 0 + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec 0 + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec (dec x))
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec (dec y))
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec (dec 0))
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x + dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x + dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x + dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y + dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y + dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y + dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x + x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x + x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec x + x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0 + x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0 + x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec 0 + x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec (dec x))
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec (dec x))
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec (dec x))
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x
+x ? 0  =  x + dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec x + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec x + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec y + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec y + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec 0 + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec 0 + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec (dec x))
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec (dec y))
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec (dec 0))
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x + dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x + dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x + dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y + dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y + dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y + dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec x + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec x + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec y + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec y + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec 0 + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec 0 + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec (dec x))
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec (dec y))
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec (dec 0))
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x + dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x + dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x + dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y + dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y + dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y + dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x + x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x + x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec x + x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0 + x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0 + x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec 0 + x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec (dec x))
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec (dec x))
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec (dec x))
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  dec (dec (dec 0))
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  0
+x ? 0  =  x + dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x + x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x + x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  x + x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec (dec x)
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec (dec x)
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec (dec x)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec (dec 0)
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec (dec 0)
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x
+x ? 0  =  dec (dec 0)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  x + x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  x + y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  y + x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  y + y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec (dec x)
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec (dec y)
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x + x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x + x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  x + x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec (dec x)
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec (dec x)
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec (dec x)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec (dec 0)
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec (dec 0)
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0
+x ? 0  =  dec (dec 0)
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x + x
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec x)
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec 0)
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x + x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x + x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x + x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec x + x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec x + x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec x + x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0 + x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0 + x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0 + x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec 0 + x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec 0 + x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec 0 + x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec x))
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec x))
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec x))
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec x))
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec x))
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec x))
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec 0))
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec 0))
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec 0))
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec 0))
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec 0))
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  dec (dec (dec 0))
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x + dec x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x + dec x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x + dec x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x + dec x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x + dec x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x + dec x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x + dec 0
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x + dec 0
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x + dec 0
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  0
+0 ? x  =  x + dec 0
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  0
+0 ? x  =  x + dec 0
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  0
+0 ? x  =  x + dec 0
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x + x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x + y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y + x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y + y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec x)
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec y)
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x + x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x + y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y + x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y + y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec x)
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec y)
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  x + x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec (dec x)
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x
+x ? 0  =  dec (dec 0)
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x + x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x + y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y + x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y + y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec x)
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec y)
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x + x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x + y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y + x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y + y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec x)
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec y)
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec (dec 0)
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  x + x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec (dec x)
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  0
+x ? 0  =  dec (dec 0)
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec x
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec 0
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x + x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  x + x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec x)
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec x)
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec 0)
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec 0
+0 ? x  =  dec (dec 0)
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  x
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  dec 0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  dec 0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  dec x
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  0
+x ? 0  =  dec 0
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec 0
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec (dec 0)
+0 ? x  =  dec 0
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  x
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  x
+x ? 0  =  0
+x ? y  =  0
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  x
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  y
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  0
+x ? 0  =  x
+x ? y  =  0
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  x
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  y
+
+0 ? 0  =  dec (dec (dec 0))
+0 ? x  =  0
+x ? 0  =  0
+x ? y  =  0
+
+
+Candidates for: goo :: [Int] -> [Int]
+  pruning with 4/4 rules
+  [2,0,1,0,1,0,1,0,1] direct candidates, 0 duplicates
+  [2,1,2,3,4,7,10,17,26] pattern candidates, 0 duplicates
+
+rules:
+xs ++ [] == xs
+[] ++ xs == xs
+(xs ++ ys) ++ zs == xs ++ (ys ++ zs)
+(x:xs) ++ ys == x:(xs ++ ys)
+
+direct candidates:
+
+goo xs  =  xs
+
+goo xs  =  []
+
+goo xs  =  xs ++ xs
+
+goo xs  =  xs ++ (xs ++ xs)
+
+
+pattern candidates:
+
+goo xs  =  xs
+
+goo xs  =  []
+
+goo []  =  []
+goo (x:xs)  =  xs
+
+goo []  =  []
+goo (x:xs)  =  goo xs
+
+goo xs  =  xs ++ xs
+
+goo []  =  []
+goo (x:xs)  =  x:xs
+
+goo []  =  []
+goo (x:xs)  =  [x]
+
+goo []  =  []
+goo (x:xs)  =  xs ++ xs
+
+goo []  =  []
+goo (x:xs)  =  x:goo xs
+
+goo []  =  []
+goo (x:xs)  =  xs ++ goo xs
+
+goo []  =  []
+goo (x:xs)  =  goo xs ++ xs
+
+goo xs  =  xs ++ (xs ++ xs)
+
+goo []  =  []
+goo (x:xs)  =  goo xs ++ goo xs
+
+goo []  =  []
+goo (x:xs)  =  x:x:xs
+
+goo []  =  []
+goo (x:xs)  =  [x,x]
+
+goo []  =  []
+goo (x:xs)  =  x:(xs ++ xs)
+
+goo []  =  []
+goo (x:xs)  =  xs ++ (x:xs)
+
+goo []  =  []
+goo (x:xs)  =  xs ++ [x]
+
+goo []  =  []
+goo (x:xs)  =  xs ++ (xs ++ xs)
+
+
+Candidates for: ?? :: [Int] -> [Int] -> [Int]
+  pruning with 4/4 rules
+  [3,0,4,0,8,0,16,0,32] direct candidates, 0 duplicates
+  [3,8,15,66,152,362,1400,2084,11820] pattern candidates, 0 duplicates
+
+rules:
+xs ++ [] == xs
+[] ++ xs == xs
+(xs ++ ys) ++ zs == xs ++ (ys ++ zs)
+(x:xs) ++ ys == x:(xs ++ ys)
+
+direct candidates:
+
+xs ?? ys  =  xs
+
+xs ?? ys  =  ys
+
+xs ?? ys  =  []
+
+xs ?? ys  =  xs ++ xs
+
+xs ?? ys  =  xs ++ ys
+
+xs ?? ys  =  ys ++ xs
+
+xs ?? ys  =  ys ++ ys
+
+xs ?? ys  =  xs ++ (xs ++ xs)
+
+xs ?? ys  =  xs ++ (xs ++ ys)
+
+xs ?? ys  =  xs ++ (ys ++ xs)
+
+xs ?? ys  =  xs ++ (ys ++ ys)
+
+xs ?? ys  =  ys ++ (xs ++ xs)
+
+xs ?? ys  =  ys ++ (xs ++ ys)
+
+xs ?? ys  =  ys ++ (ys ++ xs)
+
+xs ?? ys  =  ys ++ (ys ++ ys)
+
+
+pattern candidates:
+
+xs ?? ys  =  xs
+
+xs ?? ys  =  ys
+
+xs ?? ys  =  []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys
+
+xs ?? ys  =  xs ++ xs
+
+xs ?? ys  =  xs ++ ys
+
+xs ?? ys  =  ys ++ xs
+
+xs ?? ys  =  ys ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [] ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [] ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [] ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [] ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [x]
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [x]
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ ys
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  xs
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  ys
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [x]
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [x]
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ ys
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  xs
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  ys
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ?? []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ?? []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  [] ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  [] ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ?? xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ?? []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  [] ?? xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ?? xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ?? []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  [] ?? xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ?? xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ?? []
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  [] ?? xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ?? []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ?? []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  [] ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  [] ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [] ?? xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [] ?? xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [] ?? xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [] ?? xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [] ?? xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ?? []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [] ?? xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ?? []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ?? []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  [] ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  [] ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ?? xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ?? []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  [] ?? xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ?? xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ?? []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  [] ?? xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ?? xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ?? []
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  [] ?? xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ?? []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ?? ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ?? []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  [] ?? xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  [] ?? ys
+
+xs ?? ys  =  xs ++ (xs ++ xs)
+
+xs ?? ys  =  xs ++ (xs ++ ys)
+
+xs ?? ys  =  xs ++ (ys ++ xs)
+
+xs ?? ys  =  xs ++ (ys ++ ys)
+
+xs ?? ys  =  ys ++ (xs ++ xs)
+
+xs ?? ys  =  ys ++ (xs ++ ys)
+
+xs ?? ys  =  ys ++ (ys ++ xs)
+
+xs ?? ys  =  ys ++ (ys ++ ys)
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  x:xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  x:ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  [x]
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  y:xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  y:ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  [y]
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ++ xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ++ xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  x:xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  x:ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  [x]
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  y:xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  y:ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  [y]
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ++ xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ++ xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  x:xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  x:xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  x:xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  [x]
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  [x]
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  [x]
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ++ xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ++ xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs
+(x:xs) ?? []  =  xs ++ xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  x:xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  x:ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  [x]
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  y:xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  y:ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  [y]
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ++ xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ++ xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  x:xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  x:ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  [x]
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  y:xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  y:ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  [y]
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ++ xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ++ xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys ++ ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  x:xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  x:xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  x:xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  [x]
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  [x]
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  [x]
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ++ xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ++ xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  []
+(x:xs) ?? []  =  xs ++ xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  x:xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  x:xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  x:xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  x:xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  x:xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  x:xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [x]
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [x]
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [x]
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [x]
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [x]
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  [x]
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ++ xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ++ xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ++ xs
+(x:xs) ?? []  =  xs
+(x:xs) ?? (y:ys)  =  []
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ++ xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  xs
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ++ xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  ys
+
+[] ?? []  =  []
+[] ?? (x:xs)  =  xs ++ xs
+(x:xs) ?? []  =  []
+(x:xs) ?? (y:ys)  =  []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (x:xs) ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (x:xs) ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (x:xs) ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (x:ys) ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (x:ys) ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (x:ys) ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [x] ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [x] ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [x] ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (xs ++ xs) ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (xs ++ xs) ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (xs ++ xs) ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (xs ++ ys) ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (xs ++ ys) ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (xs ++ ys) ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (ys ++ xs) ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (ys ++ xs) ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (ys ++ xs) ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (ys ++ ys) ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (ys ++ ys) ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  (ys ++ ys) ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (x:xs) ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (x:xs) ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (x:xs) ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (x:ys) ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (x:ys) ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (x:ys) ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [x] ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [x] ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [x] ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (xs ++ xs) ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (xs ++ xs) ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (xs ++ xs) ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (xs ++ ys) ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (xs ++ ys) ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (xs ++ ys) ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (ys ++ xs) ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (ys ++ xs) ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (ys ++ xs) ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (ys ++ ys) ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (ys ++ ys) ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  (ys ++ ys) ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? (x:xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? (x:ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? [x]
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? (xs ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? (xs ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? (ys ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? (ys ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? (x:xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? (x:ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? [x]
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? (xs ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? (xs ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? (ys ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? (ys ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? (x:xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? (x:ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? [x]
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? (xs ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? (xs ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? (ys ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? (ys ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? (x:xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? (x:ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? [x]
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? (xs ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? (xs ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? (ys ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? (ys ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? (x:xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? (x:ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? [x]
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? (xs ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? (xs ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? (ys ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? (ys ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? (x:xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? (x:ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? [x]
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? (xs ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? (xs ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? (ys ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? (ys ++ ys)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:xs ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:xs ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:xs ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:ys ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:ys ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:ys ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [x,] ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [x,] ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ xs ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ xs ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ xs ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ ys ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ ys ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ ys ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ [] ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ [] ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ xs ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ xs ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ xs ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ ys ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ ys ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ ys ?? []
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ [] ?? xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ [] ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? xs ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? ys ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? [] ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? xs ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? ys ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? [] ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [] ?? xs ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [] ?? ys ++ xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? xs ++ ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? ys ++ ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ?? [] ++ ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? xs ++ ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? ys ++ ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ?? [] ++ ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [] ?? xs ++ ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [] ?? ys ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:xs ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:xs ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:xs ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:ys ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:ys ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:ys ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [x,] ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [x,] ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ xs ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ xs ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ xs ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ ys ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ ys ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ ys ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ [] ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ [] ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ xs ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ xs ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ xs ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ ys ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ ys ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ ys ?? []
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ [] ?? xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ [] ?? ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? xs ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? ys ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? [] ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? xs ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? ys ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? [] ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [] ?? xs ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [] ?? ys ++ xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? xs ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? ys ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ?? [] ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? xs ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? ys ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ?? [] ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [] ?? xs ++ ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [] ?? ys ++ ys
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  xs ?? xs
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  xs ?? ys
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  xs ?? []
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  ys ?? xs
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  ys ?? ys
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  ys ?? []
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  [] ?? xs
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  [] ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:xs ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:xs ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:xs ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:ys ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:ys ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:ys ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [x,] ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [x,] ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ xs ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ xs ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ xs ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ ys ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ ys ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ ys ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ [] ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ [] ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ xs ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ xs ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ xs ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ ys ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ ys ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ ys ?? []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ [] ?? xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ [] ?? ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? xs ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? ys ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? [] ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? xs ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? ys ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? [] ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? xs ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? ys ++ xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? xs ++ ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? ys ++ ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ?? [] ++ ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? xs ++ ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? ys ++ ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ?? [] ++ ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? xs ++ ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [] ?? ys ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:xs ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:xs ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:xs ?? []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:ys ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:ys ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:ys ?? []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [x,] ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [x,] ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ xs ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ xs ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ xs ?? []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ ys ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ ys ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ ys ?? []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ [] ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ [] ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ xs ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ xs ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ xs ?? []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ ys ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ ys ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ ys ?? []
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ [] ?? xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ [] ?? ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? xs ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? ys ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? [] ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? xs ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? ys ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? [] ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? xs ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? ys ++ xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? xs ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? ys ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ?? [] ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? xs ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? ys ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ?? [] ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? xs ++ ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [] ?? ys ++ ys
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  xs ?? xs
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  xs ?? ys
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  xs ?? []
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  ys ?? xs
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  ys ?? ys
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  ys ?? []
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  [] ?? xs
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  [] ?? ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:x:xs
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:x:ys
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  [x,x]
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:(xs ++ xs)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:(xs ++ ys)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:(ys ++ xs)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  x:(ys ++ ys)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ (x:xs)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ (x:ys)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ [x]
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ (xs ++ xs)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ (xs ++ ys)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ (ys ++ xs)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  xs ++ (ys ++ ys)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ (x:xs)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ (x:ys)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ [x]
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ (xs ++ xs)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ (xs ++ ys)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ (ys ++ xs)
+
+xs ?? []  =  xs
+xs ?? (x:ys)  =  ys ++ (ys ++ ys)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:x:xs
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:x:ys
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  [x,x]
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:(xs ++ xs)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:(xs ++ ys)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:(ys ++ xs)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  x:(ys ++ ys)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ (x:xs)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ (x:ys)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ [x]
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ (xs ++ xs)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ (xs ++ ys)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ (ys ++ xs)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  xs ++ (ys ++ ys)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ (x:xs)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ (x:ys)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ [x]
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ (xs ++ xs)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ (xs ++ ys)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ (ys ++ xs)
+
+xs ?? []  =  []
+xs ?? (x:ys)  =  ys ++ (ys ++ ys)
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  x:xs
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  x:ys
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  [x]
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  xs ++ ys
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  ys ++ xs
+
+xs ?? []  =  xs ++ xs
+xs ?? (x:ys)  =  ys ++ ys
+
+xs ?? []  =  xs ++ (xs ++ xs)
+xs ?? (x:ys)  =  xs
+
+xs ?? []  =  xs ++ (xs ++ xs)
+xs ?? (x:ys)  =  ys
+
+xs ?? []  =  xs ++ (xs ++ xs)
+xs ?? (x:ys)  =  []
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:x:xs
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:x:ys
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  [x,x]
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:(xs ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:(xs ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:(ys ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  x:(ys ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ (x:xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ (x:ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ [x]
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ (xs ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ (xs ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ (ys ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  xs ++ (ys ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ (x:xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ (x:ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ [x]
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ (xs ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ (xs ++ ys)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ (ys ++ xs)
+
+[] ?? xs  =  xs
+(x:xs) ?? ys  =  ys ++ (ys ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:x:xs
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:x:ys
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  [x,x]
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:(xs ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:(xs ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:(ys ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  x:(ys ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ (x:xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ (x:ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ [x]
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ (xs ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ (xs ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ (ys ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  xs ++ (ys ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ (x:xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ (x:ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ [x]
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ (xs ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ (xs ++ ys)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ (ys ++ xs)
+
+[] ?? xs  =  []
+(x:xs) ?? ys  =  ys ++ (ys ++ ys)
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  x:xs
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  x:ys
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  [x]
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  xs ++ ys
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  ys ++ xs
+
+[] ?? xs  =  xs ++ xs
+(x:xs) ?? ys  =  ys ++ ys
+
+[] ?? xs  =  xs ++ (xs ++ xs)
+(x:xs) ?? ys  =  xs
+
+[] ?? xs  =  xs ++ (xs ++ xs)
+(x:xs) ?? ys  =  ys
+
+[] ?? xs  =  xs ++ (xs ++ xs)
+(x:xs) ?? ys  =  []
+
+
+Candidates for: ton :: Bool -> Bool
+  pruning with 39/49 rules
+  [3,1,0,2,6,14,38,68,140] direct candidates, 0 duplicates
+  [3,3,0,0,0,0,0,0,0] pattern candidates, 0 duplicates
+
+rules:
+not False == True
+not True == False
+p && p == p
+p || p == p
+not (not p) == p
+p && False == False
+p && True == p
+False && p == False
+True && p == p
+p || False == p
+p || True == True
+False || p == p
+True || p == True
+not (p && q) == not p || not q
+not (p && q) == not q || not p
+not (p || q) == not p && not q
+not (p || q) == not q && not p
+p && not p == False
+not p && p == False
+p || not p == True
+not p || p == True
+(p && q) && r == p && (q && r)
+(p && q) && r == q && (p && r)
+(p || q) || r == p || (q || r)
+(p || q) || r == q || (p || r)
+p && (p && q) == p && q
+p && (q && p) == p && q
+p && (q && p) == q && p
+p || (p || q) == p || q
+p || (q || p) == p || q
+p || (q || p) == q || p
+p && (p || q) == p
+p && (q || p) == p
+(p || q) && p == p
+(p || q) && q == q
+p || p && q == p
+p || q && p == p
+p && q || p == p
+p && q || q == q
+equations:
+q && p == p && q
+q || p == p || q
+q && (p && r) == p && (q && r)
+r && (p && q) == p && (q && r)
+r && (q && p) == p && (q && r)
+q || (p || r) == p || (q || r)
+r || (p || q) == p || (q || r)
+r || (q || p) == p || (q || r)
+(r || q) && p == p && (q || r)
+r && q || p == p || q && r
+
+direct candidates:
+
+ton p  =  p
+
+ton p  =  False
+
+ton p  =  True
+
+ton p  =  not p
+
+ton p  =  p && ton p
+
+ton p  =  p || ton p
+
+ton p  =  p && ton (not p)
+
+ton p  =  p || ton (not p)
+
+ton p  =  p && not (ton p)
+
+ton p  =  not p && ton p
+
+ton p  =  p || not (ton p)
+
+ton p  =  not p || ton p
+
+ton p  =  p && not (ton (not p))
+
+ton p  =  not p && ton (not p)
+
+ton p  =  p || not (ton (not p))
+
+ton p  =  not p || ton (not p)
+
+ton p  =  p && (p && ton p)
+
+ton p  =  p && (ton p && p)
+
+ton p  =  p && (p || ton p)
+
+ton p  =  p && (ton p || p)
+
+ton p  =  not p && not (ton p)
+
+ton p  =  p || p && ton p
+
+ton p  =  p || ton p && p
+
+ton p  =  p || (p || ton p)
+
+ton p  =  p || (ton p || p)
+
+ton p  =  not p || not (ton p)
+
+
+pattern candidates:
+
+ton p  =  p
+
+ton p  =  False
+
+ton p  =  True
+
+ton p  =  not p
+
+ton False  =  False
+ton True  =  True
+
+ton False  =  True
+ton True  =  False
+
+
+Candidates for: &| :: Bool -> Bool -> Bool
+  pruning with 39/49 rules
+  [4,2,4,8,32,128,468,1576,4924] direct candidates, 0 duplicates
+  [4,14,30,8,4,48,60,280,592] pattern candidates, 0 duplicates
+
+rules:
+not False == True
+not True == False
+p && p == p
+p || p == p
+not (not p) == p
+p && False == False
+p && True == p
+False && p == False
+True && p == p
+p || False == p
+p || True == True
+False || p == p
+True || p == True
+not (p && q) == not p || not q
+not (p && q) == not q || not p
+not (p || q) == not p && not q
+not (p || q) == not q && not p
+p && not p == False
+not p && p == False
+p || not p == True
+not p || p == True
+(p && q) && r == p && (q && r)
+(p && q) && r == q && (p && r)
+(p || q) || r == p || (q || r)
+(p || q) || r == q || (p || r)
+p && (p && q) == p && q
+p && (q && p) == p && q
+p && (q && p) == q && p
+p || (p || q) == p || q
+p || (q || p) == p || q
+p || (q || p) == q || p
+p && (p || q) == p
+p && (q || p) == p
+(p || q) && p == p
+(p || q) && q == q
+p || p && q == p
+p || q && p == p
+p && q || p == p
+p && q || q == q
+equations:
+q && p == p && q
+q || p == p || q
+q && (p && r) == p && (q && r)
+r && (p && q) == p && (q && r)
+r && (q && p) == p && (q && r)
+q || (p || r) == p || (q || r)
+r || (p || q) == p || (q || r)
+r || (q || p) == p || (q || r)
+(r || q) && p == p && (q || r)
+r && q || p == p || q && r
+
+direct candidates:
+
+p &| q  =  p
+
+p &| q  =  q
+
+p &| q  =  False
+
+p &| q  =  True
+
+p &| q  =  not p
+
+p &| q  =  not q
+
+p &| q  =  p && q
+
+p &| q  =  q && p
+
+p &| q  =  p || q
+
+p &| q  =  q || p
+
+p &| q  =  not p && q
+
+p &| q  =  not q && p
+
+p &| q  =  not p || q
+
+p &| q  =  not q || p
+
+p &| q  =  p && not q
+
+p &| q  =  q && not p
+
+p &| q  =  p || not q
+
+p &| q  =  q || not p
+
+p &| q  =  not p && not q
+
+p &| q  =  not q && not p
+
+p &| q  =  not p || not q
+
+p &| q  =  not q || not p
+
+p &| q  =  p && p &| p
+
+p &| q  =  p && p &| q
+
+p &| q  =  p && p &| False
+
+p &| q  =  p && p &| True
+
+p &| q  =  p && q &| q
+
+p &| q  =  p && False &| q
+
+p &| q  =  p && True &| q
+
+p &| q  =  q && p &| p
+
+p &| q  =  q && p &| q
+
+p &| q  =  q && p &| False
+
+p &| q  =  q && p &| True
+
+p &| q  =  q && q &| q
+
+p &| q  =  q && False &| q
+
+p &| q  =  q && True &| q
+
+p &| q  =  p || p &| p
+
+p &| q  =  p || p &| q
+
+p &| q  =  p || p &| False
+
+p &| q  =  p || p &| True
+
+p &| q  =  p || q &| q
+
+p &| q  =  p || False &| q
+
+p &| q  =  p || True &| q
+
+p &| q  =  q || p &| p
+
+p &| q  =  q || p &| q
+
+p &| q  =  q || p &| False
+
+p &| q  =  q || p &| True
+
+p &| q  =  q || q &| q
+
+p &| q  =  q || False &| q
+
+p &| q  =  q || True &| q
+
+p &| q  =  p && (not p && q)
+
+p &| q  =  p && (not p || q)
+
+p &| q  =  p && (q && not p)
+
+p &| q  =  p && (q || not p)
+
+p &| q  =  q && (not q && p)
+
+p &| q  =  q && (not q || p)
+
+p &| q  =  q && (p && not q)
+
+p &| q  =  q && (p || not q)
+
+p &| q  =  p || not p && q
+
+p &| q  =  p || (not p || q)
+
+p &| q  =  p || q && not p
+
+p &| q  =  p || (q || not p)
+
+p &| q  =  q || not q && p
+
+p &| q  =  q || (not q || p)
+
+p &| q  =  q || p && not q
+
+p &| q  =  q || (p || not q)
+
+p &| q  =  not p && (p || q)
+
+p &| q  =  not p && (q || p)
+
+p &| q  =  not q && (p || q)
+
+p &| q  =  not q && (q || p)
+
+p &| q  =  not p || p && q
+
+p &| q  =  not p || q && p
+
+p &| q  =  not q || p && q
+
+p &| q  =  not q || q && p
+
+p &| q  =  (p || q) && not p
+
+p &| q  =  (p || q) && not q
+
+p &| q  =  (q || p) && not p
+
+p &| q  =  (q || p) && not q
+
+p &| q  =  p && q || not p
+
+p &| q  =  p && q || not q
+
+p &| q  =  q && p || not p
+
+p &| q  =  q && p || not q
+
+p &| q  =  p && p &| not p
+
+p &| q  =  p && p &| not q
+
+p &| q  =  p && q &| not q
+
+p &| q  =  p && False &| not q
+
+p &| q  =  p && True &| not q
+
+p &| q  =  p && not p &| p
+
+p &| q  =  p && not p &| q
+
+p &| q  =  p && not p &| False
+
+p &| q  =  p && not p &| True
+
+p &| q  =  p && not q &| q
+
+p &| q  =  q && p &| not p
+
+p &| q  =  q && p &| not q
+
+p &| q  =  q && q &| not q
+
+p &| q  =  q && False &| not q
+
+p &| q  =  q && True &| not q
+
+p &| q  =  q && not p &| p
+
+p &| q  =  q && not p &| q
+
+p &| q  =  q && not p &| False
+
+p &| q  =  q && not p &| True
+
+p &| q  =  q && not q &| q
+
+p &| q  =  p || p &| not p
+
+p &| q  =  p || p &| not q
+
+p &| q  =  p || q &| not q
+
+p &| q  =  p || False &| not q
+
+p &| q  =  p || True &| not q
+
+p &| q  =  p || not p &| p
+
+p &| q  =  p || not p &| q
+
+p &| q  =  p || not p &| False
+
+p &| q  =  p || not p &| True
+
+p &| q  =  p || not q &| q
+
+p &| q  =  q || p &| not p
+
+p &| q  =  q || p &| not q
+
+p &| q  =  q || q &| not q
+
+p &| q  =  q || False &| not q
+
+p &| q  =  q || True &| not q
+
+p &| q  =  q || not p &| p
+
+p &| q  =  q || not p &| q
+
+p &| q  =  q || not p &| False
+
+p &| q  =  q || not p &| True
+
+p &| q  =  q || not q &| q
+
+p &| q  =  p && not (p &| p)
+
+p &| q  =  p && not (p &| q)
+
+p &| q  =  p && not (p &| False)
+
+p &| q  =  p && not (p &| True)
+
+p &| q  =  p && not (q &| q)
+
+p &| q  =  p && not (False &| q)
+
+p &| q  =  p && not (True &| q)
+
+p &| q  =  q && not (p &| p)
+
+p &| q  =  q && not (p &| q)
+
+p &| q  =  q && not (p &| False)
+
+p &| q  =  q && not (p &| True)
+
+p &| q  =  q && not (q &| q)
+
+p &| q  =  q && not (False &| q)
+
+p &| q  =  q && not (True &| q)
+
+p &| q  =  not p && p &| p
+
+p &| q  =  not p && p &| q
+
+p &| q  =  not p && p &| False
+
+p &| q  =  not p && p &| True
+
+p &| q  =  not p && q &| q
+
+p &| q  =  not p && False &| q
+
+p &| q  =  not p && True &| q
+
+p &| q  =  not q && p &| p
+
+p &| q  =  not q && p &| q
+
+p &| q  =  not q && p &| False
+
+p &| q  =  not q && p &| True
+
+p &| q  =  not q && q &| q
+
+p &| q  =  not q && False &| q
+
+p &| q  =  not q && True &| q
+
+p &| q  =  p || not (p &| p)
+
+p &| q  =  p || not (p &| q)
+
+p &| q  =  p || not (p &| False)
+
+p &| q  =  p || not (p &| True)
+
+p &| q  =  p || not (q &| q)
+
+p &| q  =  p || not (False &| q)
+
+p &| q  =  p || not (True &| q)
+
+p &| q  =  q || not (p &| p)
+
+p &| q  =  q || not (p &| q)
+
+p &| q  =  q || not (p &| False)
+
+p &| q  =  q || not (p &| True)
+
+p &| q  =  q || not (q &| q)
+
+p &| q  =  q || not (False &| q)
+
+p &| q  =  q || not (True &| q)
+
+p &| q  =  not p || p &| p
+
+p &| q  =  not p || p &| q
+
+p &| q  =  not p || p &| False
+
+p &| q  =  not p || p &| True
+
+p &| q  =  not p || q &| q
+
+p &| q  =  not p || False &| q
+
+p &| q  =  not p || True &| q
+
+p &| q  =  not q || p &| p
+
+p &| q  =  not q || p &| q
+
+p &| q  =  not q || p &| False
+
+p &| q  =  not q || p &| True
+
+p &| q  =  not q || q &| q
+
+p &| q  =  not q || False &| q
+
+p &| q  =  not q || True &| q
+
+
+pattern candidates:
+
+p &| q  =  p
+
+p &| q  =  q
+
+p &| q  =  False
+
+p &| q  =  True
+
+p &| q  =  not p
+
+p &| q  =  not q
+
+p &| False  =  p
+p &| True  =  False
+
+p &| False  =  p
+p &| True  =  True
+
+p &| False  =  False
+p &| True  =  p
+
+p &| False  =  False
+p &| True  =  True
+
+p &| False  =  True
+p &| True  =  p
+
+p &| False  =  True
+p &| True  =  False
+
+False &| p  =  p
+True &| p  =  False
+
+False &| p  =  p
+True &| p  =  True
+
+False &| p  =  False
+True &| p  =  p
+
+False &| p  =  False
+True &| p  =  True
+
+False &| p  =  True
+True &| p  =  p
+
+False &| p  =  True
+True &| p  =  False
+
+p &| q  =  p && q
+
+p &| q  =  q && p
+
+p &| q  =  p || q
+
+p &| q  =  q || p
+
+p &| False  =  p
+p &| True  =  not p
+
+p &| False  =  False
+p &| True  =  not p
+
+p &| False  =  True
+p &| True  =  not p
+
+p &| False  =  not p
+p &| True  =  p
+
+p &| False  =  not p
+p &| True  =  False
+
+p &| False  =  not p
+p &| True  =  True
+
+False &| p  =  p
+True &| p  =  not p
+
+False &| p  =  False
+True &| p  =  not p
+
+False &| p  =  True
+True &| p  =  not p
+
+False &| p  =  not p
+True &| p  =  p
+
+False &| p  =  not p
+True &| p  =  False
+
+False &| p  =  not p
+True &| p  =  True
+
+False &| False  =  False
+False &| True  =  False
+True &| False  =  False
+True &| True  =  True
+
+False &| False  =  False
+False &| True  =  False
+True &| False  =  True
+True &| True  =  False
+
+False &| False  =  False
+False &| True  =  False
+True &| False  =  True
+True &| True  =  True
+
+False &| False  =  False
+False &| True  =  True
+True &| False  =  False
+True &| True  =  False
+
+False &| False  =  False
+False &| True  =  True
+True &| False  =  False
+True &| True  =  True
+
+False &| False  =  False
+False &| True  =  True
+True &| False  =  True
+True &| True  =  False
+
+False &| False  =  False
+False &| True  =  True
+True &| False  =  True
+True &| True  =  True
+
+False &| False  =  True
+False &| True  =  False
+True &| False  =  False
+True &| True  =  False
+
+False &| False  =  True
+False &| True  =  False
+True &| False  =  False
+True &| True  =  True
+
+False &| False  =  True
+False &| True  =  False
+True &| False  =  True
+True &| True  =  False
+
+False &| False  =  True
+False &| True  =  False
+True &| False  =  True
+True &| True  =  True
+
+False &| False  =  True
+False &| True  =  True
+True &| False  =  False
+True &| True  =  False
+
+False &| False  =  True
+False &| True  =  True
+True &| False  =  False
+True &| True  =  True
+
+False &| False  =  True
+False &| True  =  True
+True &| False  =  True
+True &| True  =  False
+
+p &| q  =  not p && q
+
+p &| q  =  not q && p
+
+p &| q  =  not p || q
+
+p &| q  =  not q || p
+
+p &| q  =  p && not q
+
+p &| q  =  q && not p
+
+p &| q  =  p || not q
+
+p &| q  =  q || not p
+
+p &| q  =  not p && not q
+
+p &| q  =  not q && not p
+
+p &| q  =  not p || not q
+
+p &| q  =  not q || not p
+
+p &| q  =  (not p || q) && p
+
+p &| q  =  (not q || p) && q
+
+p &| q  =  (p || not q) && q
+
+p &| q  =  (q || not p) && p
+
+p &| q  =  not p && q || p
+
+p &| q  =  not q && p || q
+
+p &| q  =  p && not q || q
+
+p &| q  =  q && not p || p
+
+p &| q  =  p && (not p && q)
+
+p &| q  =  p && (not p || q)
+
+p &| q  =  p && (q && not p)
+
+p &| q  =  p && (q || not p)
+
+p &| q  =  q && (not q && p)
+
+p &| q  =  q && (not q || p)
+
+p &| q  =  q && (p && not q)
+
+p &| q  =  q && (p || not q)
+
+p &| q  =  p || not p && q
+
+p &| q  =  p || (not p || q)
+
+p &| q  =  p || q && not p
+
+p &| q  =  p || (q || not p)
+
+p &| q  =  q || not q && p
+
+p &| q  =  q || (not q || p)
+
+p &| q  =  q || p && not q
+
+p &| q  =  q || (p || not q)
+
+p &| q  =  not p && (p && q)
+
+p &| q  =  not p && (q && p)
+
+p &| q  =  not p && (p || q)
+
+p &| q  =  not p && (q || p)
+
+p &| q  =  not q && (p && q)
+
+p &| q  =  not q && (q && p)
+
+p &| q  =  not q && (p || q)
+
+p &| q  =  not q && (q || p)
+
+p &| q  =  not p || p && q
+
+p &| q  =  not p || q && p
+
+p &| q  =  not p || (p || q)
+
+p &| q  =  not p || (q || p)
+
+p &| q  =  not q || p && q
+
+p &| q  =  not q || q && p
+
+p &| q  =  not q || (p || q)
+
+p &| q  =  not q || (q || p)
 
 p &| q  =  (p || q) && not p
 
diff --git a/bench/gps.hs b/bench/gps.hs
--- a/bench/gps.hs
+++ b/bench/gps.hs
@@ -2,14 +2,31 @@
 --
 -- Copyright (C) 2021 Rudy Matela
 -- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+{-# LANGUAGE CPP #-}
 import Conjure
 import System.Environment (getArgs)
 
 import Data.Char (isLetter)                      -- GPS bench  #5
 import Data.Char (isSpace)                       -- GPS bench  #7
 import Data.Ratio ((%), numerator, denominator)  -- GPS bench #10
+import Data.List (findIndex)                     -- GPS bench #12
+import Data.Maybe (fromJust)                     -- GPS bench #12
+import Data.List (sort)                          -- GPS bench #16
+import Data.Char (chr,ord)                       -- GPS bench #24
 
+-- GPS bench #16:
+#if __GLASGOW_HASKELL__ >= 710
+import Data.List (isSubsequenceOf)
+#else
+isSubsequenceOf :: Eq a => [a] -> [a] -> Bool
+isSubsequenceOf []    _  = True
+isSubsequenceOf (_:_) [] = False
+isSubsequenceOf (x:xs) (y:ys)
+  | x == y    =    xs  `isSubsequenceOf` ys
+  | otherwise = (x:xs) `isSubsequenceOf` ys
+#endif
 
+
 gps1p :: Int -> Float -> Float
 gps1p 0 1.0  =  1.0
 gps1p 1 0.0  =  1.0
@@ -315,6 +332,571 @@
     , prim "wallisNext" wallisNext
     ]
 
+
+-- GPS Benchmark #11 -- Lengths Backwards
+
+gps11p :: [String] -> [Int]
+gps11p ["a"]  =  [1]
+gps11p ["aa","a"]  =  [1,2]
+gps11p ["a","aa"]  =  [2,1]
+gps11p ["a","aa","aaa"]  =  [3,2,1]
+
+gps11g :: [String] -> [Int]
+gps11g  =  reverse . map length
+
+gps11g2 :: [String] -> [Int]
+gps11g2 []  =  []
+gps11g2 (s:ss)  =  gps11g2 ss ++ [length s]
+
+gps11c :: IO ()
+gps11c  =  do
+  conjure "gps11" gps11p
+    [ prim "reverse" (reverse :: [Int] -> [Int])
+    , prim "length"  (length :: String -> Int)
+    , prim "map"     (map :: (String -> Int) -> [String] -> [Int])
+    ]
+
+  conjure "gps11" gps11p
+    [ pr ([] :: [Int])
+    , prim ":" ((:) :: Int -> [Int] -> [Int])
+    , prim "++" ((++) :: [Int] -> [Int] -> [Int])
+    , prim "length"  (length :: String -> Int)
+    ]
+
+
+-- GPS Benchmark #12 -- Last index or zero
+
+gps12p :: [Int] -> Int
+gps12p [0]  =  0
+gps12p [0,0]  =  1
+gps12p [0,1,0]  =  2
+gps12p [1,0,1]  =  1
+gps12p [0,1,0,1]  =  2
+gps12p [1,0,1,0]  =  3
+
+gps12g :: [Int] -> Int
+gps12g xs  =  length xs - fromJust (findIndex (0==) (reverse xs)) - 1
+
+gps12c :: IO ()
+gps12c  =  do
+  conjureWith args{maxSize = 11} "gps12" gps12p
+    [ prim "length"    (length :: [Int] -> Int)
+    , prim "reverse"   (reverse :: [Int] -> [Int])
+    , prim "findIndex" (findIndex :: (Int -> Bool) -> [Int] -> Maybe Int)
+    , prim "fromJust"  (fromJust :: Maybe Int -> Int)
+    , prim "-"         ((-) :: Int -> Int -> Int)
+    , prim "=="        ((==) :: Int -> Int -> Bool)
+    , pr (0 :: Int)
+    , pr (1 :: Int)
+    ]
+
+
+-- GPS Benchmark #13 -- Vector Average --
+
+gps13p :: [Rational] -> Rational
+gps13p [0,2]  =  1
+gps13p [1,2,3]  =  2
+gps13p [0,0,2,2]  =  1
+
+gps13g :: [Rational] -> Rational
+gps13g qs  =  foldr (+) 0 qs / fromIntegral (length qs)
+
+gps13c :: IO ()
+gps13c  =  do
+  conjure "gps13" gps13p
+    [ prim "0" (0 :: Rational)
+    , prim "+" ((+) :: Rational -> Rational -> Rational)
+    , prim "/" ((/) :: Rational -> Rational -> Rational)
+    , prim "foldr" (foldr :: (Rational -> Rational -> Rational) -> Rational -> [Rational] -> Rational)
+    , prim "length" (length :: [Rational] -> Int)
+    , prim "fromIntegral" (fromIntegral :: Int -> Rational)
+    ]
+
+
+-- GPS Benchmark #14 -- Count Odds --
+
+gps14p :: [Int] -> Int
+gps14p [0,0]  =  0
+gps14p [1,3]  =  2
+gps14p [0,1,2]  =  1
+
+gps14g :: [Int] -> Int
+gps14g xs  =  length (filter odd xs)
+  where
+  odd x  =  x `mod` 2 /= 0
+
+gps14g2 :: [Int] -> Int
+gps14g2 []  =  0
+gps14g2 (x:xs)  =  if x `mod` 2 == 0
+                   then gps14g2 xs
+                   else 1 + gps14g2 xs
+
+odd' :: Int -> Bool
+odd' 0  =  False
+odd' 1  =  True
+odd' 2  =  False
+odd' 3  =  True
+odd' 4  =  False
+odd' 5  =  True
+
+gps14c :: IO ()
+gps14c  =  do
+  conjure "odd" odd'
+    [ pr (0 :: Int)
+    , pr (1 :: Int)
+    , pr (2 :: Int)
+    , prim "`mod`" (mod :: Int -> Int -> Int)
+    , prim "/=" ((/=) :: Int -> Int -> Bool)
+    ]
+
+  conjure "gps14" gps14p
+    [ prim "odd" (odd :: Int -> Bool)
+    , prim "filter" (filter :: (Int -> Bool) -> [Int] -> [Int])
+    , prim "length" (length :: [Int] -> Int)
+    ]
+
+  -- hah!  I was expecting Conjure to use an if like above, but it was smarter:
+  -- gps14 []  =  0
+  -- gps14 (x:xs)  =  x `mod` 2 + gps14 xs
+  conjureWith args{maxSize=13} "gps14" gps14p
+    [ pr (0 :: Int)
+    , pr (1 :: Int)
+    , pr (2 :: Int)
+    , prim "+" ((+) :: Int -> Int -> Int)
+    , prim "`mod`" (mod :: Int -> Int -> Int)
+    , prim "==" ((==) :: Int -> Int -> Bool)
+    , prif (undefined :: Int)
+    ]
+
+
+-- GPS Benchmark #15 -- Mirror Image --
+
+gps15p :: [Int] -> [Int] -> Bool
+gps15p [0] [0]  =  True
+gps15p [0,1] [1,0]  =  True
+gps15p [0,1] [0,1]  =  False
+gps15p [0,0,1] [1,0,0]  =  True
+gps15p [0,0,1] [0,0,1]  =  False
+
+gps15g :: [Int] -> [Int] -> Bool
+gps15g xs ys  =  reverse xs == ys
+
+gps15c :: IO ()
+gps15c  =  do
+  conjure "gps15" gps15p
+    [ prim "==" ((==) :: [Int] -> [Int] -> Bool)
+    , prim "reverse" (reverse :: [Int] -> [Int])
+    ]
+
+
+-- GPS Benchmark #16 -- Super Anagrams --
+
+gps16p :: String -> String -> Bool
+gps16p "a" "aa"  =  True
+gps16p "aa" "a"  =  False
+gps16p "ab" "ba"  =  True
+gps16p "ba" "ab"  =  True
+gps16p "ab" "c"  =  False
+gps16p "ab" "aba"  =  True
+
+gps16g :: String -> String -> Bool
+gps16g cs ds  =  sort cs `isSubsequenceOf` sort ds
+
+gps16c :: IO ()
+gps16c  =  do
+  conjure "gps16" gps16p
+    [ prim "`isSubsequenceOf`" (isSubsequenceOf :: String -> String -> Bool)
+    , prim "sort" (sort :: String -> String)
+    ]
+
+
+-- GPS Benchmark #17 -- Sum of Squares --
+-- Given integer _n_, return the sum of squaring each integer in 1 to n
+gps17p :: Int -> Int
+gps17p 1  =  1
+gps17p 2  =  5
+gps17p 3  =  14
+gps17p 4  =  30
+
+gps17g :: Int -> Int
+gps17g n  =   n * n + gps17g (n - 1)
+
+gps17c :: IO ()
+gps17c  =  conjure "gps17" gps17p
+  [ pr (0 :: Int)
+  , pr (1 :: Int)
+  , prim "+" ((+) :: Int -> Int -> Int)
+  , prim "*" ((*) :: Int -> Int -> Int)
+  , prim "-" ((-) :: Int -> Int -> Int)
+  ]
+
+
+-- GPS Benchmark #18 -- Vectors Summed --
+-- zip with sum
+gps18p :: [Int] -> [Int] -> [Int]
+gps18p [0] [0]  =  [0]
+gps18p [0,1] [0,1]  =  [0,2]
+gps18p [1,0] [0,1]  =  [1,1]
+
+gps18g :: [Int] -> [Int] -> [Int]
+gps18g xs ys  =  zipWith (+) xs ys
+
+gps18g' :: [Int] -> [Int] -> [Int]
+gps18g' [] []  =  []
+gps18g' (x:xs) (y:ys)  =  x + y : gps18g' xs ys
+
+gps18c :: IO ()
+gps18c  =  do
+  conjure "gps18" gps18p
+    [ pr ([] :: [Int])
+    , prim "+" ((+) :: Int -> Int -> Int)
+    , prim ":" ((:) :: Int -> [Int] -> [Int])
+    ]
+
+  conjure "gps18" gps18p
+    [ prim "+" ((+) :: Int -> Int -> Int)
+    , prim "zipWith" (zipWith :: (Int -> Int -> Int) -> [Int] -> [Int] -> [Int])
+    ]
+
+
+-- GPS Benchmark #19 -- X-Word Lines --
+
+gps19p :: Int -> String -> String
+gps19p 1 "a a a"  =  "a\na\na\n"
+gps19p 1 "a\na\na"  =  "a\na\na\n"
+gps19p 2 "a a a"  =  "a a\na\n"
+
+gps19g :: Int -> String -> String
+gps19g x xs  =  unlines (map unwords (chunk x (words xs)))
+
+chunk :: Int -> [String] -> [[String]]
+chunk x []  =  []
+chunk x ss  =  take x ss : chunk x (drop x ss)
+
+gps19c :: IO ()
+gps19c  =  do
+  -- speculate takes too long
+  conjure "gps19" gps19p $ take 0
+    [ prim "words" (words :: String -> [String])
+--  , prim "words" (lines :: String -> [String])
+    , prim "unwords" (unwords :: [String] -> String)
+    , prim "unlines" (unlines :: [String] -> String)
+--  , prim "chunk" (chunk :: Int -> [String] -> [[String]])
+--  , prim "map" (map :: ([String] -> String) -> [[String]] -> [String])
+    ]
+
+
+-- GPS Benchmark #20 -- Pig Latin --
+gps20p :: String -> String
+gps20p "hello world"  =  "ellohay orldway"
+gps20p "a string"  =  "aay tringsay"
+
+gps20g :: String -> String
+gps20g  =  pig
+
+pig :: String -> String
+pig  =  unwords . map pig1 . words
+
+pig1 :: String -> String
+pig1 (c:cs)  =  if isVowel c
+                then (c:cs) ++ "ay"
+                else cs ++ (c:"ay")
+
+pig1' :: String -> String
+pig1' "hello"   =  "ellohay"
+pig1' "world"   =  "orldway"
+pig1' "string"  =  "tringsay"
+pig1' "east"    =  "eastay"
+
+isVowel :: Char -> Bool
+isVowel 'a'  =  True
+isVowel 'e'  =  True
+isVowel 'i'  =  True
+isVowel 'o'  =  True
+isVowel 'u'  =  True
+isVowel 'y'  =  True
+isVowel  _   =  False
+
+isVowel' :: Char -> Bool
+isVowel' 'a'  =  True
+isVowel' 'e'  =  True
+isVowel' 'i'  =  True
+isVowel' 'o'  =  True
+isVowel' 'u'  =  True
+isVowel' 'y'  =  True
+isVowel' ' '  =  False
+isVowel' 'b'  =  False
+isVowel' 'c'  =  False
+isVowel' 'd'  =  False
+isVowel' 'f'  =  False
+isVowel' 'g'  =  False
+
+gps20c :: IO ()
+gps20c  =  do
+  conjureWith args{maxSize=22} "isVowel" isVowel'
+    [ pr 'a'
+    , pr 'e'
+    , pr 'i'
+    , pr 'o'
+    , pr 'u'
+    , pr 'y'
+    , pr True
+    , pr False
+    ]
+
+  let force  =  [ [val "hello"]
+                , [val "world"]
+                , [val "string"]
+                , [val "east"]
+                ]
+  conjureWith args{forceTests=force, maxSize=14} "pig1" pig1'
+    [ pr "ay"
+    , prif (undefined :: String)
+    , prim "isVowel" isVowel
+    , prim "++" ((++) :: String -> String -> String)
+    , prim ":" ((:) :: Char -> String -> String)
+    ]
+
+  let force  =  [ [val "hello world"]
+                , [val "a string"]
+                ]
+  conjureWith args{forceTests=force} "gps20c" gps20p
+    [ prim "words" (words :: String -> [String])
+    , prim "unwords" (unwords :: [String] -> String)
+    , prim "map" (map :: (String -> String) -> [String] -> [String])
+    , prim "pig1" pig1
+    ]
+
+
+
+-- GPS Benchmark #21 -- Negative To Zero --
+
+gps21p :: [Int] -> [Int]
+gps21p [1]  =  [1]
+gps21p [-1]  =  [0]
+gps21p [1,-1]  =  [1,0]
+gps21p [-1,1]  =  [0,1]
+
+gps21g :: [Int] -> [Int]
+gps21g []  =  []
+gps21g (x:xs)  =  (if x < 0 then 0 else x) : gps21g xs
+
+gps21c :: IO ()
+gps21c  =  conjure "gps21" gps21p
+  [ pr ([] :: [Int])
+  , pr (0 :: Int)
+  , prim ":" ((:) :: Int -> [Int] -> [Int])
+  , prim "<" ((<) :: Int -> Int -> Bool)
+  , prif (undefined :: Int)
+  ]
+
+
+-- GPS Benchmark #22 -- Scrabble Score --
+gps22p :: String -> Int
+gps22p "a"  =  1
+gps22p "hello"  =  8
+gps22p "world"  =  9
+gps22p "scrabble"  =  14
+
+gps22g :: String -> Int
+gps22g  =  scrabble
+
+scrabble :: String -> Int
+scrabble s  =  foldr (+) 0 (map scrabble1 s)
+
+scrabble1 :: Char -> Int
+scrabble1 'd'  =   2
+scrabble1 'g'  =   2
+scrabble1 'b'  =   3
+scrabble1 'c'  =   3
+scrabble1 'm'  =   3
+scrabble1 'p'  =   3
+scrabble1 'f'  =   4
+scrabble1 'h'  =   4
+scrabble1 'v'  =   4
+scrabble1 'w'  =   4
+scrabble1 'y'  =   4
+scrabble1 'k'  =   5
+scrabble1 'j'  =   8
+scrabble1 'x'  =   8
+scrabble1 'q'  =  10
+scrabble1 'z'  =  10
+scrabble1  _   =   1 -- aeilnorstu
+
+gps22c :: IO ()
+gps22c  =  do
+  let force  =  [ [val "a"]
+                , [val "hello"]
+                , [val "world"]
+                , [val "scrabble"]
+                ]
+
+  conjureWith args{forceTests=force} "gps22" gps22p
+    [ pr (0 :: Int)
+    , prim "+" ((+) :: Int -> Int -> Int)
+    , prim "map" (map :: (Int -> Int) -> [Int] -> [Int])
+    , prim "scrabble1" scrabble1
+    ]
+
+
+-- GPS Benchmark #23 -- Word Stats --
+gps23p :: String -> ([(Int,Int)], Int, Double)
+gps23p ""  =  ([], 0, 1.0/0.0)
+
+gps23c :: IO ()
+gps23c  =  do
+  conjure "gps23" gps23p []
+
+
+-- GPS Benchmark #24 -- Checksum --
+gps24p :: String -> Char
+gps24p "a"  =  'A'
+gps24p "aa"  =  '"'
+gps24p "a a"  =  'B'
+gps24p "b"  =   'B'
+
+gps24g :: String -> Char
+gps24g s  =  chr (sum (map ord s) `mod` 64 + ord ' ')
+
+gps24c :: IO ()
+gps24c  =  conjure "gps24" gps24p
+  [ pr ' '
+  , pr (64 :: Int)
+  , prim "+" ((+) :: Int -> Int -> Int)
+  , prim "`mod`" (mod :: Int -> Int -> Int)
+  , prim "sum" (sum :: [Int] -> Int)
+  , prim "ord" ord
+  , prim "chr" chr
+  , prim "map" (map :: (Char -> Int) -> String -> [Int])
+  ]
+
+
+-- GPS Benchmark #25 -- Digits --
+gps25p :: Int -> [Int]
+gps25p 0  =  [0]
+gps25p 1  =  [1]
+gps25p 12  =  [2,1]
+gps25p (-21)  =  [1,-2]
+
+gps25g :: Int -> [Int]
+gps25g 0  =  [0]                                          --  3
+gps25g n  =  if abs n < 10                                --  8
+             then [n]                                     -- 11
+             else abs (n `rem` 10) : gps25g (n `quot` 10) -- 20
+
+-- out of reach performance-wise
+gps25c :: IO ()
+gps25c  =  conjureWith args{maxSize=20} "gps25" gps25p $ take 0
+  [ pr (0 :: Int)
+  , pr (10 :: Int)
+  , pr ([] :: [Int])
+  , prim ":" ((:) :: Int -> [Int] -> [Int])
+  , prif (undefined :: [Int])
+  , prim "abs" (abs :: Int -> Int)
+  , prim "<" ((<) :: Int -> Int -> Bool)
+  , prim "rem" (rem :: Int -> Int -> Int)
+  , prim "quot" (quot :: Int -> Int -> Int)
+  ]
+
+
+-- GPS Benchmark #26 -- Grade --
+gps26p :: Int -> Int -> Int -> Int -> Int -> Char
+gps26p 4 3 2 1 5 = 'A'
+gps26p 4 3 2 1 4 = 'A'
+gps26p 4 3 2 1 3 = 'B'
+gps26p 4 3 2 1 2 = 'C'
+gps26p 4 3 2 1 1 = 'D'
+gps26p 4 3 2 1 0 = 'F'
+
+gps26g :: Int -> Int -> Int -> Int -> Int -> Char
+gps26g a b c d x
+  | x >= a     =  'A'
+  | x >= b     =  'B'
+  | x >= c     =  'C'
+  | x >= d     =  'D'
+  | otherwise  =  'F'
+
+-- out of reach performance-wise
+gps26c :: IO ()
+gps26c  =  conjureWith args{maxSize=2} "gps26" gps26p
+  [ pr 'A'
+  , pr 'B'
+  , pr 'C'
+  , pr 'D'
+  , pr 'F'
+  , prif (undefined :: Char)
+  , prim ">=" ((>=) :: Int -> Int -> Bool)
+  ]
+
+
+-- GPS Benchmark #27 -- Median --
+gps27p :: Int -> Int -> Int -> Int
+gps27p 0 1 2  =  1
+gps27p 1 0 2  =  1
+gps27p (-1) 1 0  =  0
+
+gps27g :: Int -> Int -> Int -> Int
+gps27g x y z
+  | y < x && x < z  =  x  -- 8
+  | x < y && y < z  =  y  -- 16
+  | otherwise       =  z  -- 17
+-- Conjure found a smaller implementation!
+
+gps27c :: IO ()
+gps27c  =  conjure "gps27" gps27p
+  [ prim "<" ((<) :: Int -> Int -> Bool)
+  , prim "&&" (&&)
+  , prif (undefined :: Int)
+  ]
+
+
+-- GPS Benchmark #28 -- Smallest --
+gps28p :: Int -> Int -> Int -> Int -> Int
+gps28p 0 1 2 3  =  0
+gps28p 3 2 1 0  =  0
+gps28p 1 0 2 3  =  0
+gps28p 3 2 0 1  =  0
+gps28p 1 1 1 2  =  1
+
+gps28c :: IO ()
+gps28c  =  conjure "gps28" gps28p
+  [ prim "`min`" (min :: Int -> Int -> Int)
+  ]
+
+
+-- GPS Benchmark #29 -- Syllables --
+gps29p :: String -> Int
+gps29p "pub"  =  1
+gps29p "hello"  =  2
+gps29p "world"  =  1
+gps29p "string"  =  1
+gps29p "haskell"  =  2
+gps29p "photography"  =  4
+
+gps29g :: String -> Int
+gps29g ""  =  0
+gps29g (c:cs)  =  if isVowel c
+                  then 1 + gps29g cs
+                  else gps29g cs
+
+gps29c :: IO ()
+gps29c  =  conjureWith args{forceTests=force} "gps29" gps29p
+  [ pr (0 :: Int)
+  , pr (1 :: Int)
+  , prim "+" ((+) :: Int->Int->Int)
+  , prif (undefined :: Int)
+  , prim "isVowel" isVowel
+  ]
+  where
+  force  =  [ [val "pub"]
+            , [val "hello"]
+            , [val "world"]
+            , [val "string"]
+            , [val "haskell"]
+            , [val "photography"]
+            ]
+
+
 main :: IO ()
 main  =  do
   as <- getArgs
@@ -334,4 +916,23 @@
          , gps8c
          , gps9c
          , gps10c
+         , gps11c
+         , gps12c
+         , gps13c
+         , gps14c
+         , gps15c
+         , gps16c
+         , gps17c
+         , gps18c
+         , gps19c
+         , gps20c
+         , gps21c
+         , gps22c
+         , gps23c
+         , gps24c
+         , gps25c
+         , gps26c
+         , gps27c
+         , gps28c
+         , gps29c
          ]
diff --git a/bench/gps.out b/bench/gps.out
--- a/bench/gps.out
+++ b/bench/gps.out
@@ -35,7 +35,7 @@
 -- looking through 0 candidates of size 5
 -- looking through 1536 candidates of size 6
 -- looking through 0 candidates of size 7
--- looking through 26127 candidates of size 8
+-- looking through 26991 candidates of size 8
 gps3 x y z  =  enumFromThenTo x (x + z) (y - 1)
 
 gps3 :: Int -> Int -> Int -> [Int]
@@ -83,10 +83,10 @@
 -- pruning with 16/18 rules
 -- looking through 4 candidates of size 1
 -- looking through 9 candidates of size 2
--- looking through 30 candidates of size 3
--- looking through 125 candidates of size 4
--- looking through 415 candidates of size 5
--- looking through 1602 candidates of size 6
+-- looking through 33 candidates of size 3
+-- looking through 146 candidates of size 4
+-- looking through 624 candidates of size 5
+-- looking through 2576 candidates of size 6
 cannot conjure
 
 gps7 :: [Char] -> ([Char],Int)
@@ -100,9 +100,9 @@
 -- looking through 7 candidates of size 6
 -- looking through 16 candidates of size 7
 -- looking through 39 candidates of size 8
--- looking through 86 candidates of size 9
--- looking through 193 candidates of size 10
--- looking through 414 candidates of size 11
+-- looking through 88 candidates of size 9
+-- looking through 201 candidates of size 10
+-- looking through 442 candidates of size 11
 gps7 cs  =  (init (unlines (words cs)),length (filter (not . isSpace) cs))
 
 gps8 :: [Char] -> [Char] -> [(Int,Char,Char)]
@@ -121,11 +121,11 @@
 -- looking through 4 candidates of size 3
 -- looking through 4 candidates of size 4
 -- looking through 10 candidates of size 5
--- looking through 25 candidates of size 6
--- looking through 35 candidates of size 7
--- looking through 87 candidates of size 8
--- looking through 150 candidates of size 9
--- looking through 272 candidates of size 10
+-- looking through 24 candidates of size 6
+-- looking through 34 candidates of size 7
+-- looking through 83 candidates of size 8
+-- looking through 143 candidates of size 9
+-- looking through 259 candidates of size 10
 gps9 x  =  filter even (filter (x >) (map sq [1..x]))
 
 wallisNext :: Ratio Integer -> Ratio Integer
@@ -138,7 +138,7 @@
 -- looking through 4 candidates of size 5
 -- looking through 118 candidates of size 6
 -- looking through 5 candidates of size 7
--- looking through 825 candidates of size 8
+-- looking through 1001 candidates of size 8
 wallisNext (x % y)  =  (y + 1) % (x + 1)
 
 gps10 :: Int -> Ratio Integer
@@ -153,4 +153,324 @@
 -- looking through 8 candidates of size 7
 -- looking through 13 candidates of size 8
 gps10 x  =  product (take x (iterate wallisNext (2 % 3)))
+
+gps11 :: [[Char]] -> [Int]
+-- testing 4 combinations of argument values
+-- pruning with 1/1 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 1 candidates of size 3
+-- looking through 1 candidates of size 4
+gps11 css  =  reverse (map length css)
+
+gps11 :: [[Char]] -> [Int]
+-- testing 4 combinations of argument values
+-- pruning with 4/4 rules
+-- looking through 1 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 1 candidates of size 3
+-- looking through 0 candidates of size 4
+-- looking through 1 candidates of size 5
+-- looking through 2 candidates of size 6
+-- looking through 0 candidates of size 7
+-- looking through 2 candidates of size 8
+gps11 []  =  []
+gps11 (cs:css)  =  gps11 css ++ [length cs]
+
+gps12 :: [Int] -> Int
+-- testing 6 combinations of argument values
+-- pruning with 13/27 rules
+-- looking through 2 candidates of size 1
+-- looking through 5 candidates of size 2
+-- looking through 5 candidates of size 3
+-- looking through 16 candidates of size 4
+-- looking through 26 candidates of size 5
+-- looking through 71 candidates of size 6
+-- looking through 160 candidates of size 7
+-- looking through 432 candidates of size 8
+-- looking through 1166 candidates of size 9
+-- looking through 3187 candidates of size 10
+-- looking through 9282 candidates of size 11
+gps12 xs  =  (length xs - fromJust (findIndex (0 ==) (reverse xs))) - 1
+
+gps13 :: [Ratio Integer] -> Ratio Integer
+-- testing 3 combinations of argument values
+-- pruning with 4/8 rules
+-- looking through 1 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 10 candidates of size 4
+-- looking through 15 candidates of size 5
+-- looking through 56 candidates of size 6
+-- looking through 125 candidates of size 7
+-- looking through 449 candidates of size 8
+gps13 qs  =  foldr (+) 0 qs / fromIntegral (length qs)
+
+odd :: Int -> Bool
+-- testing 6 combinations of argument values
+-- pruning with 12/13 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 7 candidates of size 3
+-- looking through 0 candidates of size 4
+-- looking through 71 candidates of size 5
+odd x  =  x `mod` 2 /= 0
+
+gps14 :: [Int] -> Int
+-- testing 3 combinations of argument values
+-- pruning with 1/1 rules
+-- looking through 0 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 1 candidates of size 4
+gps14 xs  =  length (filter odd xs)
+
+gps14 :: [Int] -> Int
+-- testing 3 combinations of argument values
+-- pruning with 39/58 rules
+-- looking through 3 candidates of size 1
+-- looking through 9 candidates of size 2
+-- looking through 7 candidates of size 3
+-- looking through 58 candidates of size 4
+-- looking through 66 candidates of size 5
+-- looking through 600 candidates of size 6
+-- looking through 1034 candidates of size 7
+gps14 []  =  0
+gps14 (x:xs)  =  x `mod` 2 + gps14 xs
+
+gps15 :: [Int] -> [Int] -> Bool
+-- testing 5 combinations of argument values
+-- pruning with 3/7 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 8 candidates of size 4
+gps15 xs ys  =  reverse xs == ys
+
+gps16 :: [Char] -> [Char] -> Bool
+-- testing 6 combinations of argument values
+-- pruning with 3/3 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 6 candidates of size 4
+-- looking through 2 candidates of size 5
+gps16 cs ds  =  sort cs `isSubsequenceOf` sort ds
+
+gps17 :: Int -> Int
+-- testing 4 combinations of argument values
+-- pruning with 27/65 rules
+-- looking through 3 candidates of size 1
+-- looking through 4 candidates of size 2
+-- looking through 13 candidates of size 3
+-- looking through 34 candidates of size 4
+-- looking through 75 candidates of size 5
+-- looking through 183 candidates of size 6
+-- looking through 577 candidates of size 7
+-- looking through 1311 candidates of size 8
+-- looking through 5282 candidates of size 9
+gps17 0  =  0
+gps17 x  =  x * x + gps17 (x - 1)
+
+gps18 :: [Int] -> [Int] -> [Int]
+-- testing 3 combinations of argument values
+-- pruning with 2/6 rules
+-- looking through 3 candidates of size 1
+-- looking through 8 candidates of size 2
+-- looking through 11 candidates of size 3
+-- looking through 44 candidates of size 4
+-- looking through 116 candidates of size 5
+-- looking through 92 candidates of size 6
+-- looking through 791 candidates of size 7
+-- looking through 220 candidates of size 8
+-- looking through 4632 candidates of size 9
+gps18 [] []  =  []
+gps18 [] (x:xs)  =  xs
+gps18 (x:xs) []  =  xs
+gps18 (x:xs) (y:ys)  =  x + y:gps18 xs ys
+
+gps18 :: [Int] -> [Int] -> [Int]
+-- testing 3 combinations of argument values
+-- pruning with 2/7 rules
+-- looking through 2 candidates of size 1
+-- looking through 2 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 12 candidates of size 4
+gps18 xs ys  =  zipWith (+) xs ys
+
+gps19 :: Int -> [Char] -> [Char]
+-- testing 2 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 1 candidates of size 1
+-- looking through 0 candidates of size 2
+cannot conjure
+
+isVowel :: Char -> Bool
+-- testing 12 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 2 candidates of size 1
+-- looking through 2 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 8 candidates of size 4
+-- looking through 8 candidates of size 5
+-- looking through 14 candidates of size 6
+-- looking through 28 candidates of size 7
+-- looking through 32 candidates of size 8
+-- looking through 40 candidates of size 9
+-- looking through 54 candidates of size 10
+-- looking through 78 candidates of size 11
+-- looking through 78 candidates of size 12
+-- looking through 102 candidates of size 13
+-- looking through 88 candidates of size 14
+-- looking through 104 candidates of size 15
+-- looking through 136 candidates of size 16
+-- looking through 122 candidates of size 17
+-- looking through 92 candidates of size 18
+-- looking through 92 candidates of size 19
+-- looking through 62 candidates of size 20
+-- looking through 62 candidates of size 21
+-- looking through 126 candidates of size 22
+isVowel 'a'  =  True
+isVowel 'e'  =  True
+isVowel 'i'  =  True
+isVowel 'o'  =  True
+isVowel 'u'  =  True
+isVowel 'y'  =  True
+isVowel c  =  False
+
+pig1 :: [Char] -> [Char]
+-- testing 4 combinations of argument values
+-- pruning with 5/5 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 5 candidates of size 3
+-- looking through 8 candidates of size 4
+-- looking through 14 candidates of size 5
+-- looking through 28 candidates of size 6
+-- looking through 47 candidates of size 7
+-- looking through 126 candidates of size 8
+-- looking through 201 candidates of size 9
+-- looking through 631 candidates of size 10
+-- looking through 1069 candidates of size 11
+-- looking through 3495 candidates of size 12
+-- looking through 6382 candidates of size 13
+-- looking through 20409 candidates of size 14
+pig1 ""  =  "ay"
+pig1 (c:cs)  =  if isVowel c then (c:cs) ++ "ay" else cs ++ (c:"ay")
+
+gps20c :: [Char] -> [Char]
+-- testing 2 combinations of argument values
+-- pruning with 1/1 rules
+-- looking through 1 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 3 candidates of size 4
+-- looking through 5 candidates of size 5
+gps20c cs  =  unwords (map pig1 (words cs))
+
+gps21 :: [Int] -> [Int]
+-- testing 4 combinations of argument values
+-- pruning with 4/4 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 6 candidates of size 4
+-- looking through 5 candidates of size 5
+-- looking through 13 candidates of size 6
+-- looking through 9 candidates of size 7
+-- looking through 30 candidates of size 8
+-- looking through 25 candidates of size 9
+-- looking through 65 candidates of size 10
+gps21 []  =  []
+gps21 (x:xs)  =  (if x < 0 then 0 else x):gps21 xs
+
+gps22 :: [Char] -> Int
+-- testing 4 combinations of argument values
+-- pruning with 5/9 rules
+-- looking through 1 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 0 candidates of size 4
+-- looking through 0 candidates of size 5
+-- looking through 4 candidates of size 6
+gps22 ""  =  0
+gps22 (c:cs)  =  scrabble1 c + gps22 cs
+
+gps23 :: [Char] -> ([(Int,Int)],Int,Double)
+-- testing 1 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+cannot conjure
+
+gps24 :: [Char] -> Char
+-- testing 4 combinations of argument values
+-- pruning with 15/19 rules
+-- looking through 1 candidates of size 1
+-- looking through 2 candidates of size 2
+-- looking through 4 candidates of size 3
+-- looking through 3 candidates of size 4
+-- looking through 9 candidates of size 5
+-- looking through 19 candidates of size 6
+-- looking through 40 candidates of size 7
+-- looking through 97 candidates of size 8
+-- looking through 286 candidates of size 9
+-- looking through 739 candidates of size 10
+gps24 cs  =  chr (ord ' ' + sum (map ord cs) `mod` 64)
+
+gps25 :: Int -> [Int]
+-- testing 4 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+cannot conjure
+
+gps26 :: Int -> Int -> Int -> Int -> Int -> Char
+-- testing 5 combinations of argument values
+-- pruning with 4/4 rules
+-- looking through 5 candidates of size 1
+-- looking through 0 candidates of size 2
+cannot conjure
+
+gps27 :: Int -> Int -> Int -> Int
+-- testing 3 combinations of argument values
+-- pruning with 14/18 rules
+-- looking through 3 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 0 candidates of size 4
+-- looking through 0 candidates of size 5
+-- looking through 36 candidates of size 6
+-- looking through 0 candidates of size 7
+-- looking through 0 candidates of size 8
+-- looking through 0 candidates of size 9
+-- looking through 180 candidates of size 10
+-- looking through 2592 candidates of size 11
+gps27 x y z  =  if x < y then (if y < z then y else z) else x
+
+gps28 :: Int -> Int -> Int -> Int -> Int
+-- testing 5 combinations of argument values
+-- pruning with 6/10 rules
+-- looking through 4 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 12 candidates of size 3
+-- looking through 0 candidates of size 4
+-- looking through 24 candidates of size 5
+-- looking through 0 candidates of size 6
+-- looking through 72 candidates of size 7
+gps28 x y z x'  =  x `min` (y `min` (z `min` x'))
+
+gps29 :: [Char] -> Int
+-- testing 6 combinations of argument values
+-- pruning with 7/11 rules
+-- looking through 2 candidates of size 1
+-- looking through 2 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 4 candidates of size 4
+-- looking through 6 candidates of size 5
+-- looking through 10 candidates of size 6
+-- looking through 18 candidates of size 7
+-- looking through 33 candidates of size 8
+-- looking through 65 candidates of size 9
+gps29 ""  =  0
+gps29 (c:cs)  =  (if isVowel c then 1 else 0) + gps29 cs
 
diff --git a/bench/gps2.hs b/bench/gps2.hs
new file mode 100644
--- /dev/null
+++ b/bench/gps2.hs
@@ -0,0 +1,797 @@
+-- gps2.hs: General Program Synthesis Benchmark Suite II
+--
+-- Copyright (C) 2021 Rudy Matela
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+{-# LANGUAGE CPP, TemplateHaskell #-}
+#if __GLASGOW_HASKELL__ <= 710
+{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
+import Data.Typeable
+#endif
+import Conjure
+import System.Environment (getArgs)
+
+import Data.List (findIndex, inits)               -- for  #1
+import Data.Char (toUpper)                        -- for  #4
+import Data.Ratio ((%))                           -- for  #7
+import Data.List (findIndices, tails, isPrefixOf) -- for #12
+import Data.Maybe (fromJust)                      -- for #23
+import Test.LeanCheck                             -- for #24
+import Data.Express                               -- for #24
+
+
+gps1p :: [Int] -> Maybe Int
+gps1p [0,-1,2]   =  Just 1
+gps1p [-1,0,1]   =  Just 0
+gps1p [0,-1]     =  Just 1
+gps1p [1,-1,-1]  =  Just 2
+
+gps1g :: [Int] -> Maybe Int
+gps1g xs  =  findIndex (0 >) (map sum (tail (inits xs)))
+
+gps1p2 :: Int -> [Int] -> Int
+gps1p2 0 [0,-1,2]   =  1
+gps1p2 0 [-1,0,1]   =  0
+gps1p2 0 [0,-1]     =  1
+gps1p2 0 [1,-1,-1]  =  2
+gps1p2 0 [0,0,0,-1]  =  3
+gps1p2 0 [1,0,0,-2]  =  3
+
+-- efficient gps1, unreachable performance-wise
+gps1g2 :: Int -> [Int] -> Int
+gps1g2 t []  =  undefined -- 1
+gps1g2 t (x:xs)  =  if t + x < 0 -- 7
+                    then 0 -- 8
+                    else 1 + gps1g2 (t + x) xs -- 15
+
+gps1c :: IO ()
+gps1c  =  do
+  conjure "gps1" gps1p
+    [ pr (0 :: Int)
+    , prim "+" ((+) :: Int -> Int -> Int)
+    , prim ">" ((>) :: Int -> Int -> Bool)
+    , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int)
+    , prim "sum" (sum :: [Int] -> Int)
+    , prim "findIndex" (findIndex :: (Int -> Bool) -> [Int] -> Maybe Int)
+    , prim "map" (map :: ([Int] -> Int) -> [[Int]] -> [Int])
+    , prim "inits" (inits :: [Int] -> [[Int]])
+    , prim "tail" (tail :: [[Int]] -> [[Int]])
+    ]
+
+  conjure "gps1" gps1p
+    [ pr (0 :: Int)
+    , prim "+" ((+) :: Int -> Int -> Int)
+    , prim ">" ((>) :: Int -> Int -> Bool)
+    , prim "sum" (sum :: [Int] -> Int)
+    , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int)
+    , prim "findIndex" (findIndex :: (Int -> Bool) -> [Int] -> Maybe Int)
+    , prim "map" (map :: ([Int] -> Int) -> [[Int]] -> [Int])
+    , prim "inits" (inits :: [Int] -> [[Int]])
+    , prim "tail" (tail :: [[Int]] -> [[Int]])
+    ]
+
+  conjureWithMaxSize 4 "gps1" gps1p2
+    [ pr (0 :: Int)
+    , pr (1 :: Int)
+    , prim "+" ((+) :: Int -> Int -> Int)
+    , prim "<" ((<) :: Int -> Int -> Bool)
+    , prif (undefined :: Int)
+    , prim "undefined" (undefined :: Int)
+    ]
+
+
+gps2p :: Double -> Double -> Int -> Double
+gps2p 2 1 1  =  2 + 1
+gps2p 2 1 2  =  2 + 1 + 1 + 0.5
+gps2p 2 1 3  =  2 + 1 + 1 + 0.5 + 0.5 + 0.25
+gps2p 3 1 1  =  3 + 1
+gps2p 3 1 2  =  3 + 1 + 1/3
+
+-- apex to apex
+gps2g :: Double -> Double -> Int -> Double
+gps2g h0 h1 0  =  h0 + h1
+gps2g h0 h1 n  =  h0 + h1 + gps2g h1 (h1 * (h1 / h0)) (n - 1)
+-- size 17, out of reach performance-wise
+
+gps2c :: IO ()
+gps2c  =  do
+  conjureWithMaxSize 6 "gps2" gps2p
+    [ pr (0 :: Int)
+    , pr (1 :: Int)
+    , prim "*" ((*) :: Double -> Double -> Double)
+    , prim "/" ((/) :: Double -> Double -> Double)
+    , prim "+" ((+) :: Double -> Double -> Double)
+    , prim "-" ((-) :: Double -> Double -> Double)
+    ]
+
+
+gps3p :: String -> Int
+gps3p "X X X X X X X X X XXX"  =  300
+gps3p "11 11 11 11 11 11 11 11 11 11"  =  20
+
+-- unreachable performance wise
+-- I presume a correct solution would need around 30 symbols
+gps3c :: IO ()
+gps3c  =  conjure "gps3" gps3p []
+
+
+
+-- GPS #4: https://www.codewars.com/kata/517abf86da9663f1d2000003
+-- Here we're using the problem description as in the GPS2 paper
+-- considering we're getting input as kebab-case.
+-- Nevertheless, this one is out of reach performance-wise (and OOM-wise)
+
+gps4p :: String -> String
+gps4p "the-stealth-warrior"  =  "theStealthWarrior"
+--gps4p "The_Stealth_Warrior"  =  "TheStealthWarrior"
+gps4p "camel-case"  =  "camelCase"
+--gps4p "snake_case"  =  "snakeCase"
+gps4p "Kebab-Case"  =  "KebabCase"
+
+gps4g :: String -> String
+gps4g ""  =  ""
+-- gps4g ('-':c:cs)  =  toUpper c : gps4g cs
+-- gps4g ('_':c:cs)  =  toUpper c : gps4g cs
+gps4g (c:cs)  =  if c == '-'                                   --  5
+                 then if null cs                               --  8
+                      then ""                                  --  9
+                      else toUpper (head cs) : gps4g (tail cs) -- 16
+                 else c : gps4g cs                             -- 19
+
+gps4c :: IO ()
+gps4c  =  do
+  let force  =  [ [val "the-stealth-warrior"]
+--              , [val "The_Stealth_Warrior"]
+                , [val "camel-case"]
+--              , [val "snake_case"]
+                , [val "Kebab-Case"]
+                ]
+  conjureWith args{forceTests = force, maxSize=6} "gps4" gps4p
+    [ pr '-'
+--  , pr '_'
+    , pr ("" :: String)
+    , prim ":" ((:) :: Char -> String -> String)
+    , prim "==" ((==) :: Char -> Char -> Bool)
+    , prim "head" (head :: String -> Char)
+    , prim "tail" (tail :: String -> String)
+    , prif (undefined :: Char)
+    , prif (undefined :: String)
+    , prim "toUpper" (toUpper :: Char -> Char)
+    ]
+
+
+-- GPS #5: Coin Sums
+-- https://projecteuler.net/problem=31
+--
+-- The problem description is inconsistent with the one given in the paper.
+--
+-- Paper: change-making problem in USD
+-- Euler: How many different ways can £2 be made using any number of coins?
+--
+-- I'm considering the Paper to be canonical, as the one in Project Euler can be solved by a constant function:
+--
+-- solution :: Int
+-- solution  =  6378216738  -- <-- arbitrary example here, I didn't run the numbers
+gps5p :: Int -> [Int]
+gps5p 100  =  [4, 0, 0, 0]
+gps5p  50  =  [2, 0, 0, 0]
+gps5p  25  =  [1, 0, 0, 0]
+gps5p  30  =  [1, 0, 1, 0]
+gps5p  20  =  [0, 2, 0, 0]
+gps5p   3  =  [0, 0, 0, 3]
+
+gps5p2 :: [Int] -> Int -> [Int]
+gps5p2 [25, 10, 5, 1] 100  =  [4, 0, 0, 0]
+gps5p2 [25, 10, 5, 1]  50  =  [2, 0, 0, 0]
+gps5p2 [25, 10, 5, 1]  25  =  [1, 0, 0, 0]
+gps5p2 [25, 10, 5, 1]  30  =  [1, 0, 1, 0]
+gps5p2 [25, 10, 5, 1]  20  =  [0, 2, 0, 0]
+gps5p2 [25, 10, 5, 1]   3  =  [0, 0, 0, 3]
+
+coins :: [Int]
+coins  =  [25, 10, 5, 1]
+
+gps5g :: Int -> [Int]
+gps5g  =  tell coins
+
+tell :: [Int] -> Int -> [Int]
+tell []     a  =  []
+tell (n:ns) a  =  a `div` n : tell ns (a `mod` n)
+
+gps5c :: IO ()
+gps5c  =  do
+  -- cannot conjure directly due to needing to introduce a local definition
+  conjure "gps5" gps5p
+    [
+    ]
+
+  let force = [ [val coins, val (100::Int)]
+              , [val coins, val ( 50::Int)]
+              , [val coins, val ( 25::Int)]
+              , [val coins, val ( 30::Int)]
+              , [val coins, val ( 20::Int)]
+              , [val coins, val (  3::Int)]
+              ]
+  conjureWith args{forceTests=force} "tell" gps5p2
+    [ pr ([] :: [Int])
+    , prim ":" ((:) :: Int -> [Int] -> [Int])
+    , prim "`div`" (div :: Int -> Int -> Int)
+    , prim "`mod`" (mod :: Int -> Int -> Int)
+    ]
+
+  conjureWith args{forceTests=force} "gps5" gps5p
+    [ pr coins
+    , prim "tell" tell
+    ]
+
+  conjureWith args{forceTests=force} "gps5" gps5p
+    [ pr (1 :: Int)
+    , pr (5 :: Int)
+    , pr (10 :: Int)
+    , pr (25 :: Int)
+    , pr ([] :: [Int])
+    , prim ":" ((:) :: Int -> [Int] -> [Int])
+    , prim "tell" tell
+    ]
+
+
+-- GPS2#6: Cut Vector
+gps6g :: [Int] -> Int
+gps6g xs  =  snd
+          $  minimum
+          [  (abs (sum xs0 - sum xs1), i)
+          |  i <- [0 .. length xs]
+          ,  let (xs0, xs1) = splitAt i xs
+          ]
+
+-- not Conjurable due to needing local definition
+-- I conjecture it _perhaps-maybe_ this could be done in 3 steps,
+-- but I'll leave this as-is for now.
+gps6c :: IO ()
+gps6c  =
+  conjure "gps6" gps6g []
+
+
+-- GPS2#7: Dice Game
+-- https://projecteuler.net/problem=31
+-- https://github.com/thelmuth/Clojush/blob/psb2-v1.0/src/clojush/problems/psb2/dice_game.clj
+-- again, paper and problem are inconsistent, going with paper
+gps7p :: Integer -> Integer -> Rational
+gps7p 4 6  =  1 % 4
+gps7p 6 4  =  7 % 12
+gps7p 2 4  =  1 % 8
+gps7p 4 2  =  5 % 8
+gps7p 2 6  =  1 % 12
+gps7p 6 2  =  3 % 4
+
+gps7g :: Integer -> Integer -> Rational
+gps7g peter colin  =  sum (map (min colin) [0 .. (peter-1)]) % (colin*peter)
+
+-- out of reach performance-wise
+gps7c :: IO ()
+gps7c  =  do
+  conjureWith args{maxSize=6} "gps7" gps7p $ take 0
+    [ pr (0 :: Integer)
+    , pr (1 :: Integer)
+    , prim "%" ((%) :: Integer -> Integer -> Rational)
+    , prim "+" ((+) :: Integer -> Integer -> Integer)
+    , prim "-" ((-) :: Integer -> Integer -> Integer)
+    , prim "*" ((*) :: Integer -> Integer -> Integer)
+    , prim "min" (min :: Integer -> Integer -> Integer)
+    , prim ".." (enumFromTo :: Integer -> Integer -> [Integer])
+    , prim "map" (map :: (Integer -> Integer) -> [Integer] -> [Integer])
+    , prim "sum" (sum :: [Integer] -> Integer)
+    ]
+
+
+gps8p :: Int -> [Int] -> (Int,Int)
+gps8p 2 [1,1,2]  =  (1,1)
+gps8p 3 [1,1,2]  =  (1,2)
+gps8p 2 [0,1,0,2]  =  (0,2)
+
+gps8g :: Int -> [Int] -> (Int,Int)
+gps8g x xs  =  head [(y,z) | y <- xs, z <- xs, y + z == x]
+-- this one could be generated but is a bit of a stretch...
+-- it is unintuitive to provide the given symbols
+-- gps8g :: Int -> [Int] -> (Int,Int)
+-- gps8g x xs  =  head $ filter ((x ==) . uncurry (+)) $ liftA2 (,) xs xs
+
+gps8c :: IO ()
+gps8c  =  conjure "gps" gps8p []
+
+
+-- GPSB#9: Fizz Buzz (CW)
+gps9p :: Int -> String
+gps9p 3  =  "Fizz"
+gps9p 4  =  "4"
+gps9p 5  =  "Buzz"
+gps9p 6  =  "Fizz"
+gps9p 10  =  "Buzz"
+gps9p 15  =  "FizzBuzz"
+gps9p 17  =  "17"
+
+gps9g :: Int -> String
+gps9g x
+  | x `div` 3 == 0  =  "Fizz" -- 7
+  | x `div` 5 == 0  =  "Buzz" -- 14
+  | x `div` 3 == 0 && x `div` 5 == 0  =  "FizzBuzz" -- 27
+  | otherwise       =  show x -- 29
+
+-- probably unreachable performance-wise
+gps9c :: IO ()
+gps9c  =  conjure "gps" gps9p []
+
+
+gps10p :: [Int] -> Int
+gps10p [1,2,3]  =  -5
+gps10p [10,20,30]  =  13
+
+-- does not do rounding
+gps10g :: [Int] -> Int
+gps10g xs  =  sum $ map (\x -> x `div` 3 - 2) xs
+-- TODO: reachable with explicit fold?
+-- gps10g []  =  0
+-- gps10g (x:xs)  =  x`div`3 - 2 : gps10g xs
+-- ??
+
+-- unreachable due to lambda
+gps10c :: IO ()
+gps10c  =  conjure "gps" gps9p []
+
+
+gps11p :: Int -> Int -> Int
+gps11p  =  gcd'
+  where
+  gcd' :: Int -> Int -> Int
+  gcd' 1 1  =  1
+  gcd' 1 2  =  1
+  gcd' 2 1  =  1
+  gcd' 2 2  =  2
+  gcd' 2 6  =  2
+  gcd' 6 2  =  2
+  gcd' 3 6  =  3
+  gcd' 6 3  =  3
+  gcd' 6 9  =  3
+  gcd' 9 6  =  3
+  gcd' 12 18  =  6
+
+gps11c :: IO ()
+gps11c  =  conjure "gcd a b" gps11p
+  [ pr (0::Int)
+  , prim "`mod`" (mod :: Int -> Int -> Int)
+  ]
+  -- generated function:
+  -- gcd x 0  =  x
+  -- gcd x y  =  gcd y (x `mod` y)
+
+
+gps12p :: String -> String -> [Int]
+gps12p "a"   "a"   =  [0]
+gps12p "aa"  "a"   =  [0,1]
+gps12p "aa"  "aa"  =  [0]
+gps12p "a a" "a"   =  [0,2]
+gps12p "b"   "a"   =  []
+
+gps12g :: String -> String -> [Int]
+gps12g s s'  =  findIndices (s' `isPrefixOf`) (tails s)
+
+gps12c :: IO ()
+gps12c  =  conjure "gps12" gps12p
+  [ prim "findIndices" (findIndices :: (String -> Bool) -> [String] -> [Int])
+  , prim "`isPrefixOf`" (isPrefixOf :: String -> String -> Bool)
+  , prim "tails" (tails :: String -> [String])
+  ]
+
+
+gps13p :: [Int] -> [Int]
+gps13p [0,1]  =  [1]
+gps13p [1,0]  =  [1,0]
+gps13p [2,0,1]  =  [2,1]
+gps13p [1,0,1]  =  [1]
+
+gps13g :: [Int] -> [Int]
+gps13g  =  leaders
+  where
+  leaders []  =  []
+  leaders (x:xs)  =  if all (x >) xs
+                     then x : leaders xs
+                     else leaders xs
+
+gps13c :: IO ()
+gps13c  =  conjure "gps13_leaders" gps13p
+  [ pr ([] :: [Int])
+  , prim ":" ((:) :: Int -> [Int] -> [Int])
+  , prim ">" ((>) :: Int -> Int -> Bool)
+  , prim "all" (all :: (Int -> Bool) -> [Int] -> Bool)
+  , prif (undefined :: [Int])
+  ]
+
+
+gps14p :: [Int] -> Int
+gps14p  =  undefined
+
+-- 30 symbols
+gps14g :: [Int] -> Int
+gps14g  =  luhn
+  where
+  luhn :: [Int] -> Int
+  luhn xs  =  sum (firsts xs ++ map double9 (seconds xs))
+    where
+    double9 :: Int -> Int
+    double9 x  =  if xx > 9
+                  then xx - 9
+                  else xx
+      where
+      xx  =  x * 2
+    seconds :: [Int] -> [Int]
+    seconds []  =  []
+    seconds (x:y:xs)  =  y : seconds xs
+    firsts :: [Int] -> [Int]
+    firsts []  =  []
+    firsts (x:y:xs)  =  x : seconds xs
+
+-- cannot Conjure directly
+gps14c :: IO ()
+gps14c  =  conjure "gps14_luhn" gps14p
+  [
+  ]
+
+
+gps15p :: () -> ()
+gps15p  =  undefined
+
+-- skipped
+gps15c :: IO ()
+gps15c  =  conjure "gps15_mastermind" gps15p []
+
+
+gps16p :: String -> String
+gps16p "a"      =  "a"
+gps16p "aaa"    =  "a"
+gps16p "aa"     =  "aa"
+gps16p "a a"    =  " "
+gps16p " a "    =  "a"
+gps16p "a a "   =  " a"
+gps16p " a a "  =  " "
+
+gps16g1 :: String -> String
+gps16g1 s  =  if odd len
+              then take 1 (drop (len `div` 2) s)
+              else take 2 (drop (len `div` 2 - 1) s)
+  where
+  len  =  length s
+
+gps16g2 :: String -> String
+gps16g2 ""  =  ""
+gps16g2 (c:cs)  =  if length cs <= 1
+                   then c : cs
+                   else gps16g2 (init cs)
+
+gps16c :: IO ()
+gps16c  =  conjure "gps16_middle" gps16p
+  [ pr ""
+  , pr (1 :: Int)
+  , prim "<=" ((<=) :: Int -> Int -> Bool)
+  , prim ":" ((:) :: Char -> String -> String)
+  , prim "length" (length :: String -> Int)
+  , prim "init" (init :: String -> String)
+  , prif (undefined :: String)
+  ]
+
+
+gps17p :: [Int] -> Int
+gps17p [0,1,0]  =  0
+gps17p [1,1]  =  1
+gps17p [1,1,0]  =  1
+gps17p [0,1,1]  =  1
+gps17p [1,1,1]  =  2
+
+gps17g :: [Int] -> Int
+gps17g xs  =  pds xs
+  where
+  pds []  =  0
+  pds (x:xs)  =  if not (null xs) && x == head xs
+                 then x + pds xs
+                 else pds xs
+-- surprise:
+-- gps17_pds []  =  0
+-- gps17_pds (x:xs)  =  (if not (null xs) && head xs == x then x else 0) + gps17_pds xs
+
+
+-- can generate at size 15 in 18 seconds
+-- setting limit of 5 for faster output
+gps17c :: IO ()
+gps17c  =  conjureWith args{maxSize=5} "gps17_pds" gps17p
+  [ pr (0 :: Int)
+  , prif (undefined :: Int)
+  , prim "not" not
+  , prim "null" (null :: [Int] -> Bool)
+  , prim "==" ((==) :: Int -> Int -> Bool)
+  , prim "head" (head :: [Int] -> Int)
+  , prim "+" ((+) :: Int -> Int -> Int)
+  , prim "&&" (&&)
+  ]
+
+
+gps18p :: [Double] -> [Double] -> Double
+gps18p [1.0] [0.5]  =  0.5
+gps18p [2.0] [0.5]  =  1.0
+gps18p [1.0,1.0] [0.5,0.0]  =  1.5
+gps18p [1.0,1.0] [0.0,0.5]  =  1.5
+
+gps18g :: [Double] -> [Double] -> Double
+gps18g prices discounts  =  foldr (+) 0 (zipWith (*) prices (map (1-) discounts))
+
+-- this was OOM'd
+gps18c :: IO ()
+gps18c  =  conjureWithMaxSize 6 "gps18_price" gps18p
+  [ pr (0 :: Double)
+  , pr (1 :: Double)
+  , prim "+" ((+) :: Double -> Double -> Double)
+  , prim "*" ((*) :: Double -> Double -> Double)
+  , prim "-" ((-) :: Double -> Double -> Double)
+--  , prim "foldr" (foldr :: (Double -> Double -> Double) -> Double -> [Double] -> Double)
+--   , prim "zipWith" (zipWith :: (Double -> Double -> Double) -> [Double] -> [Double] -> [Double])
+--  , prim "map" (map :: (Double -> Double) -> [Double] -> [Double])
+  ]
+
+
+gps19p :: Int -> Double -> Double -> Double -> Double
+gps19p 0 0 1.0 1.0  =  0
+gps19p 1 0 1.0 1.0  =  0
+gps19p 2 0 1.0 1.0  =  0
+gps19p 1 0 1.0 2.0  =  1.0
+gps19p 2 0 1.0 2.0  =  2.0
+gps19p 1 0 0.5 1.0  =  0.5
+gps19p 2 0 0.5 1.0  =  1.0
+
+gps19g :: Int -> Double -> Double -> Double -> Double
+gps19g 0 total melt fall  =  total
+gps19g n total melt fall  =  gps19p (n-1) (max 0 (total-melt+fall)) melt fall
+-- size 14, out of reach performance wise.
+
+gps19c :: IO ()
+gps19c  =  conjureWithMaxSize 6 "gps19_snowday" gps19p
+  [ pr (0 :: Int)
+  , pr (1 :: Int)
+  , prim "max" (max :: Double -> Double -> Double)
+  , prim "+" ((+) :: Double -> Double -> Double)
+  , prim "-" ((-) :: Double -> Double -> Double)
+  ]
+
+
+gps20p :: String -> Bool
+gps20p  =  undefined
+
+gps20c :: IO ()
+gps20c  =  conjure "gps20" gps20p
+  [
+  ]
+
+
+gps21p :: String -> String
+gps21p "word"  =  "word"
+gps21p "words"  =  "sdrow"
+gps21p "word words"  =  "word sdrow"
+gps21p "words word"  =  "sdrow word"
+
+spin' :: String -> String
+spin' "abc"  =  "abc"
+spin' "abcd"  =  "abcd"
+spin' "word"  =  "word"
+spin' "abcde"  =  "edcba"
+spin' "words"  =  "sdrow"
+spin' "hello"  =  "olleh"
+spin' "world"  =  "dlrow"
+
+spin :: String -> String
+spin w  =  if length w >= 5
+           then reverse w
+           else w
+
+gps21g :: String -> String
+gps21g s  =  unwords (map spin (words s))
+
+gps21c :: IO ()
+gps21c  =  do
+  let force  =  [ [ val "abc" ]
+                , [ val "abcd" ]
+                , [ val "word" ]
+                , [ val "abcde" ]
+                , [ val "words" ]
+                , [ val "hello" ]
+                , [ val "world" ]
+                ]
+  conjureWith args{maxSize=12, forceTests=force} "spin" spin'
+    [ prim "length"  (length :: String -> Int)
+    , prim "reverse" (reverse :: String -> String)
+    , prif (undefined :: String)
+    , prim ">="      ((>=) :: Int -> Int -> Bool)
+    , pr (5 :: Int)
+    ]
+
+  let force  =  [ [ val "word" ]
+                , [ val "words" ]
+                , [ val "word words" ]
+                , [ val "words word" ]
+                ]
+  conjureWith args{maxSize=12, forceTests=force} "gps21_spinwords" gps21p
+    [ prim "words"   words
+    , prim "unwords" unwords
+    , prim "spin"    (spin :: String -> String)
+    , prim "map"     (map :: (String -> String) -> [String] -> [String])
+    , prim "length"  (length :: String -> Int)
+    , prim "reverse" (reverse :: String -> String)
+    , prif (undefined :: String)
+    , prim ">="      ((>=) :: Int -> Int -> Bool)
+    , pr (5 :: Int)
+    ]
+
+
+digits :: Int -> [Int]
+digits 0  =  []
+digits n  =  n `mod` 10 : digits (n `div` 10)
+
+digits' :: Int -> [Int]
+digits' 1  =  [1]
+digits' 12  =  [2,1]
+digits' 21  =  [1,2]
+digits' 123  =  [3,2,1]
+digits' 321  =  [1,2,3]
+
+gps22p :: Int -> String
+gps22p  =  undefined
+
+gps22c :: IO ()
+gps22c  =  do
+  conjure "digits" digits'
+    [ pr ([] :: [Int])
+    , prim ":" ((:) :: Int -> [Int] -> [Int])
+    , prim "`div`" (div :: Int -> Int -> Int)
+    , prim "`mod`" (mod :: Int -> Int -> Int)
+    , prim "div10" ((`div` 10) :: Int -> Int)
+    , pr (10 :: Int)
+    ]
+
+  conjure "gps22" gps22p
+    [
+    ]
+
+
+gps23p :: String -> String -> String -> String
+gps23p "abcd" "abcd" "abcd"  =  "abcd"
+gps23p "abcd" "dcba" "abcd"  =  "dcba"
+gps23p "abcd" "1234" "abcd"  =  "1234"
+gps23p "abcd" "1234" "bacd"  =  "2134"
+
+gps23g :: String -> String -> String -> String
+-- gps23g f t s  =  map (\c -> fromJust $ c `lookup` zipWith (,) f t) s
+gps23g f t s  =  map (fromJust . (`lookup` zipWith (,) f t)) s
+
+gps23c :: IO ()
+gps23c  =  do
+  let force = [ [ val "abcd", val "abcd", val "abcd" ]
+              , [ val "abcd", val "dcba", val "abcd" ]
+              , [ val "abcd", val "1234", val "abcd" ]
+              , [ val "abcd", val "1234", val "bacd" ]
+              ]
+  -- cannot conjure, needs lambda
+  conjureWith args{forceTests=force} "gps23" gps23p
+    [
+    ]
+
+
+data Twitter  =  Tweet Int
+              |  TooMany
+              |  Empty
+              deriving (Eq, Show)
+
+#if __GLASGOW_HASKELL__ <= 710
+deriving instance Typeable Twitter
+
+instance Express Twitter where
+  expr (Tweet n)  =  value "Tweet" Tweet :$ expr n
+  expr t  =  val t
+#else
+deriveExpress  ''Twitter
+#endif
+deriveListable ''Twitter
+deriveName     ''Twitter
+
+instance Conjurable Twitter where
+  conjureExpress   =  reifyExpress
+  conjureEquality  =  reifyEquality
+  conjureTiers     =  reifyTiers
+
+gps24g_twitter :: String -> Twitter
+gps24g_twitter ""  =  Empty
+gps24g_twitter s  =  if length s > 140
+                     then TooMany
+                     else Tweet (length s)
+
+gps24p_twitter :: String -> Twitter
+gps24p_twitter "" =  Empty
+gps24p_twitter "abcd"  =  Tweet 4
+gps24p_twitter "0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij"  =  Tweet 140
+gps24p_twitter "0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghijX"  =  TooMany
+
+gps24c :: IO ()
+gps24c  =  do
+  let force = [ [ val "" ]
+              , [ val "abcd" ]
+              , [ val "0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij" ]
+              , [ val "0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghijX" ]
+              ]
+  conjureWith args{maxTests=360, forceTests=force} "gps24" gps24p_twitter
+    [ pr Empty
+    , pr TooMany
+    , prim "Tweet" Tweet
+    , prif (undefined :: Twitter)
+    , pr ""
+    , prim ":" ((:) :: Char -> String -> String)
+    , prim "length" (length :: String -> Int)
+    , pr (140 :: Int)
+    , prim ">" ((>) :: Int -> Int -> Bool)
+    ]
+
+
+gps25p :: [Double] -> [Double] -> Double
+gps25p [0] [1]  =  1
+gps25p [1] [0]  =  1
+gps25p [-1] [1]  =  2
+gps25p [0,1] [1,0]  =  sqrt 2
+gps25p [1,0] [0,1]  =  sqrt 2
+gps25p [0,0,1] [1,0,0]  =  sqrt 2
+gps25p [0,1,2] [1,2,3]  =  sqrt 3
+
+gps25g :: [Double] -> [Double] -> Double
+gps25g v1 v2  =  sqrt (foldr (+) 0 (map (^2) (zipWith (-) v1 v2)))
+
+-- out of reach performance-wise
+gps25c :: IO ()
+gps25c  =  conjureWith args{maxSize=6} "gps25" gps25p
+  [ pr (0 :: Double)
+  , pr (2 :: Double)
+  , prim "+" ((+) :: Double -> Double -> Double)
+  , prim "-" ((-) :: Double -> Double -> Double)
+  , prim "**" ((**) :: Double -> Double -> Double)
+  , prim "zipWith" (zipWith :: (Double -> Double -> Double) -> [Double] -> [Double] -> [Double])
+  , prim "map" (map :: (Double -> Double) -> [Double] -> [Double])
+  , prim "sqrt" (sqrt :: Double -> Double)
+  ]
+
+
+main :: IO ()
+main  =  do
+  as <- getArgs
+  case as of
+    [] -> sequence_ gpss
+    (n:_) -> gpss !! (read n - 1)
+
+
+gpss :: [IO ()]
+gpss  =  [ gps1c
+         , gps2c
+         , gps3c
+         , gps4c
+         , gps5c
+         , gps6c
+         , gps7c
+         , gps8c
+         , gps9c
+         , gps10c
+         , gps11c
+         , gps12c
+         , gps13c
+         , gps14c
+         , gps15c
+         , gps16c
+         , gps17c
+         , gps18c
+         , gps19c
+         , gps20c
+         , gps21c
+         , gps22c
+         , gps23c
+         , gps24c
+         , gps25c
+         ]
diff --git a/bench/gps2.out b/bench/gps2.out
new file mode 100644
--- /dev/null
+++ b/bench/gps2.out
@@ -0,0 +1,349 @@
+gps1 :: [Int] -> Maybe Int
+-- testing 4 combinations of argument values
+-- pruning with 11/21 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 1 candidates of size 4
+-- looking through 0 candidates of size 5
+-- looking through 0 candidates of size 6
+-- looking through 1 candidates of size 7
+-- looking through 0 candidates of size 8
+-- looking through 1 candidates of size 9
+-- looking through 2 candidates of size 10
+gps1 xs  =  findIndex (0 >) (map (foldr (+) 0) (tail (inits xs)))
+
+gps1 :: [Int] -> Maybe Int
+-- testing 4 combinations of argument values
+-- pruning with 11/21 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 1 candidates of size 4
+-- looking through 1 candidates of size 5
+-- looking through 0 candidates of size 6
+-- looking through 1 candidates of size 7
+-- looking through 4 candidates of size 8
+gps1 xs  =  findIndex (0 >) (map sum (tail (inits xs)))
+
+gps1 :: Int -> [Int] -> Int
+-- testing 6 combinations of argument values
+-- pruning with 8/9 rules
+-- looking through 4 candidates of size 1
+-- looking through 25 candidates of size 2
+-- looking through 255 candidates of size 3
+-- looking through 451 candidates of size 4
+cannot conjure
+
+gps2 :: Double -> Double -> Int -> Double
+-- testing 5 combinations of argument values
+-- pruning with 3/3 rules
+-- looking through 2 candidates of size 1
+-- looking through 2 candidates of size 2
+-- looking through 18 candidates of size 3
+-- looking through 70 candidates of size 4
+-- looking through 314 candidates of size 5
+-- looking through 1432 candidates of size 6
+cannot conjure
+
+gps3 :: [Char] -> Int
+-- testing 0 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+cannot conjure
+
+gps4 :: [Char] -> [Char]
+-- testing 3 combinations of argument values
+-- pruning with 13/20 rules
+-- looking through 2 candidates of size 1
+-- looking through 3 candidates of size 2
+-- looking through 9 candidates of size 3
+-- looking through 22 candidates of size 4
+-- looking through 54 candidates of size 5
+-- looking through 124 candidates of size 6
+cannot conjure
+
+gps5 :: Int -> [Int]
+-- testing 6 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+cannot conjure
+
+tell :: [Int] -> Int -> [Int]
+-- testing 6 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 10 candidates of size 4
+-- looking through 6 candidates of size 5
+-- looking through 61 candidates of size 6
+-- looking through 26 candidates of size 7
+-- looking through 538 candidates of size 8
+-- looking through 134 candidates of size 9
+-- looking through 5299 candidates of size 10
+tell [] x  =  []
+tell (x:xs) y  =  y `div` x:tell xs (y `mod` x)
+
+gps5 :: Int -> [Int]
+-- testing 6 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 1 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 1 candidates of size 3
+gps5 x  =  tell [25,10,5,1] x
+
+gps5 :: Int -> [Int]
+-- testing 6 combinations of argument values
+-- pruning with 12/12 rules
+-- looking through 1 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 5 candidates of size 3
+-- looking through 9 candidates of size 4
+-- looking through 44 candidates of size 5
+-- looking through 91 candidates of size 6
+-- looking through 441 candidates of size 7
+-- looking through 946 candidates of size 8
+-- looking through 4450 candidates of size 9
+-- looking through 9710 candidates of size 10
+-- looking through 44767 candidates of size 11
+gps5 x  =  tell [25,10,5,1] x
+
+gps6 :: [Int] -> Int
+-- testing 360 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+cannot conjure
+
+gps7 :: Integer -> Integer -> Ratio Integer
+-- testing 6 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+cannot conjure
+
+gps :: Int -> [Int] -> (Int,Int)
+-- testing 3 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+cannot conjure
+
+gps :: Int -> [Char]
+-- testing 7 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+cannot conjure
+
+gps :: Int -> [Char]
+-- testing 7 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+cannot conjure
+
+gcd :: Int -> Int -> Int
+-- testing 11 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 3 candidates of size 1
+-- looking through 8 candidates of size 2
+-- looking through 20 candidates of size 3
+-- looking through 60 candidates of size 4
+-- looking through 150 candidates of size 5
+-- looking through 472 candidates of size 6
+gcd x 0  =  x
+gcd x y  =  gcd y (x `mod` y)
+
+gps12 :: [Char] -> [Char] -> [Int]
+-- testing 5 combinations of argument values
+-- pruning with 1/2 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 0 candidates of size 4
+-- looking through 4 candidates of size 5
+gps12 cs ds  =  findIndices (ds `isPrefixOf`) (tails cs)
+
+gps13_leaders :: [Int] -> [Int]
+-- testing 4 combinations of argument values
+-- pruning with 5/5 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 1 candidates of size 3
+-- looking through 2 candidates of size 4
+-- looking through 1 candidates of size 5
+-- looking through 2 candidates of size 6
+-- looking through 1 candidates of size 7
+-- looking through 4 candidates of size 8
+-- looking through 7 candidates of size 9
+-- looking through 21 candidates of size 10
+-- looking through 34 candidates of size 11
+-- looking through 67 candidates of size 12
+gps13_leaders []  =  []
+gps13_leaders (x:xs)  =  if all (x >) xs then x:gps13_leaders xs else gps13_leaders xs
+
+gps14_luhn :: [Int] -> Int
+-- testing 0 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+cannot conjure
+
+gps15_mastermind :: () -> ()
+-- testing 0 combinations of argument values
+-- pruning with 0/1 rules
+-- looking through 1 candidates of size 1
+gps15_mastermind u  =  u
+
+gps16_middle :: [Char] -> [Char]
+-- testing 7 combinations of argument values
+-- pruning with 10/11 rules
+-- looking through 2 candidates of size 1
+-- looking through 3 candidates of size 2
+-- looking through 7 candidates of size 3
+-- looking through 12 candidates of size 4
+-- looking through 21 candidates of size 5
+-- looking through 34 candidates of size 6
+-- looking through 61 candidates of size 7
+-- looking through 126 candidates of size 8
+-- looking through 307 candidates of size 9
+-- looking through 824 candidates of size 10
+-- looking through 2282 candidates of size 11
+-- looking through 6293 candidates of size 12
+gps16_middle ""  =  ""
+gps16_middle (c:cs)  =  if length cs <= 1 then c:cs else gps16_middle (init cs)
+
+gps17_pds :: [Int] -> Int
+-- testing 5 combinations of argument values
+-- pruning with 29/40 rules
+-- looking through 1 candidates of size 1
+-- looking through 2 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 1 candidates of size 4
+-- looking through 5 candidates of size 5
+cannot conjure
+
+gps18_price :: [Double] -> [Double] -> Double
+-- testing 4 combinations of argument values
+-- pruning with 28/34 rules
+-- looking through 2 candidates of size 1
+-- looking through 8 candidates of size 2
+-- looking through 72 candidates of size 3
+-- looking through 72 candidates of size 4
+-- looking through 1192 candidates of size 5
+-- looking through 696 candidates of size 6
+cannot conjure
+
+gps19_snowday :: Int -> Double -> Double -> Double -> Double
+-- testing 7 combinations of argument values
+-- pruning with 7/12 rules
+-- looking through 3 candidates of size 1
+-- looking through 7 candidates of size 2
+-- looking through 31 candidates of size 3
+-- looking through 169 candidates of size 4
+-- looking through 543 candidates of size 5
+-- looking through 3608 candidates of size 6
+cannot conjure
+
+gps20 :: [Char] -> Bool
+-- testing 0 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+cannot conjure
+
+spin :: [Char] -> [Char]
+-- testing 7 combinations of argument values
+-- pruning with 6/6 rules
+-- reasoning produced 1 incorrect properties, please re-run with more tests for faster results
+-- looking through 1 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 0 candidates of size 4
+-- looking through 0 candidates of size 5
+-- looking through 0 candidates of size 6
+-- looking through 0 candidates of size 7
+-- looking through 4 candidates of size 8
+spin cs  =  if length cs >= 5 then reverse cs else cs
+
+gps21_spinwords :: [Char] -> [Char]
+-- testing 4 combinations of argument values
+-- pruning with 16/16 rules
+-- reasoning produced 2 incorrect properties, please re-run with more tests for faster results
+-- looking through 1 candidates of size 1
+-- looking through 2 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 3 candidates of size 4
+-- looking through 5 candidates of size 5
+gps21_spinwords cs  =  unwords (map spin (words cs))
+
+digits :: Int -> [Int]
+-- testing 5 combinations of argument values
+-- pruning with 7/7 rules
+-- looking through 1 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 2 candidates of size 3
+-- looking through 3 candidates of size 4
+-- looking through 15 candidates of size 5
+-- looking through 14 candidates of size 6
+-- looking through 97 candidates of size 7
+-- looking through 104 candidates of size 8
+-- looking through 871 candidates of size 9
+-- looking through 935 candidates of size 10
+-- looking through 9018 candidates of size 11
+-- looking through 9686 candidates of size 12
+cannot conjure
+
+gps22 :: Int -> [Char]
+-- testing 0 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+cannot conjure
+
+gps23 :: [Char] -> [Char] -> [Char] -> [Char]
+-- testing 4 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 3 candidates of size 1
+-- looking through 12 candidates of size 2
+-- looking through 33 candidates of size 3
+-- looking through 0 candidates of size 4
+-- looking through 162 candidates of size 5
+-- looking through 612 candidates of size 6
+-- looking through 0 candidates of size 7
+-- looking through 0 candidates of size 8
+-- looking through 3168 candidates of size 9
+-- looking through 0 candidates of size 10
+-- looking through 0 candidates of size 11
+-- looking through 5184 candidates of size 12
+cannot conjure
+
+gps24 :: [Char] -> Twitter
+-- testing 4 combinations of argument values
+-- pruning with 4/8 rules
+-- reasoning produced 4 incorrect properties, please re-run with more tests for faster results
+-- looking through 2 candidates of size 1
+-- looking through 3 candidates of size 2
+-- looking through 8 candidates of size 3
+-- looking through 7 candidates of size 4
+-- looking through 4 candidates of size 5
+-- looking through 5 candidates of size 6
+-- looking through 10 candidates of size 7
+-- looking through 48 candidates of size 8
+-- looking through 138 candidates of size 9
+-- looking through 232 candidates of size 10
+-- looking through 322 candidates of size 11
+-- looking through 483 candidates of size 12
+gps24 ""  =  Empty
+gps24 (c:cs)  =  if 140 > length cs then Tweet (length (c:cs)) else TooMany
+
+gps25 :: [Double] -> [Double] -> Double
+-- testing 6 combinations of argument values
+-- pruning with 33/58 rules
+-- looking through 2 candidates of size 1
+-- looking through 9 candidates of size 2
+-- looking through 89 candidates of size 3
+-- looking through 312 candidates of size 4
+-- looking through 2262 candidates of size 5
+-- looking through 9400 candidates of size 6
+cannot conjure
+
diff --git a/bench/ill-hit.out b/bench/ill-hit.out
--- a/bench/ill-hit.out
+++ b/bench/ill-hit.out
@@ -4,8 +4,8 @@
 -- looking through 2 candidates of size 1
 -- looking through 5 candidates of size 2
 -- looking through 6 candidates of size 3
--- looking through 19 candidates of size 4
--- looking through 31 candidates of size 5
+-- looking through 20 candidates of size 4
+-- looking through 34 candidates of size 5
 sum []  =  0
 sum (x:xs)  =  x + sum xs
 
@@ -15,8 +15,8 @@
 -- looking through 2 candidates of size 1
 -- looking through 5 candidates of size 2
 -- looking through 6 candidates of size 3
--- looking through 19 candidates of size 4
--- looking through 31 candidates of size 5
+-- looking through 20 candidates of size 4
+-- looking through 34 candidates of size 5
 sum []  =  0
 sum (x:xs)  =  x + sum xs
 
@@ -26,8 +26,8 @@
 -- looking through 2 candidates of size 1
 -- looking through 5 candidates of size 2
 -- looking through 6 candidates of size 3
--- looking through 19 candidates of size 4
--- looking through 31 candidates of size 5
+-- looking through 20 candidates of size 4
+-- looking through 34 candidates of size 5
 sum []  =  0
 sum (x:xs)  =  x + sum xs
 
diff --git a/bench/lowtests.out b/bench/lowtests.out
--- a/bench/lowtests.out
+++ b/bench/lowtests.out
@@ -8,7 +8,7 @@
 sort xs `isSubsequenceOf` ys == xs `isSubsequenceOf` sort ys
 
 -}
--- reasoning produced incorrect properties, please re-run with more tests for faster results
+-- reasoning produced 1 incorrect properties, please re-run with more tests for faster results
 -- looking through 0 candidates of size 1
 -- looking through 0 candidates of size 2
 -- looking through 2 candidates of size 3
diff --git a/bench/p12.out b/bench/p12.out
--- a/bench/p12.out
+++ b/bench/p12.out
@@ -4,10 +4,10 @@
 -- pruning with 67/100 rules
 -- looking through 3 candidates of size 1
 -- looking through 7 candidates of size 2
--- looking through 22 candidates of size 3
--- looking through 62 candidates of size 4
--- looking through 175 candidates of size 5
--- looking through 542 candidates of size 6
+-- looking through 25 candidates of size 3
+-- looking through 82 candidates of size 4
+-- looking through 263 candidates of size 5
+-- looking through 960 candidates of size 6
 factorial 0  =  1
 factorial x  =  x * factorial (dec x)
 
diff --git a/bench/runtime/zero/bench/candidates.runtime b/bench/runtime/zero/bench/candidates.runtime
--- a/bench/runtime/zero/bench/candidates.runtime
+++ b/bench/runtime/zero/bench/candidates.runtime
@@ -1,1 +1,1 @@
-10.0
+9.1
diff --git a/bench/runtime/zero/bench/gps.runtime b/bench/runtime/zero/bench/gps.runtime
--- a/bench/runtime/zero/bench/gps.runtime
+++ b/bench/runtime/zero/bench/gps.runtime
@@ -1,1 +1,1 @@
-15.2
+23.8
diff --git a/bench/runtime/zero/bench/gps2.runtime b/bench/runtime/zero/bench/gps2.runtime
new file mode 100644
--- /dev/null
+++ b/bench/runtime/zero/bench/gps2.runtime
@@ -0,0 +1,1 @@
+9.5
diff --git a/bench/runtime/zero/bench/lowtests.runtime b/bench/runtime/zero/bench/lowtests.runtime
--- a/bench/runtime/zero/bench/lowtests.runtime
+++ b/bench/runtime/zero/bench/lowtests.runtime
@@ -1,1 +1,1 @@
-0.4
+0.3
diff --git a/bench/runtime/zero/bench/p12.runtime b/bench/runtime/zero/bench/p12.runtime
--- a/bench/runtime/zero/bench/p12.runtime
+++ b/bench/runtime/zero/bench/p12.runtime
@@ -1,1 +1,1 @@
-3.5
+3.2
diff --git a/bench/runtime/zero/bench/take-drop.runtime b/bench/runtime/zero/bench/take-drop.runtime
--- a/bench/runtime/zero/bench/take-drop.runtime
+++ b/bench/runtime/zero/bench/take-drop.runtime
@@ -1,1 +1,1 @@
-0.6
+0.5
diff --git a/bench/runtime/zero/bench/terpret.runtime b/bench/runtime/zero/bench/terpret.runtime
new file mode 100644
--- /dev/null
+++ b/bench/runtime/zero/bench/terpret.runtime
@@ -0,0 +1,1 @@
+13.0
diff --git a/bench/runtime/zero/eg/bools.runtime b/bench/runtime/zero/eg/bools.runtime
--- a/bench/runtime/zero/eg/bools.runtime
+++ b/bench/runtime/zero/eg/bools.runtime
@@ -1,1 +1,1 @@
-3.5
+3.3
diff --git a/bench/runtime/zero/eg/count.runtime b/bench/runtime/zero/eg/count.runtime
--- a/bench/runtime/zero/eg/count.runtime
+++ b/bench/runtime/zero/eg/count.runtime
@@ -1,1 +1,1 @@
-0.7
+0.5
diff --git a/bench/runtime/zero/eg/dupos.runtime b/bench/runtime/zero/eg/dupos.runtime
--- a/bench/runtime/zero/eg/dupos.runtime
+++ b/bench/runtime/zero/eg/dupos.runtime
@@ -1,1 +1,1 @@
-5.4
+3.1
diff --git a/bench/runtime/zero/eg/factorial.runtime b/bench/runtime/zero/eg/factorial.runtime
--- a/bench/runtime/zero/eg/factorial.runtime
+++ b/bench/runtime/zero/eg/factorial.runtime
@@ -1,1 +1,1 @@
-0.8
+2.4
diff --git a/bench/runtime/zero/eg/fib01.runtime b/bench/runtime/zero/eg/fib01.runtime
--- a/bench/runtime/zero/eg/fib01.runtime
+++ b/bench/runtime/zero/eg/fib01.runtime
@@ -1,1 +1,1 @@
-5.8
+4.4
diff --git a/bench/runtime/zero/eg/fibonacci.runtime b/bench/runtime/zero/eg/fibonacci.runtime
--- a/bench/runtime/zero/eg/fibonacci.runtime
+++ b/bench/runtime/zero/eg/fibonacci.runtime
@@ -1,1 +1,1 @@
-1.4
+8.8
diff --git a/bench/runtime/zero/eg/ints.runtime b/bench/runtime/zero/eg/ints.runtime
--- a/bench/runtime/zero/eg/ints.runtime
+++ b/bench/runtime/zero/eg/ints.runtime
@@ -1,1 +1,1 @@
-1.6
+1.0
diff --git a/bench/runtime/zero/eg/list.runtime b/bench/runtime/zero/eg/list.runtime
--- a/bench/runtime/zero/eg/list.runtime
+++ b/bench/runtime/zero/eg/list.runtime
@@ -1,1 +1,1 @@
-0.5
+0.6
diff --git a/bench/runtime/zero/eg/pow.runtime b/bench/runtime/zero/eg/pow.runtime
--- a/bench/runtime/zero/eg/pow.runtime
+++ b/bench/runtime/zero/eg/pow.runtime
@@ -1,1 +1,1 @@
-2.3
+3.5
diff --git a/bench/runtime/zero/eg/setelem.runtime b/bench/runtime/zero/eg/setelem.runtime
--- a/bench/runtime/zero/eg/setelem.runtime
+++ b/bench/runtime/zero/eg/setelem.runtime
@@ -1,1 +1,1 @@
-2.5
+2.1
diff --git a/bench/runtime/zero/eg/sort.runtime b/bench/runtime/zero/eg/sort.runtime
--- a/bench/runtime/zero/eg/sort.runtime
+++ b/bench/runtime/zero/eg/sort.runtime
@@ -1,1 +1,1 @@
-1.3
+1.0
diff --git a/bench/runtime/zero/eg/tree.runtime b/bench/runtime/zero/eg/tree.runtime
--- a/bench/runtime/zero/eg/tree.runtime
+++ b/bench/runtime/zero/eg/tree.runtime
@@ -1,1 +1,1 @@
-2.2
+1.5
diff --git a/bench/runtime/zero/versions b/bench/runtime/zero/versions
--- a/bench/runtime/zero/versions
+++ b/bench/runtime/zero/versions
@@ -1,4 +1,4 @@
 GHC 8.10.4
 leancheck-0.9.10
-express-1.0.4
-speculate-0.4.12
+express-1.0.6
+speculate-0.4.14
diff --git a/bench/take-drop.hs b/bench/take-drop.hs
--- a/bench/take-drop.hs
+++ b/bench/take-drop.hs
@@ -8,6 +8,10 @@
 drop' 1 [x,y]  =  [y]
 drop' 2 [x,y]  =  []
 drop' 3 [x,y]  =  []
+drop' 0 [x,y,z]  =  [x,y,z]
+drop' 1 [x,y,z]  =  [y,z]
+drop' 2 [x,y,z]  =  [z]
+drop' 3 [x,y,z]  =  []
 
 take' :: Int -> [a] -> [a]
 take' 0 []     =  []
@@ -19,28 +23,27 @@
 
 main :: IO ()
 main = do
-  -- drop n xs = if n==0 || null xs then xs else drop (dec n) (tail xs)
-  -- needs size 13
   -- drop 0 []      =  []               -- 1
   -- drop 0 (x:xs)  =  x : xs           -- 4
   -- drop n []      =  []               -- 5
-  -- drop n (x:xs)  =  drop (dec n) xs  -- 9
+  -- drop n (x:xs)  =  drop (x - 1) xs  -- 10
   conjure "drop" (drop' :: Int -> [A] -> [A])
     [ pr (0 :: Int)
+    , pr (1 :: Int)
     , pr ([] :: [A])
     , prim ":" ((:) :: A -> [A] -> [A])
-    , prim "dec" (subtract 1 :: Int -> Int)
+    , prim "-" ((-) :: Int -> Int -> Int)
     ]
 
-  -- take n xs = if n==0 || null xs then [] else head xs : take (dec n) (tail xs)
-  -- needs size 16
+  -- take 0 []  =  []                     -- 1
+  -- take 0 (x:xs)  =  []                 -- 2
+  -- take x []  =  []                     -- 3
+  -- take x (y:xs)  =  y:take (x - 1) xs  -- 10
   conjureWithMaxSize 16 "take" (take' :: Int -> [A] -> [A])
     [ pr (0 :: Int)
+    , pr (1 :: Int)
     , pr ([] :: [A])
-    , prim "null" (null :: [A] -> Bool)
     , prim "||" ((||) :: Bool -> Bool -> Bool)
-    , prim "dec" ((\n -> n-1) :: Int -> Int)
+    , prim "-" ((-) :: Int -> Int -> Int)
     , prim ":" ((:) :: A -> [A] -> [A])
-    , prim "head" (head :: [A] -> A)
-    , prim "tail" (tail :: [A] -> [A])
     ]
diff --git a/bench/take-drop.out b/bench/take-drop.out
--- a/bench/take-drop.out
+++ b/bench/take-drop.out
@@ -1,32 +1,34 @@
 drop :: Int -> [A] -> [A]
--- testing 143 combinations of argument values
--- pruning with 0/0 rules
+-- testing 360 combinations of argument values
+-- pruning with 4/7 rules
 -- looking through 2 candidates of size 1
 -- looking through 3 candidates of size 2
--- looking through 3 candidates of size 3
--- looking through 5 candidates of size 4
--- looking through 23 candidates of size 5
--- looking through 24 candidates of size 6
--- looking through 55 candidates of size 7
--- looking through 71 candidates of size 8
+-- looking through 5 candidates of size 3
+-- looking through 15 candidates of size 4
+-- looking through 27 candidates of size 5
+-- looking through 41 candidates of size 6
+-- looking through 132 candidates of size 7
+-- looking through 127 candidates of size 8
+-- looking through 458 candidates of size 9
 drop 0 []  =  []
 drop 0 (x:xs)  =  x:xs
 drop x []  =  []
-drop x (y:xs)  =  drop (dec x) xs
+drop x (y:xs)  =  drop (x - 1) xs
 
 take :: Int -> [A] -> [A]
 -- testing 143 combinations of argument values
--- pruning with 14/18 rules
+-- pruning with 14/21 rules
 -- looking through 2 candidates of size 1
--- looking through 5 candidates of size 2
--- looking through 17 candidates of size 3
--- looking through 42 candidates of size 4
--- looking through 136 candidates of size 5
--- looking through 363 candidates of size 6
--- looking through 921 candidates of size 7
--- looking through 2354 candidates of size 8
+-- looking through 3 candidates of size 2
+-- looking through 5 candidates of size 3
+-- looking through 15 candidates of size 4
+-- looking through 27 candidates of size 5
+-- looking through 41 candidates of size 6
+-- looking through 132 candidates of size 7
+-- looking through 127 candidates of size 8
+-- looking through 458 candidates of size 9
 take 0 []  =  []
 take 0 (x:xs)  =  []
 take x []  =  []
-take x (y:xs)  =  y:take (dec x) xs
+take x (y:xs)  =  y:take (x - 1) xs
 
diff --git a/bench/terpret.hs b/bench/terpret.hs
new file mode 100644
--- /dev/null
+++ b/bench/terpret.hs
@@ -0,0 +1,249 @@
+-- terpret.hs: Benchmark execution-model problems from TerpreT
+--
+-- Copyright (C) 2021 Rudy Matela
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+--
+-- You can find the description of these exercises on:
+--
+-- 1. https://dl.acm.org/doi/pdf/10.1145/3067695.3082533
+-- 2. https://www.microsoft.com/en-us/research/uploads/prod/2017/03/1608.04428.pdf
+--
+-- Here, we prefer the simplified definitions found in 1.
+import Conjure
+import System.Environment (getArgs)
+
+
+-- TerpreT #1 -- invert --
+
+t1p :: [Bool] -> [Bool]
+t1p [False]  =  [True]
+t1p [True]   =  [False]
+t1p [False,True]  =  [True,False]
+t1p [True,False]  =  [False,True]
+
+t1g :: [Bool] -> [Bool]
+t1g ps  =  map not ps
+
+t1c :: IO ()
+t1c  =  do
+  putStrLn "TerpreT benchmark #1: invert\n"
+
+  conjure "invert" t1p primitives123
+
+-- the same primitives are used for TerpreT #1, #2 and #3
+primitives123 :: [Prim]
+primitives123  =
+  [ pr False
+  , pr True
+  , prim "not" not
+  , prim "&&" (&&)
+  , prim "||" (||)
+  , pr ([] :: [Bool])
+  , prim ":" ((:) :: Bool -> [Bool] -> [Bool])
+--, prim "map" (map :: (Bool -> Bool) -> [Bool] -> [Bool])
+  , prif (undefined :: [Bool])
+  ]
+
+
+-- TerpreT #2 -- prepend zero --
+t2p :: [Bool] -> [Bool]
+t2p [True]  =  [False,True]
+t2p [False]  =  [False,False]
+t2p [True,True]  =  [False,True,True]
+
+t2g :: [Bool] -> [Bool]
+t2g ps  =  False:ps
+
+t2c :: IO ()
+t2c  =  do
+  putStrLn "TerpreT benchmark #2: prepend zero\n"
+
+  conjure "prependZero" t2p primitives123
+
+
+-- TerpreT #3 -- binary decrement --
+-- here we choose to represent with little-endian notation
+
+t3p :: [Bool] -> [Bool]
+-- t3p [True]  =  [False]
+t3p [True,True]  =  [False,True]             --  11 - 1 =  10
+t3p [False,True]  =  [True,False]            --  10 - 1 =   1
+t3p [False,True,True]  =  [True,False,True]  -- 110 - 1 = 101
+
+t3g :: [Bool] -> [Bool]
+t3g []  =  []
+t3g (p:ps)  =  if p
+               then False : ps
+               else True : t3g ps
+-- hah!  Conjure surprised me again:
+-- decrement []  =  []
+-- decrement (p:ps)  =  not p:(if p then ps else decrement ps)
+
+t3c :: IO ()
+t3c  =  do
+  putStrLn "TerpreT benchmark #3: binary decrement\n"
+
+  conjure "decrement" t3p primitives123
+
+
+-- TerpreT #4 -- 2-bit controlled shift register --
+
+t4p1 :: (Bool,Bool,Bool) -> (Bool,Bool,Bool)
+t4p1 (False, True, False)  =  (False, True, False)
+t4p1 (False, False, True)  =  (False, False, True)
+t4p1 (True, True, False)  =  (True, False, True)
+t4p1 (True, False, True)  =  (True, True, False)
+
+t4p2 :: Bool -> Bool -> Bool -> (Bool,Bool,Bool)
+t4p2 False  True   False   =  (False, True, False)
+t4p2 False  False  True    =  (False, False, True)
+t4p2 True   True   False   =  (True, False, True)
+t4p2 True   False  True    =  (True, True, False)
+
+t4g :: (Bool,Bool,Bool) -> (Bool,Bool,Bool)
+t4g (False,p,q)  =  (False,p,q)
+t4g (True,p,q)  =  (True,q,p)
+
+t4c :: IO ()
+t4c  =  do
+  putStrLn "TerpreT benchmark #4: controlled shift\n"
+
+  conjure "cshift" t4p1 $ primitives123 ++
+    [ prim ",," ((,,) :: Bool -> Bool -> Bool -> (Bool,Bool,Bool))
+    , prif (undefined :: (Bool,Bool,Bool))
+    ]
+
+  conjure "cshift" t4p2 $ primitives123 ++
+    [ prim ",," ((,,) :: Bool -> Bool -> Bool -> (Bool,Bool,Bool))
+    , prif (undefined :: (Bool,Bool,Bool))
+    ]
+
+
+-- TerpreT #5 -- Full adder --
+
+t5p :: Bool -> Bool -> Bool -> (Bool,Bool)
+t5p False False False  =  (False,False)
+t5p False False True   =  (False,True )
+t5p False True  False  =  (False,True )
+t5p True  False False  =  (False,True )
+t5p False True  True   =  (True ,False)
+t5p True  False True   =  (True ,False)
+t5p True  True  False  =  (True ,False)
+t5p True  True  True   =  (True ,True )
+
+t5c :: IO ()
+t5c  =  do
+  putStrLn "TerpreT benchmark #5: full adder\n"
+
+  -- using primitives123 below works, but increases the runtime to 18 seconds
+  -- let's leave it commented out so runtime is faster when running automated tests
+  conjure "fadder" t5p $ -- primitives123 ++
+    [ prim "not" not
+    , prim "," ((,) :: Bool -> Bool -> (Bool,Bool))
+    , prim "==" ((==) :: Bool -> Bool -> Bool)
+--  , prim "^^" ((/=) :: Bool -> Bool -> Bool) -- poor man's xor
+    , prif (undefined :: (Bool,Bool))
+    ]
+-- the printed function is weird, but correct
+-- fadder p q r  =  if p == q then (p,r) else (r,not r)
+
+
+-- TerpreT #6 -- 2-bit adder --
+t6p :: (Bool,Bool) -> (Bool,Bool) -> (Bool,Bool,Bool)
+t6p (False,False) (False,False)  =  (False,False,False)
+t6p (True ,False) (False,True )  =  (False,True ,True )
+t6p (True ,True ) (False,True )  =  (True ,False,False)
+t6p (True ,True ) (True ,False)  =  (True ,False,True )
+t6p (True ,True ) (True ,True )  =  (True ,True ,False)
+
+t6c :: IO ()
+t6c  =  do
+  putStrLn "TerpreT benchmark #6: 2-bit adder\n"
+  conjureWith args{maxSize=6} "adder2" t6p $ primitives123 ++
+    [ prim ",," ((,,) :: Bool -> Bool -> Bool -> (Bool,Bool,Bool))
+    , prim "==" ((==) :: Bool -> Bool -> Bool)
+    , prim "^^" ((/=) :: Bool -> Bool -> Bool) -- poor man's xor
+    , prif (undefined :: (Bool,Bool,Bool))
+    ]
+
+
+-- TerpreT #7 -- Access --
+t7p :: [A] -> Int -> A
+t7p [1,0] 0  =  1
+t7p [1,0] 1  =  0
+t7p [0,2,1]  0  =  0
+t7p [0,2,1]  1  =  2
+t7p [0,2,1]  2  =  1
+
+t7g :: [A] -> Int -> A
+t7g [] _  =  undefined
+t7g (x:xs) 0  =  x
+t7g (x:xs) i  =  t7g xs (i-1)
+
+t7c :: IO ()
+t7c  =  do
+  putStrLn "TerpreT benchmark #7: access\n"
+  -- yes, one can implement index with index...
+  conjure "`access`" t7p
+    [ prim "!!" ((!!) :: [A] -> Int -> A)
+    ]
+
+  conjure "`access`" t7p
+    [ pr (0 :: Int)
+    , pr (1 :: Int)
+    , pr ([] :: [A])
+    , prim ":" ((:) :: A -> [A] -> [A])
+    , prim "-" ((-) :: Int -> Int -> Int)
+    , prim "undefined" (undefined :: A)
+    ]
+
+
+-- TerpreT #8 -- Decrement Elements --
+t8p :: [Int] -> [Int]
+t8p [2]  =  [1]
+t8p [1,0]  =  [0,-1]
+t8p [0,1,2]  =  [-1,0,1]
+
+t8c :: IO ()
+t8c  =  do
+  putStrLn "TerpreT benchmark #8: decrement elements\n"
+
+  conjure "decrelements" t8p
+    [ pr (1 :: Int)
+    , pr ([] :: [Int])
+    , prim ":" ((:) :: Int -> [Int] -> [Int])
+    , prim "-" ((-) :: Int -> Int -> Int)
+    , prim "map" (map :: (Int -> Int) -> [Int] -> [Int])
+    ]
+  -- above, even though map is provided, Conjure cannot use it as it cannot
+  -- introduce lambdas
+
+  conjure "decrelements" t8p
+    [ pr (1 :: Int)
+    , pr ([] :: [Int])
+    , prim ":" ((:) :: Int -> [Int] -> [Int])
+    , prim "-" ((-) :: Int -> Int -> Int)
+    , prim "map" (map :: (Int -> Int) -> [Int] -> [Int])
+    , prim "subtract" (subtract :: Int -> Int -> Int)
+    ]
+  -- now above, the story changes because of subtract, map is used
+
+
+main :: IO ()
+main  =  do
+  as <- getArgs
+  case as of
+    [] -> sequence_ ts
+    (n:_) -> ts !! (read n - 1)
+
+
+ts :: [IO ()]
+ts  =  [ t1c
+       , t2c
+       , t3c
+       , t4c
+       , t5c
+       , t6c
+       , t7c
+       , t8c
+       ]
diff --git a/bench/terpret.out b/bench/terpret.out
new file mode 100644
--- /dev/null
+++ b/bench/terpret.out
@@ -0,0 +1,156 @@
+TerpreT benchmark #1: invert
+
+invert :: [Bool] -> [Bool]
+-- testing 4 combinations of argument values
+-- pruning with 41/51 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 5 candidates of size 3
+-- looking through 10 candidates of size 4
+-- looking through 17 candidates of size 5
+-- looking through 41 candidates of size 6
+invert []  =  []
+invert (p:ps)  =  not p:invert ps
+
+TerpreT benchmark #2: prepend zero
+
+prependZero :: [Bool] -> [Bool]
+-- testing 3 combinations of argument values
+-- pruning with 41/51 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 5 candidates of size 3
+prependZero ps  =  False:ps
+
+TerpreT benchmark #3: binary decrement
+
+decrement :: [Bool] -> [Bool]
+-- testing 3 combinations of argument values
+-- pruning with 41/51 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 5 candidates of size 3
+-- looking through 10 candidates of size 4
+-- looking through 17 candidates of size 5
+-- looking through 41 candidates of size 6
+-- looking through 86 candidates of size 7
+-- looking through 202 candidates of size 8
+-- looking through 487 candidates of size 9
+decrement []  =  []
+decrement (p:ps)  =  not p:(if p then ps else decrement ps)
+
+TerpreT benchmark #4: controlled shift
+
+cshift :: (Bool,Bool,Bool) -> (Bool,Bool,Bool)
+-- testing 4 combinations of argument values
+-- pruning with 41/51 rules
+-- reasoning produced 2 incorrect properties, please re-run with more tests for faster results
+-- looking through 1 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 10 candidates of size 4
+-- looking through 125 candidates of size 5
+-- looking through 225 candidates of size 6
+-- looking through 1075 candidates of size 7
+-- looking through 2457 candidates of size 8
+-- looking through 8154 candidates of size 9
+-- looking through 27432 candidates of size 10
+-- looking through 174839 candidates of size 11
+cshift (p,q,r)  =  if p then (p,r,q) else (p,q,r)
+
+cshift :: Bool -> Bool -> Bool -> (Bool,Bool,Bool)
+-- testing 4 combinations of argument values
+-- pruning with 41/51 rules
+-- reasoning produced 2 incorrect properties, please re-run with more tests for faster results
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 125 candidates of size 4
+-- looking through 225 candidates of size 5
+-- looking through 1035 candidates of size 6
+-- looking through 2457 candidates of size 7
+-- looking through 20250 candidates of size 8
+cshift False p q  =  (False,p,q)
+cshift True p q  =  (True,q,p)
+
+TerpreT benchmark #5: full adder
+
+fadder :: Bool -> Bool -> Bool -> (Bool,Bool)
+-- testing 8 combinations of argument values
+-- pruning with 18/22 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 9 candidates of size 3
+-- looking through 18 candidates of size 4
+-- looking through 45 candidates of size 5
+-- looking through 108 candidates of size 6
+-- looking through 300 candidates of size 7
+-- looking through 816 candidates of size 8
+-- looking through 2148 candidates of size 9
+-- looking through 5520 candidates of size 10
+-- looking through 13656 candidates of size 11
+fadder p q r  =  if p == q then (p,r) else (r,not r)
+
+TerpreT benchmark #6: 2-bit adder
+
+adder2 :: (Bool,Bool) -> (Bool,Bool) -> (Bool,Bool,Bool)
+-- testing 5 combinations of argument values
+-- pruning with 74/92 rules
+-- reasoning produced 2 incorrect properties, please re-run with more tests for faster results
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 0 candidates of size 3
+-- looking through 8 candidates of size 4
+-- looking through 128 candidates of size 5
+-- looking through 408 candidates of size 6
+cannot conjure
+
+TerpreT benchmark #7: access
+
+access :: [A] -> Int -> A
+-- testing 5 combinations of argument values
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 0 candidates of size 2
+-- looking through 1 candidates of size 3
+xs `access` x  =  xs !! x
+
+access :: [A] -> Int -> A
+-- testing 5 combinations of argument values
+-- pruning with 4/7 rules
+-- looking through 1 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 7 candidates of size 4
+-- looking through 19 candidates of size 5
+-- looking through 23 candidates of size 6
+-- looking through 68 candidates of size 7
+[] `access` 0  =  undefined
+[] `access` x  =  undefined
+(x:xs) `access` 0  =  x
+(x:xs) `access` y  =  xs `access` (y - 1)
+
+TerpreT benchmark #8: decrement elements
+
+decrelements :: [Int] -> [Int]
+-- testing 3 combinations of argument values
+-- pruning with 3/23 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 7 candidates of size 4
+-- looking through 9 candidates of size 5
+-- looking through 29 candidates of size 6
+-- looking through 41 candidates of size 7
+decrelements []  =  []
+decrelements (x:xs)  =  x - 1:decrelements xs
+
+decrelements :: [Int] -> [Int]
+-- testing 3 combinations of argument values
+-- pruning with 5/26 rules
+-- looking through 2 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 8 candidates of size 4
+decrelements xs  =  map (subtract 1) xs
+
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,18 @@
 ============================
 
 
+v0.4.4
+------
+
+* remove need for explicit deconstructions:
+	- use `-` and `1` instead of `dec`;
+	- allow `mod` and `div` as deconstructions;
+* bump Express requirement to v1.0.6 (bugfix);
+* complete the GPS1 benchmark;
+* add GPS2 and TerpreT benchmarks;
+* minor fixes in the README.
+
+
 v0.4.2
 ------
 
diff --git a/code-conjure.cabal b/code-conjure.cabal
--- a/code-conjure.cabal
+++ b/code-conjure.cabal
@@ -3,7 +3,7 @@
 -- Copyright (C) 2021 Rudy Matela
 -- Distributed under the 3-Clause BSD licence (see the file LICENSE).
 name:                code-conjure
-version:             0.4.2
+version:             0.4.4
 synopsis:            conjure Haskell functions out of partial definitions
 description:
   Conjure is a tool that produces Haskell functions out of partial definitions.
@@ -66,7 +66,7 @@
 source-repository this
   type:            git
   location:        https://github.com/rudymatela/conjure
-  tag:             v0.4.2
+  tag:             v0.4.4
 
 library
   exposed-modules: Conjure
@@ -81,8 +81,8 @@
   build-depends: base >= 4 && < 5
                , leancheck >= 0.9.10
                , template-haskell
-               , speculate >= 0.4.12
-               , express >= 1.0.4
+               , speculate >= 0.4.14
+               , express >= 1.0.6
   hs-source-dirs:      src
   default-language:    Haskell2010
 
diff --git a/eg/arith.out b/eg/arith.out
--- a/eg/arith.out
+++ b/eg/arith.out
@@ -29,8 +29,8 @@
 -- looking through 4 candidates of size 2
 -- looking through 9 candidates of size 3
 -- looking through 23 candidates of size 4
--- looking through 26 candidates of size 5
--- looking through 65 candidates of size 6
--- looking through 75 candidates of size 7
+-- looking through 29 candidates of size 5
+-- looking through 71 candidates of size 6
+-- looking through 113 candidates of size 7
 tnpo x  =  x + (x + (x + 1))
 
diff --git a/eg/bools.out b/eg/bools.out
--- a/eg/bools.out
+++ b/eg/bools.out
@@ -5,7 +5,7 @@
 -- looking through 6 candidates of size 2
 -- looking through 12 candidates of size 3
 -- looking through 16 candidates of size 4
--- looking through 40 candidates of size 5
+-- looking through 42 candidates of size 5
 and []  =  True
 and (p:ps)  =  p && and ps
 
@@ -16,7 +16,7 @@
 -- looking through 6 candidates of size 2
 -- looking through 12 candidates of size 3
 -- looking through 16 candidates of size 4
--- looking through 40 candidates of size 5
+-- looking through 42 candidates of size 5
 or []  =  False
 or (p:ps)  =  p || or ps
 
diff --git a/eg/count.out b/eg/count.out
--- a/eg/count.out
+++ b/eg/count.out
@@ -17,11 +17,11 @@
 -- looking through 8 candidates of size 4
 -- looking through 9 candidates of size 5
 -- looking through 24 candidates of size 6
--- looking through 44 candidates of size 7
--- looking through 108 candidates of size 8
--- looking through 244 candidates of size 9
--- looking through 574 candidates of size 10
--- looking through 1320 candidates of size 11
+-- looking through 46 candidates of size 7
+-- looking through 114 candidates of size 8
+-- looking through 272 candidates of size 9
+-- looking through 648 candidates of size 10
+-- looking through 1549 candidates of size 11
 count x []  =  0
 count x (y:xs)  =  (if x == y then 1 else 0) + count x xs
 
diff --git a/eg/dupos.out b/eg/dupos.out
--- a/eg/dupos.out
+++ b/eg/dupos.out
@@ -16,8 +16,8 @@
 -- looking through 141 candidates of size 13
 -- looking through 322 candidates of size 14
 -- looking through 644 candidates of size 15
--- looking through 1185 candidates of size 16
--- looking through 2153 candidates of size 17
+-- looking through 1189 candidates of size 16
+-- looking through 2189 candidates of size 17
 duplicates []  =  []
 duplicates (x:xs)  =  if elem x xs && not (elem x (duplicates xs)) then x:duplicates xs else duplicates xs
 
diff --git a/eg/factorial.hs b/eg/factorial.hs
--- a/eg/factorial.hs
+++ b/eg/factorial.hs
@@ -13,77 +13,27 @@
 
 main :: IO ()
 main  =  do
-  -- using enumFromTo
-  conjure "factorial n" factorial
-    [ pr (1::Int)
-    , prim ".." (enumFromTo :: Int -> Int -> [Int])
-    , prim "*" ((*) :: Int -> Int -> Int)
-    , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int)
-    ]
-
   -- explicit recursion
   conjure "factorial n" factorial
     [ pr (0::Int)
     , pr (1::Int)
     , prim "+" ((+) :: Int -> Int -> Int)
     , prim "*" ((*) :: Int -> Int -> Int)
-    , prim "dec" (subtract 1 :: Int -> Int)
+    , prim "-" ((-) :: Int -> Int -> Int)
     ]
-
--- the actual factorial function:
--- factorial n  =  if n == 0 then 1 else n * factorial (n - 1)
---                 1  2 3  4      5      6 7 8         9 10 11 symbols
---
--- OR
---
--- factorial n  =  if n == 0 then 1 else n * factorial (dec n)
---                 1  2 3  4      5      6 7 8          9  10 symbols
---
--- OR
---
--- factorial n  =  if (isZero n) then 1 else (n * factorial (dec n))
---                 1   2      3       4       5 6 7          8   9 symbols
-
-
-{-
--- Paramorphism of Naturals encoded as integers
-para :: (Int -> b -> b) -> b -> Int -> b
-para (?) z  =  p
-  where
-  p n  |  n < 0  =  z  -- no negatives for you :-)
-  p 0  =  z
-  p n  =  n ? p (n-1)
-
-The following works with a maxSize of 4, but not with a maxSize of 5.
+  -- should produce:
+  -- factorial 0  =  1
+  -- factorial x  =  x * factorial (x - 1)
 
-  -- using a paramorphism
+  -- using foldr and enumFromTo
   conjure "factorial n" factorial
-    [ pr (1::Int)
-    , prim "para" (para :: (Int->Int->Int) -> Int -> Int -> Int)
+    [ pr (0::Int)
+    , pr (1::Int)
+    , prim "+" ((+) :: Int -> Int -> Int)
     , prim "*" ((*) :: Int -> Int -> Int)
+    , prim "-" ((-) :: Int -> Int -> Int)
+    , prim ".." (enumFromTo :: Int -> Int -> [Int])
+    , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int)
     ]
-
-
-the factorial function is the following:
-
-fact  =  para (*) 1
-
-
-now consider the following grow_fast function:
-
-grow_fast  =  para (para (*)) 1  :: Integer -> Integer
-
-
-> growFast 1
-1
-> growFast 2
-2
-> growFast 3
-6
-> growFast 4
-2880
-> growFast 5
-7148302174930174893017438921... 8000 digits!
-> growFast 6
-stack overflow
--}
+  -- should produce:
+  -- factorial x  =  foldr (*) 1 [1..x]
diff --git a/eg/factorial.out b/eg/factorial.out
--- a/eg/factorial.out
+++ b/eg/factorial.out
@@ -1,23 +1,24 @@
 factorial :: Int -> Int
 -- testing 4 combinations of argument values
--- pruning with 4/8 rules
--- looking through 2 candidates of size 1
--- looking through 1 candidates of size 2
--- looking through 1 candidates of size 3
--- looking through 1 candidates of size 4
--- looking through 1 candidates of size 5
--- looking through 9 candidates of size 6
-factorial x  =  foldr (*) 1 [1..x]
+-- pruning with 27/65 rules
+-- looking through 3 candidates of size 1
+-- looking through 4 candidates of size 2
+-- looking through 13 candidates of size 3
+-- looking through 34 candidates of size 4
+-- looking through 75 candidates of size 5
+-- looking through 183 candidates of size 6
+-- looking through 577 candidates of size 7
+factorial 0  =  1
+factorial x  =  x * factorial (x - 1)
 
 factorial :: Int -> Int
 -- testing 4 combinations of argument values
--- pruning with 22/42 rules
+-- pruning with 32/72 rules
 -- looking through 3 candidates of size 1
--- looking through 6 candidates of size 2
--- looking through 16 candidates of size 3
--- looking through 39 candidates of size 4
--- looking through 78 candidates of size 5
--- looking through 166 candidates of size 6
-factorial 0  =  1
-factorial x  =  x * factorial (dec x)
+-- looking through 4 candidates of size 2
+-- looking through 13 candidates of size 3
+-- looking through 34 candidates of size 4
+-- looking through 75 candidates of size 5
+-- looking through 247 candidates of size 6
+factorial x  =  foldr (*) 1 [1..x]
 
diff --git a/eg/fib01.hs b/eg/fib01.hs
--- a/eg/fib01.hs
+++ b/eg/fib01.hs
@@ -11,6 +11,12 @@
 fib01 0 1 6  =  13
 fib01 0 1 7  =  21
 
+fibonacci :: Int -> Int
+fibonacci  =  f 0 1
+  where
+  f x y 0  =  y
+  f x y n  =  f y (x + y) (n - 1)
+
 main :: IO ()
 main  =  do
   conjureWithMaxSize 5 "fib01" fib01
diff --git a/eg/fib01.out b/eg/fib01.out
--- a/eg/fib01.out
+++ b/eg/fib01.out
@@ -20,6 +20,6 @@
 -- looking through 192 candidates of size 7
 -- looking through 391 candidates of size 8
 -- looking through 840 candidates of size 9
--- looking through 15630 candidates of size 10
+-- looking through 6414 candidates of size 10
 cannot conjure
 
diff --git a/eg/fibonacci.hs b/eg/fibonacci.hs
--- a/eg/fibonacci.hs
+++ b/eg/fibonacci.hs
@@ -9,28 +9,17 @@
 fibonacci 4  =  5
 fibonacci 5  =  8
 fibonacci 6  =  13
-fibonacci 7  =  21
 
 main :: IO ()
 main  =  do
   conjure "fibonacci n" fibonacci
     [ pr (0::Int)
     , pr (1::Int)
-    , prim "dec" (subtract 1 :: Int -> Int)
+    , pr (2::Int)
     , prim "+" ((+) :: Int -> Int -> Int)
+    , prim "-" ((-) :: Int -> Int -> Int)
     ]
 -- expected function:
--- fibonacci n  =  if n <= 1 then 1 else fibonacci (dec n) + fibonacci (dec (dec n))
---                 1  2 3  4      5      6          7   8  9        10  11   12  13
-
-
-{- to note, if dec appears later than + in the primitives list:
-
-conjureWith ...  =
-
-> print $ canReduceTo thy (xx -+- dec xx) (dec (dec xx))
-False
-> print $ canReduceTo thy (dec (dec xx)) (xx -+- dec xx)
-True
-
--}
+-- fibonacci 0  =  1
+-- fibonacci 1  =  1
+-- fibonacci x  =  fibonacci (x - 1) + fibonacci (x - 2)
diff --git a/eg/fibonacci.out b/eg/fibonacci.out
--- a/eg/fibonacci.out
+++ b/eg/fibonacci.out
@@ -1,18 +1,19 @@
 fibonacci :: Int -> Int
--- testing 8 combinations of argument values
--- pruning with 9/13 rules
--- looking through 3 candidates of size 1
--- looking through 6 candidates of size 2
--- looking through 17 candidates of size 3
--- looking through 41 candidates of size 4
--- looking through 76 candidates of size 5
--- looking through 155 candidates of size 6
--- looking through 249 candidates of size 7
--- looking through 481 candidates of size 8
--- looking through 762 candidates of size 9
--- looking through 1413 candidates of size 10
--- looking through 2257 candidates of size 11
+-- testing 7 combinations of argument values
+-- pruning with 21/44 rules
+-- looking through 4 candidates of size 1
+-- looking through 9 candidates of size 2
+-- looking through 20 candidates of size 3
+-- looking through 87 candidates of size 4
+-- looking through 127 candidates of size 5
+-- looking through 420 candidates of size 6
+-- looking through 845 candidates of size 7
+-- looking through 2136 candidates of size 8
+-- looking through 5185 candidates of size 9
+-- looking through 13000 candidates of size 10
+-- looking through 33460 candidates of size 11
+-- looking through 85901 candidates of size 12
 fibonacci 0  =  1
 fibonacci 1  =  1
-fibonacci x  =  fibonacci (dec x) + fibonacci (dec (dec x))
+fibonacci x  =  fibonacci (x - 1) + fibonacci (x - 2)
 
diff --git a/eg/gcd.hs b/eg/gcd.hs
--- a/eg/gcd.hs
+++ b/eg/gcd.hs
@@ -18,7 +18,7 @@
 gcd' 12 18  =  6
 
 main :: IO ()
-main = conjureWith args{requireDescent=False} "gcd a b" gcd'
+main = conjure "gcd a b" gcd'
   [ pr (0::Int)
   , prim "`mod`" (mod :: Int -> Int -> Int)
   ]
diff --git a/eg/gcd.out b/eg/gcd.out
--- a/eg/gcd.out
+++ b/eg/gcd.out
@@ -4,9 +4,9 @@
 -- looking through 3 candidates of size 1
 -- looking through 8 candidates of size 2
 -- looking through 20 candidates of size 3
--- looking through 88 candidates of size 4
--- looking through 202 candidates of size 5
--- looking through 808 candidates of size 6
+-- looking through 60 candidates of size 4
+-- looking through 150 candidates of size 5
+-- looking through 472 candidates of size 6
 gcd x 0  =  x
 gcd x y  =  gcd y (x `mod` y)
 
diff --git a/eg/ints.hs b/eg/ints.hs
--- a/eg/ints.hs
+++ b/eg/ints.hs
@@ -25,12 +25,33 @@
 
 main :: IO ()
 main = do
-  conjure "second"  (second   :: [Int] -> Int) primitives
-  conjure "third"   (third    :: [Int] -> Int) primitives
-  conjure "sum"     (sum'     :: [Int] -> Int) primitives
-  conjure "product" (product' :: [Int] -> Int) primitives
+  conjure "second"  (second :: [Int] -> Int)
+    [ prim "null" (null :: [Int] -> Bool)
+    , prim "head" (head :: [Int] -> Int)
+    , prim "tail" (tail :: [Int] -> [Int])
+    ]
 
-  conjure "sum"     (sum'     :: [Int] -> Int) primitivesWithFold
+  conjure "third"   (third :: [Int] -> Int)
+    [ prim "null" (null :: [Int] -> Bool)
+    , prim "head" (head :: [Int] -> Int)
+    , prim "tail" (tail :: [Int] -> [Int])
+    ]
+
+  conjure "sum"     (sum' :: [Int] -> Int)
+    [ pr (0 :: Int)
+    , pr (1 :: Int)
+    , prim "+" ((+) :: Int -> Int -> Int)
+    , prim "*" ((*) :: Int -> Int -> Int)
+    ]
+
+  conjure "product" (product' :: [Int] -> Int)
+    [ pr (0 :: Int)
+    , pr (1 :: Int)
+    , prim "+" ((+) :: Int -> Int -> Int)
+    , prim "*" ((*) :: Int -> Int -> Int)
+    ]
+
+  conjure "sum"     (sum' :: [Int] -> Int) primitivesWithFold
   conjure "product" (product' :: [Int] -> Int) primitivesWithFold
 
 primitives :: [Prim]
@@ -39,9 +60,6 @@
   , pr (1 :: Int)
   , prim "+" ((+) :: Int -> Int -> Int)
   , prim "*" ((*) :: Int -> Int -> Int)
-  , prim "null" (null :: [Int] -> Bool)
-  , prim "head" (head :: [Int] -> Int)
-  , prim "tail" (tail :: [Int] -> [Int])
   ]
 
 primitivesWithFold :: [Prim]
diff --git a/eg/ints.out b/eg/ints.out
--- a/eg/ints.out
+++ b/eg/ints.out
@@ -1,28 +1,28 @@
 second :: [Int] -> Int
 -- testing 360 combinations of argument values
--- pruning with 14/25 rules
--- looking through 2 candidates of size 1
--- looking through 5 candidates of size 2
--- looking through 6 candidates of size 3
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 1 candidates of size 3
 second xs  =  head (tail xs)
 
 third :: [Int] -> Int
 -- testing 360 combinations of argument values
--- pruning with 14/25 rules
--- looking through 2 candidates of size 1
--- looking through 5 candidates of size 2
--- looking through 6 candidates of size 3
--- looking through 19 candidates of size 4
+-- pruning with 0/0 rules
+-- looking through 0 candidates of size 1
+-- looking through 1 candidates of size 2
+-- looking through 1 candidates of size 3
+-- looking through 1 candidates of size 4
 third xs  =  head (tail (tail xs))
 
 sum :: [Int] -> Int
 -- testing 360 combinations of argument values
 -- pruning with 14/25 rules
 -- looking through 2 candidates of size 1
--- looking through 5 candidates of size 2
--- looking through 6 candidates of size 3
--- looking through 19 candidates of size 4
--- looking through 31 candidates of size 5
+-- looking through 4 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 13 candidates of size 4
+-- looking through 14 candidates of size 5
 sum []  =  0
 sum (x:xs)  =  x + sum xs
 
@@ -30,10 +30,10 @@
 -- testing 360 combinations of argument values
 -- pruning with 14/25 rules
 -- looking through 2 candidates of size 1
--- looking through 5 candidates of size 2
--- looking through 6 candidates of size 3
--- looking through 19 candidates of size 4
--- looking through 31 candidates of size 5
+-- looking through 4 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 13 candidates of size 4
+-- looking through 14 candidates of size 5
 product []  =  1
 product (x:xs)  =  x * product xs
 
@@ -41,17 +41,17 @@
 -- testing 360 combinations of argument values
 -- pruning with 15/26 rules
 -- looking through 2 candidates of size 1
--- looking through 5 candidates of size 2
--- looking through 6 candidates of size 3
--- looking through 22 candidates of size 4
+-- looking through 4 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 16 candidates of size 4
 sum xs  =  foldr (+) 0 xs
 
 product :: [Int] -> Int
 -- testing 360 combinations of argument values
 -- pruning with 15/26 rules
 -- looking through 2 candidates of size 1
--- looking through 5 candidates of size 2
--- looking through 6 candidates of size 3
--- looking through 22 candidates of size 4
+-- looking through 4 candidates of size 2
+-- looking through 3 candidates of size 3
+-- looking through 16 candidates of size 4
 product xs  =  foldr (*) 1 xs
 
diff --git a/eg/pow.hs b/eg/pow.hs
--- a/eg/pow.hs
+++ b/eg/pow.hs
@@ -13,16 +13,13 @@
 
 main :: IO ()
 main  =  do
-  -- pow b e  =  if e == 0 then 1 else b * pow b (dec e)
-  --             1  2  3 4      5      6 7 8   9  10 11
-  -- somehow the above takes 30s to run, the two arguments
-  -- of the same type introduce the difficulty here.
-  -- with cases below, runtime is ok:
+  -- pow x 0  =  1
+  -- pow x y  =  x * pow x (y - 1)
   conjureWithMaxSize 8 "pow" pow
     [ pr (0::Int)
     , pr (1::Int)
     , prim "*" ((*) :: Int -> Int -> Int)
-    , prim "dec" (subtract 1 :: Int -> Int)
+    , prim "-" ((-) :: Int -> Int -> Int)
     ]
 
   -- pow b e  =  if e == 0 then 1 else pow b (halve e) * pow b (halve e) * if odd e then b else 1
diff --git a/eg/pow.out b/eg/pow.out
--- a/eg/pow.out
+++ b/eg/pow.out
@@ -1,15 +1,16 @@
 pow :: Int -> Int -> Int
 -- testing 5 combinations of argument values
--- pruning with 8/12 rules
+-- pruning with 14/30 rules
 -- looking through 4 candidates of size 1
--- looking through 21 candidates of size 2
--- looking through 129 candidates of size 3
--- looking through 517 candidates of size 4
--- looking through 2346 candidates of size 5
--- looking through 8550 candidates of size 6
--- looking through 32487 candidates of size 7
+-- looking through 18 candidates of size 2
+-- looking through 101 candidates of size 3
+-- looking through 324 candidates of size 4
+-- looking through 1668 candidates of size 5
+-- looking through 3438 candidates of size 6
+-- looking through 21096 candidates of size 7
+-- looking through 34780 candidates of size 8
 pow x 0  =  1
-pow x y  =  x * pow x (dec y)
+pow x y  =  x * pow x (y - 1)
 
 pow :: Int -> Int -> Int
 -- testing 5 combinations of argument values
@@ -17,8 +18,8 @@
 -- looking through 4 candidates of size 1
 -- looking through 20 candidates of size 2
 -- looking through 114 candidates of size 3
--- looking through 376 candidates of size 4
--- looking through 1714 candidates of size 5
--- looking through 4706 candidates of size 6
+-- looking through 378 candidates of size 4
+-- looking through 1690 candidates of size 5
+-- looking through 4572 candidates of size 6
 cannot conjure
 
diff --git a/eg/replicate.hs b/eg/replicate.hs
--- a/eg/replicate.hs
+++ b/eg/replicate.hs
@@ -27,7 +27,8 @@
 main = do
   conjure "replicate" replicate'
     [ pr (0 :: Int)
-    , prim "dec" (subtract 1 :: Int -> Int)
+    , pr (1 :: Int)
+    , prim "-" ((-) :: Int -> Int -> Int)
     , pr ""
     , prim ":" ((:) :: Char -> String -> String)
     ]
diff --git a/eg/replicate.out b/eg/replicate.out
--- a/eg/replicate.out
+++ b/eg/replicate.out
@@ -1,15 +1,16 @@
 replicate :: Int -> Char -> [Char]
 -- testing 360 combinations of argument values
--- pruning with 0/0 rules
+-- pruning with 4/7 rules
 -- looking through 1 candidates of size 1
 -- looking through 0 candidates of size 2
 -- looking through 1 candidates of size 3
 -- looking through 2 candidates of size 4
--- looking through 2 candidates of size 5
--- looking through 3 candidates of size 6
--- looking through 4 candidates of size 7
+-- looking through 3 candidates of size 5
+-- looking through 7 candidates of size 6
+-- looking through 5 candidates of size 7
+-- looking through 16 candidates of size 8
 replicate 0 c  =  ""
-replicate x c  =  c:replicate (dec x) c
+replicate x c  =  c:replicate (x - 1) c
 
 replicates :: [Char] -> Int -> [Char]
 -- testing 360 combinations of argument values
diff --git a/eg/setelem.out b/eg/setelem.out
--- a/eg/setelem.out
+++ b/eg/setelem.out
@@ -6,9 +6,9 @@
 -- looking through 5 candidates of size 3
 -- looking through 28 candidates of size 4
 -- looking through 73 candidates of size 5
--- looking through 119 candidates of size 6
--- looking through 277 candidates of size 7
--- looking through 895 candidates of size 8
+-- looking through 124 candidates of size 6
+-- looking through 305 candidates of size 7
+-- looking through 999 candidates of size 8
 elem x []  =  False
 elem x (y:xs)  =  x == y || elem x xs
 
@@ -20,9 +20,9 @@
 -- looking through 7 candidates of size 3
 -- looking through 19 candidates of size 4
 -- looking through 35 candidates of size 5
--- looking through 81 candidates of size 6
--- looking through 229 candidates of size 7
--- looking through 546 candidates of size 8
+-- looking through 83 candidates of size 6
+-- looking through 245 candidates of size 7
+-- looking through 617 candidates of size 8
 set []  =  True
 set (x:xs)  =  not (elem x xs) && set xs
 
diff --git a/eg/tapps.out b/eg/tapps.out
--- a/eg/tapps.out
+++ b/eg/tapps.out
@@ -4,7 +4,7 @@
 -- looking through 2 candidates of size 1
 -- looking through 5 candidates of size 2
 -- looking through 6 candidates of size 3
--- looking through 19 candidates of size 4
+-- looking through 20 candidates of size 4
 third xs  =  head (tail (tail xs))
 
 product :: [Int] -> Int
@@ -13,8 +13,8 @@
 -- looking through 2 candidates of size 1
 -- looking through 5 candidates of size 2
 -- looking through 6 candidates of size 3
--- looking through 19 candidates of size 4
--- looking through 31 candidates of size 5
+-- looking through 20 candidates of size 4
+-- looking through 34 candidates of size 5
 product []  =  1
 product (x:xs)  =  x * product xs
 
@@ -24,6 +24,6 @@
 -- looking through 2 candidates of size 1
 -- looking through 5 candidates of size 2
 -- looking through 6 candidates of size 3
--- looking through 22 candidates of size 4
+-- looking through 23 candidates of size 4
 product xs  =  foldr (*) 1 xs
 
diff --git a/eg/tree.out b/eg/tree.out
--- a/eg/tree.out
+++ b/eg/tree.out
@@ -46,11 +46,11 @@
 -- looking through 8 candidates of size 3
 -- looking through 59 candidates of size 4
 -- looking through 114 candidates of size 5
--- looking through 388 candidates of size 6
--- looking through 1255 candidates of size 7
--- looking through 3833 candidates of size 8
+-- looking through 472 candidates of size 6
+-- looking through 1440 candidates of size 7
+-- looking through 5781 candidates of size 8
 height Leaf  =  -1
-height (Node t1 x t2)  =  1 + max (height t1) (height t2)
+height (Node t1 x t2)  =  max (height t1) (height t2) + 1
 
 mem :: Int -> Tree -> Bool
 -- testing 360 combinations of argument values
diff --git a/mk/depend.mk b/mk/depend.mk
--- a/mk/depend.mk
+++ b/mk/depend.mk
@@ -16,6 +16,19 @@
   src/Conjure/Defn.hs \
   src/Conjure/Conjurable.hs \
   bench/candidates.hs
+bench/gps2: \
+  bench/gps2.hs \
+  mk/toplibs
+bench/gps2.o: \
+  src/Conjure/Utils.hs \
+  src/Conjure/Spec.hs \
+  src/Conjure/Prim.hs \
+  src/Conjure.hs \
+  src/Conjure/Expr.hs \
+  src/Conjure/Engine.hs \
+  src/Conjure/Defn.hs \
+  src/Conjure/Conjurable.hs \
+  bench/gps2.hs
 bench/gps: \
   bench/gps.hs \
   mk/toplibs
@@ -120,6 +133,19 @@
   src/Conjure/Defn.hs \
   src/Conjure/Conjurable.hs \
   bench/take-drop.hs
+bench/terpret: \
+  bench/terpret.hs \
+  mk/toplibs
+bench/terpret.o: \
+  src/Conjure/Utils.hs \
+  src/Conjure/Spec.hs \
+  src/Conjure/Prim.hs \
+  src/Conjure.hs \
+  src/Conjure/Expr.hs \
+  src/Conjure/Engine.hs \
+  src/Conjure/Defn.hs \
+  src/Conjure/Conjurable.hs \
+  bench/terpret.hs
 eg/arith: \
   eg/arith.hs \
   mk/toplibs
diff --git a/src/Conjure.hs b/src/Conjure.hs
--- a/src/Conjure.hs
+++ b/src/Conjure.hs
@@ -76,6 +76,8 @@
   , reifyEquality
   , reifyTiers
   , conjureType
+  , Name (..)
+  , Express (..)
 
 -- * Pure interfaces
   , conjpure
diff --git a/src/Conjure/Conjurable.hs b/src/Conjure/Conjurable.hs
--- a/src/Conjure/Conjurable.hs
+++ b/src/Conjure/Conjurable.hs
@@ -27,12 +27,16 @@
   , conjureMkEquation
   , A, B, C, D, E, F
   , conjureIsDeconstructor
+  , conjureIsDeconstruction
+  , candidateDeconstructionsFrom
   , conjureIsUnbreakable
   , conjureReification
   , conjureReification1
   , cevaluate
   , ceval
   , cevl
+  , Name (..)
+  , Express (..)
   )
 where
 
@@ -44,6 +48,7 @@
 import Test.Speculate.Expr
 import Data.Functor ((<$>))
 import Control.Applicative ((<*>))
+import Data.Express
 
 import Data.Int     -- for instances
 import Data.Word    -- for instances
@@ -252,7 +257,37 @@
     sz  =  head [sz | (_, _, _, _, _, sz) <- conjureReification f
                     , isWellTyped (sz :$ h)]
     esz e  =  eval (0::Int) (sz :$ e)
-    is e  =  esz (h :$ e) < esz e
+    is e'  =  errorToFalse $ esz (e :$ e') < esz e'
+
+-- the result does not increase the size for at least half the time
+-- the result decreases in size for at least a third of the time
+conjureIsDeconstruction :: Conjurable f => f -> Int -> Expr -> Bool
+conjureIsDeconstruction f maxTests ed  =  length (holes ed) == 1
+                                       && typ h == typ ed
+                                       && count is gs >= length gs `div` 2
+                                       && count iz gs >= length gs `div` 3
+  where
+  gs  =  take maxTests $ grounds (conjureTiersFor f) ed
+  [h]  =  holes ed
+  sz  =  head [sz | (_, _, _, _, _, sz) <- conjureReification f
+                  , isWellTyped (sz :$ h)]
+  esz e  =  eval (0::Int) (sz :$ e)
+  is e  =  errorToFalse $ esz e <= esz (holeValue e)
+  iz e  =  errorToFalse $ esz e < esz (holeValue e)
+  holeValue e  =  fromMaybe err
+               .  lookup h
+               .  fromMaybe err
+               $  e `match` ed
+  err  =  error "conjureIsDeconstructor: the impossible happened"
+
+candidateDeconstructionsFrom :: Expr -> [Expr]
+candidateDeconstructionsFrom e  =
+  [ e'
+  | v <- vars e
+  , typ v == typ e
+  , let e' = e //- [(v, holeAsTypeOf v)]
+  , length (holes e') == 1
+  ]
 
 conjureIsUnbreakable :: Conjurable f => f -> Expr -> Bool
 conjureIsUnbreakable f e  =  head
diff --git a/src/Conjure/Engine.hs b/src/Conjure/Engine.hs
--- a/src/Conjure/Engine.hs
+++ b/src/Conjure/Engine.hs
@@ -23,6 +23,7 @@
   , candidateDefnsC
   , conjureTheory
   , conjureTheoryWith
+  , deconstructions
   , module Data.Express
   , module Data.Express.Fixtures
   , module Test.Speculate.Engine
@@ -40,7 +41,7 @@
 import Test.LeanCheck.Tiers
 import Test.LeanCheck.Error (errorToTrue, errorToFalse, errorToNothing)
 
-import Test.Speculate.Reason (Thy, rules, equations, canReduceTo, printThy, closureLimit)
+import Test.Speculate.Reason (Thy, rules, equations, invalid, canReduceTo, printThy, closureLimit, doubleCheck)
 import Test.Speculate.Engine (theoryFromAtoms, groundBinds, boolTy)
 
 import Conjure.Expr
@@ -99,15 +100,16 @@
 -- | Arguments to be passed to 'conjureWith' or 'conjpureWith'.
 --   See 'args' for the defaults.
 data Args = Args
-  { maxTests          :: Int  -- ^ maximum number of tests to each candidate
-  , maxSize           :: Int  -- ^ maximum size of candidate bodies
-  , maxEvalRecursions :: Int  -- ^ maximum number of recursive evaluations when testing candidates
-  , maxEquationSize   :: Int  -- ^ maximum size of equation operands
-  , maxSearchTests    :: Int  -- ^ maximum number of tests to search for defined values
-  , requireDescent    :: Bool -- ^ require recursive calls to deconstruct arguments
-  , usePatterns       :: Bool -- ^ use pattern matching to create (recursive) candidates
-  , showTheory        :: Bool -- ^ show theory discovered by Speculate used in pruning
-  , forceTests :: [[Expr]]  -- ^ force tests
+  { maxTests              :: Int  -- ^ maximum number of tests to each candidate
+  , maxSize               :: Int  -- ^ maximum size of candidate bodies
+  , maxEvalRecursions     :: Int  -- ^ maximum number of recursive evaluations when testing candidates
+  , maxEquationSize       :: Int  -- ^ maximum size of equation operands
+  , maxSearchTests        :: Int  -- ^ maximum number of tests to search for defined values
+  , maxDeconstructionSize :: Int  -- ^ maximum size of deconstructions (e.g.: @_ - 1@)
+  , requireDescent        :: Bool -- ^ require recursive calls to deconstruct arguments
+  , usePatterns           :: Bool -- ^ use pattern matching to create (recursive) candidates
+  , showTheory            :: Bool -- ^ show theory discovered by Speculate used in pruning
+  , forceTests            :: [[Expr]]  -- ^ force tests
   }
 
 
@@ -123,15 +125,16 @@
 -- * don't show the theory used in pruning
 args :: Args
 args = Args
-  { maxTests           =  360
-  , maxSize            =  12
-  , maxEvalRecursions  =  60
-  , maxEquationSize    =   5
-  , maxSearchTests     =  100000
-  , requireDescent     =  True
-  , usePatterns        =  True
-  , showTheory         =  False
-  , forceTests         =  []
+  { maxTests               =  360
+  , maxSize                =  12
+  , maxEvalRecursions      =  60
+  , maxEquationSize        =   5
+  , maxSearchTests         =  100000
+  , maxDeconstructionSize  =   4
+  , requireDescent         =  True
+  , usePatterns            =  True
+  , showTheory             =  False
+  , forceTests             =  []
   }
 
 
@@ -147,8 +150,9 @@
     putStrLn $ "{-"
     printThy thy
     putStrLn $ "-}"
-  when (filtered thy) $
-    putStrLn $ "-- reasoning produced incorrect properties," -- TODO: add Num
+  when (not . null $ invalid thy) $
+    putStrLn $ "-- reasoning produced "
+            ++ show (length (invalid thy)) ++ " incorrect properties,"
             ++ " please re-run with more tests for faster results"
   pr 1 rs
   where
@@ -263,11 +267,25 @@
   (ef:exs)  =  unfoldApp efxs
   keep  =  isRootNormalE thy . fastMostGeneralVariation
   ds  =  filter (conjureIsDeconstructor f maxTests) es
-  keepR | requireDescent  =  descends (`elem` ds) efxs
+  keepR | requireDescent  =  descends isDecOf efxs
         | otherwise       =  const True
+    where
+    e `isDecOf` e'  =  not $ null
+                    [  ()
+                    |  d <- deconstructions
+                    ,  m <- maybeToList (e `match` d)
+                    ,  filter (uncurry (/=)) m == [(holeAsTypeOf e', e')]
+                    ]
+    deconstructions :: [Expr]
+    deconstructions  =  filter (conjureIsDeconstruction f maxTests)
+                     $  concatMap candidateDeconstructionsFrom
+                     $  concat . take maxDeconstructionSize
+                     $  concatMapT forN [hs]
+      where
+      hs  =  nub $ conjureArgumentHoles f
   recs  =  filterT keepR
         $  foldAppProducts ef [forN h | h <- conjureArgumentHoles f]
-  thy  =  filterTheory (===)
+  thy  =  doubleCheck (===)
        .  theoryFromAtoms (===) maxEquationSize . (:[]) . nub
        $  cjHoles (prim nm f:ps) ++ [val False, val True] ++ es
   (===)  =  cjAreEqual (prim nm f:ps) maxTests
@@ -285,7 +303,7 @@
   efxs  =  conjureVarApplication nm f
   (ef:exs)  =  unfoldApp efxs
 
-  keep  =  isRootNormalE thy . fastMostGeneralVariation
+  keep  =  isRootNormal thy . fastMostGeneralVariation
 
   appsWith :: Expr -> [Expr] -> [[Expr]]
   appsWith eh vs  =  enumerateAppsFor eh keep $ vs ++ es
@@ -314,8 +332,22 @@
   fillingsFor  =  products . map fillingsFor1
 
   ds  =  filter (conjureIsDeconstructor f maxTests) es
-  keepR ep | requireDescent  =  descends (`elem` ds) ep
+  keepR ep | requireDescent  =  descends isDecOf ep
            | otherwise       =  const True
+    where
+    e `isDecOf` e'  =  not $ null
+                    [  ()
+                    |  d <- deconstructions
+                    ,  m <- maybeToList (e `match` d)
+                    ,  filter (uncurry (/=)) m == [(holeAsTypeOf e', e')]
+                    ]
+    deconstructions :: [Expr]
+    deconstructions  =  filter (conjureIsDeconstruction f maxTests)
+                     $  concatMap candidateDeconstructionsFrom
+                     $  concat . take maxDeconstructionSize
+                     $  concatMapT (`appsWith` vars ep) [hs]
+      where
+      hs  =  nub $ conjureArgumentHoles f
   recs ep  =  filterT (keepR ep)
            .  discardT (\e -> e == ep)
            $  recsV' (tail (vars ep))
@@ -331,7 +363,7 @@
     where
     evrs = [(vs, recsV vs) | vs <- nubSort $ map (tail . vars) possiblePats]
 
-  thy  =  filterTheory (===)
+  thy  =  doubleCheck (===)
        .  theoryFromAtoms (===) maxEquationSize . (:[]) . nub
        $  cjHoles (prim nm f:ps) ++ [val False, val True] ++ es
   (===)  =  cjAreEqual (prim nm f:ps) maxTests
@@ -393,8 +425,8 @@
 -- For all possible sets of arguments (2^n - 1 elements: 1 3 7 15 31),
 -- see if any projects the same variables while only using deconstructions
 -- and where there is at least a single deconstruction.
-descends :: (Expr -> Bool) -> Expr -> Expr -> Bool
-descends isDec e' e  =  any d1 ss
+descends :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Bool
+descends isDecOf e' e  =  any d1 ss
   where
   desc  =  any d1 . uncurry useMatches . unzip
   d1 exys  =  all isNotConstruction exys
@@ -403,12 +435,13 @@
   exys  =  zip exs eys
   (_:exs)  =  unfoldApp e'
   (_:eys)  =  unfoldApp e
-  isDeconstruction (p,e) | isVar p    =  not (null cs) && all isDec cs
+  isDeconstruction (p,e) | isVar p    =  e `isDecOf` p
                          | otherwise  =  size e < size p
     where
     cs  =  consts e
-  isNotConstruction (p,e) | isVar p    =  all isDec (consts e)
+  isNotConstruction (p,e) | isVar p    =  e == p || e `isDecOf` p
                           | otherwise  =  size e <= size p -- TODO: allow filter and id somehow
+-- TODO: improve this function with better isNotConstruction
 
 
 candidatesTD :: (Expr -> Bool) -> Expr -> [Expr] -> [[Expr]]
@@ -466,29 +499,6 @@
   where
   trie  =  T.fromList $ equations thy ++ map swap (equations thy)
   (->-)  =  canReduceTo thy
-
-
---- double checks ---
-
-filtered :: Thy -> Bool
-filtered  =  (< 0) . closureLimit
-
-filterTheory :: (Expr -> Expr -> Bool) -> Thy -> Thy
--- TODO: move filterTheory into Speculate, and add new Thy field "doubleChecked / invalid"
---       or maybe have a third list of equations:
---       invalid :: (Expr,Expr)
---       that lists ones that were discarded
-filterTheory (===) thy  =  thy
-                        {  rules = rs
-                        ,  equations = es
-                        ,  closureLimit = if r' && e'
-                                          then closureLimit thy
-                                          else -1
-                        }
-  where
-  correct  =  uncurry (===)
-  (rs,r')  =  filterAnd correct (rules thy)
-  (es,e')  =  filterAnd correct (equations thy)
 
 
 --- tiers utils ---
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -10,5 +10,5 @@
 
 extra-deps:
 - leancheck-0.9.10
-- speculate-0.4.12
-- express-1.0.4
+- speculate-0.4.14
+- express-1.0.6
diff --git a/test/conjurable.hs b/test/conjurable.hs
--- a/test/conjurable.hs
+++ b/test/conjurable.hs
@@ -211,7 +211,47 @@
            ]
          ]
        ]
+
+  , conjureIsDeconstructor (undefined :: Int -> Int) 60 (value "dec" (subtract 1 :: Int -> Int))
+    == True
+
+  , conjureIsDeconstructor (undefined :: Int -> Int) 60 (value "halve" ((`div` 2) :: Int -> Int))
+    == True
+
+  , conjureIsDeconstructor (undefined :: Int -> Int) 60 (value "double" ((*2) :: Int -> Int))
+    == False
+
+  , conjureIsDeconstructor (undefined :: Int -> Int) 60 (value "inc" ((+1) :: Int -> Int))
+    == False -- _almost_ converges half the time
+
+  , conjureIsDeconstructor (undefined :: [Int] -> Int) 60 (value "tail" (tail :: [Int] -> [Int]))
+    == True
+
+  , conjureIsDeconstructor (undefined :: [Int] -> Int) 60 (value "prep" ((0:) :: [Int] -> [Int]))
+    == False
+
+  , isDecon (minus :$ i_ :$ one) == True
+  , isDecon (minusOne -+- i_)    == True
+  , isDecon (div' i_ two)        == True
+  , isDecon (tail' is_)          == True
+  , isDecon (init' is_)          == True
+  , isDecon (mod' i_ two)        == True
+  , isDecon (mod' i_ xx)         == True
+
+  , isDecon (div' xx yy)         == False -- must have a hole to indicate the value being deconstructed
+  , isDecon (div' i_ i_)         == False -- two holes are not allowed
+  , isDecon (head' is_)          == False -- must deconstruct to the same type
+  , isDecon (i_ -*- two)         == False -- increases the size
+
+  , candidateDeconstructionsFrom (div' xx yy) == [ div' i_ yy
+                                                 , div' xx i_
+                                                 ]
+  , candidateDeconstructionsFrom (div' xx xx) == []
+  , candidateDeconstructionsFrom ((xx -+- xx) -+- yy) == [(xx -+- xx) -+- i_]
   ]
+
+isDecon :: Expr -> Bool
+isDecon =  conjureIsDeconstruction (undefined :: [Int] -> [Char] -> [Bool]) 60
 
 ffs :: Expr -> Expr
 ffs e  =  ffE :$ e
