diff --git a/souffle/path3f.dl b/souffle/path3f.dl
new file mode 100644
index 0000000000000000000000000000000000000000..99b7149356feb41321ed545719e0436766384e96
--- /dev/null
+++ b/souffle/path3f.dl
@@ -0,0 +1,15 @@
+
+//
+// par - "parent"/"edge" relation
+//
+.decl par (n:number, m:number)
+.input par(IO=file, filename="INSTANCE")
+// par(1,2).
+// par(2,3).
+
+//.decl path2 (n:number, m:number) output
+.decl path3 (n:number, m:number)
+//.output path2(IO=stdout)
+.printsize path3
+
+path3(X, Y)  :- par(X, A), par(A, B), par(B, Y).
diff --git a/souffle/path3l.dl b/souffle/path3l.dl
new file mode 100644
index 0000000000000000000000000000000000000000..a2044d887efd20a6e3264807826bc7d46c6e48a7
--- /dev/null
+++ b/souffle/path3l.dl
@@ -0,0 +1,17 @@
+
+//
+// par - "parent"/"edge" relation
+//
+.decl par (n:number, m:number)
+.input par(IO=file, filename="INSTANCE")
+// par(1,2).
+// par(2,3).
+
+//.decl path2 (n:number, m:number) output
+.decl path2 (n:number, m:number)
+.decl path3 (n:number, m:number)
+//.output path2(IO=stdout)
+.printsize path3
+
+path2(X, Y)  :- par(X, Z), par(Z, Y).
+path3(X, Y)  :- path2(X, Z), par(Z, Y).
diff --git a/souffle/path3r.dl b/souffle/path3r.dl
new file mode 100644
index 0000000000000000000000000000000000000000..0f7f03f140fd4addfba7daef928308cea1adc9a0
--- /dev/null
+++ b/souffle/path3r.dl
@@ -0,0 +1,17 @@
+
+//
+// par - "parent"/"edge" relation
+//
+.decl par (n:number, m:number)
+.input par(IO=file, filename="INSTANCE")
+// par(1,2).
+// par(2,3).
+
+//.decl path2 (n:number, m:number) output
+.decl path2 (n:number, m:number)
+.decl path3 (n:number, m:number)
+//.output path2(IO=stdout)
+.printsize path3
+
+path2(X, Y)  :- par(X, Z), par(Z, Y).
+path3(X, Y)  :- par(X, Z), path2(Z, Y).