489 coord model
authorAlexander Fedotov <Alexander Fedotov>
Mon, 14 Mar 2016 19:56:25 +0000 (20:56 +0100)
committerAlexander Fedotov <Alexander Fedotov>
Mon, 14 Mar 2016 19:56:25 +0000 (20:56 +0100)
Models/489-coord.smv [new file with mode: 0644]

diff --git a/Models/489-coord.smv b/Models/489-coord.smv
new file mode 100644 (file)
index 0000000..b122475
--- /dev/null
@@ -0,0 +1,2125 @@
+MODULE main
+VAR
+    x0_0 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x0_1 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x0_2 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x0_3 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x0_4 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x0_5 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x0_6 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x1_0 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x1_1 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x1_2 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x1_3 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x1_4 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x1_5 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x1_6 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x1_7 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x2_0 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x2_1 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x2_2 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x2_3 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x2_4 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x2_5 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x2_6 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x2_7 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x3_0 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x3_1 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x3_2 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x3_3 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x3_4 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x3_5 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x3_6 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x3_7 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x4_0 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x4_1 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x4_2 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x4_3 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x4_4 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x4_5 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x4_6 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x4_7 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x5_0 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x5_1 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x5_2 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x5_3 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x5_4 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x5_5 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x5_6 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x5_7 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x6_0 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x6_1 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x6_2 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x6_3 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x6_4 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x6_5 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x6_6 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x7_0 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x7_1 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x7_2 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x7_3 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x7_4 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x7_5 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    x7_6 : {Wall, Free, Box, BoxOnTarget, Target, Agent, AgentOnTarget};
+    move : {Up, Down, Left, Right};
+  ASSIGN
+    init(move) := {Up, Down, Left, Right};
+    init(x0_0) := Free;
+    init(x0_1) := Free;
+    init(x0_2) := Wall;
+    init(x0_3) := Wall;
+    init(x0_4) := Wall;
+    init(x0_5) := Wall;
+    init(x0_6) := Wall;
+    init(x1_0) := Wall;
+    init(x1_1) := Wall;
+    init(x1_2) := Wall;
+    init(x1_3) := Free;
+    init(x1_4) := Free;
+    init(x1_5) := Free;
+    init(x1_6) := Wall;
+    init(x1_7) := Wall;
+    init(x2_0) := Wall;
+    init(x2_1) := Free;
+    init(x2_2) := Box;
+    init(x2_3) := Box;
+    init(x2_4) := Target;
+    init(x2_5) := Target;
+    init(x2_6) := Free;
+    init(x2_7) := Wall;
+    init(x3_0) := Wall;
+    init(x3_1) := Free;
+    init(x3_2) := Free;
+    init(x3_3) := Target;
+    init(x3_4) := Agent;
+    init(x3_5) := Wall;
+    init(x3_6) := Free;
+    init(x3_7) := Wall;
+    init(x4_0) := Wall;
+    init(x4_1) := Wall;
+    init(x4_2) := Free;
+    init(x4_3) := Wall;
+    init(x4_4) := Free;
+    init(x4_5) := Free;
+    init(x4_6) := Free;
+    init(x4_7) := Wall;
+    init(x5_0) := Free;
+    init(x5_1) := Wall;
+    init(x5_2) := Free;
+    init(x5_3) := Box;
+    init(x5_4) := BoxOnTarget;
+    init(x5_5) := Free;
+    init(x5_6) := Wall;
+    init(x5_7) := Wall;
+    init(x6_0) := Free;
+    init(x6_1) := Wall;
+    init(x6_2) := Wall;
+    init(x6_3) := Wall;
+    init(x6_4) := Free;
+    init(x6_5) := Free;
+    init(x6_6) := Wall;
+    init(x7_0) := Free;
+    init(x7_1) := Free;
+    init(x7_2) := Free;
+    init(x7_3) := Wall;
+    init(x7_4) := Wall;
+    init(x7_5) := Wall;
+    init(x7_6) := Wall;
+  next(x0_0) := case
+    x0_0 = Wall: Wall;
+    x0_0 = Free & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Left: Agent;
+    x0_0 = Free & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Up: Agent;
+    x0_0 = Free & (x0_1 = Box | x0_1 = BoxOnTarget) & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Left: Box;
+    x0_0 = Free & (x1_0 = Box | x1_0 = BoxOnTarget) & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Up: Box;
+    x0_0 = Agent & (x0_1 = Free | x0_1 = Target) & move = Right: Free;
+    x0_0 = Agent & (x1_0 = Free | x1_0 = Target) & move = Down: Free;
+    x0_0 = Agent &  (x0_1 = Box | x0_1 = BoxOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Right: Free;
+    x0_0 = Agent & (x1_0 = Box | x1_0 = BoxOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Down: Free;
+    x0_0 = Target & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x0_0 = Target & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x0_0 = Target & (x0_1 = Box | x0_1 = BoxOnTarget) & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x0_0 = Target & (x1_0 = Box | x1_0 = BoxOnTarget) & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x0_0 = AgentOnTarget & (x0_1 = Free | x0_1 = Target) & move = Right: Target;
+    x0_0 = AgentOnTarget & (x1_0 = Free | x1_0 = Target) & move = Down: Target;
+    TRUE : x0_0;
+  esac;
+  next(x0_1) := case
+    x0_1 = Wall: Wall;
+    x0_1 = Free & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Left: Agent;
+    x0_1 = Free & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Up: Agent;
+    x0_1 = Free & (x0_0 = Agent | x0_0 = AgentOnTarget) & move = Right : Agent;
+    x0_1 = Free & (x0_2 = Box | x0_2 = BoxOnTarget) & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Left: Box;
+    x0_1 = Free & (x1_1 = Box | x1_1 = BoxOnTarget) & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Up: Box;
+    x0_1 = Agent & (x0_2 = Free | x0_2 = Target) & move = Right: Free;
+    x0_1 = Agent & (x1_1 = Free | x1_1 = Target) & move = Down: Free;
+    x0_1 = Agent & (x0_0 = Free | x0_0 = Target) & move = Left : Free;
+    x0_1 = Agent &  (x0_2 = Box | x0_2 = BoxOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Right: Free;
+    x0_1 = Agent & (x1_1 = Box | x1_1 = BoxOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Down: Free;
+    x0_1 = Box & (x0_2 = Agent | x0_2 = AgentOnTarget) & (x0_0 = Free | x0_0 = Target) & move = Left: Agent;
+    x0_1 = Box & (x0_0 = Agent | x0_0 = AgentOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Right : Agent;
+    x0_1 = Target & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x0_1 = Target & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x0_1 = Target & (x0_0 = Agent | x0_0 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x0_1 = Target & (x0_2 = Box | x0_2 = BoxOnTarget) & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x0_1 = Target & (x1_1 = Box | x1_1 = BoxOnTarget) & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x0_1 = AgentOnTarget & (x0_2 = Free | x0_2 = Target) & move = Right: Target;
+    x0_1 = AgentOnTarget & (x1_1 = Free | x1_1 = Target) & move = Down: Target;
+    x0_1 = AgentOnTarget & (x0_0 = Free | x0_0 = Target) & move = Left : Target;
+    x0_1 = BoxOnTarget & (x0_2 = Agent | x0_2 = AgentOnTarget) & (x0_0 = Free | x0_0 = Target) & move = Left: AgentOnTarget;
+    x0_1 = BoxOnTarget & (x0_0 = Agent | x0_0 = AgentOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Right : AgentOnTarget;
+    TRUE : x0_1;
+  esac;
+  next(x0_2) := case
+    x0_2 = Wall: Wall;
+    x0_2 = Free & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Left: Agent;
+    x0_2 = Free & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Up: Agent;
+    x0_2 = Free & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Right : Agent;
+    x0_2 = Free & (x0_3 = Box | x0_3 = BoxOnTarget) & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Left: Box;
+    x0_2 = Free & (x1_2 = Box | x1_2 = BoxOnTarget) & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Up: Box;
+    x0_2 = Free & (x0_1 = Box | x0_1 = BoxOnTarget) & (x0_0 = Agent | x0_0 = AgentOnTarget) & move = Right : Box;
+    x0_2 = Agent & (x0_3 = Free | x0_3 = Target) & move = Right: Free;
+    x0_2 = Agent & (x1_2 = Free | x1_2 = Target) & move = Down: Free;
+    x0_2 = Agent & (x0_1 = Free | x0_1 = Target) & move = Left : Free;
+    x0_2 = Agent &  (x0_3 = Box | x0_3 = BoxOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Right: Free;
+    x0_2 = Agent & (x1_2 = Box | x1_2 = BoxOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Down: Free;
+    x0_2 = Agent & (x0_1 = Box | x0_1 = BoxOnTarget) & (x0_0 = Free | x0_0 = Target) & move = Left: Free;
+    x0_2 = Box & (x0_3 = Agent | x0_3 = AgentOnTarget) & (x0_1 = Free | x0_1 = Target) & move = Left: Agent;
+    x0_2 = Box & (x0_1 = Agent | x0_1 = AgentOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Right : Agent;
+    x0_2 = Target & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x0_2 = Target & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x0_2 = Target & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x0_2 = Target & (x0_3 = Box | x0_3 = BoxOnTarget) & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x0_2 = Target & (x1_2 = Box | x1_2 = BoxOnTarget) & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x0_2 = Target & (x0_1 = Box | x0_1 = BoxOnTarget) & (x0_0 = Agent | x0_0 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x0_2 = AgentOnTarget & (x0_3 = Free | x0_3 = Target) & move = Right: Target;
+    x0_2 = AgentOnTarget & (x1_2 = Free | x1_2 = Target) & move = Down: Target;
+    x0_2 = AgentOnTarget & (x0_1 = Free | x0_1 = Target) & move = Left : Target;
+    x0_2 = BoxOnTarget & (x0_3 = Agent | x0_3 = AgentOnTarget) & (x0_1 = Free | x0_1 = Target) & move = Left: AgentOnTarget;
+    x0_2 = BoxOnTarget & (x0_1 = Agent | x0_1 = AgentOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Right : AgentOnTarget;
+    TRUE : x0_2;
+  esac;
+  next(x0_3) := case
+    x0_3 = Wall: Wall;
+    x0_3 = Free & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Left: Agent;
+    x0_3 = Free & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Up: Agent;
+    x0_3 = Free & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Right : Agent;
+    x0_3 = Free & (x0_4 = Box | x0_4 = BoxOnTarget) & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Left: Box;
+    x0_3 = Free & (x1_3 = Box | x1_3 = BoxOnTarget) & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Up: Box;
+    x0_3 = Free & (x0_2 = Box | x0_2 = BoxOnTarget) & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Right : Box;
+    x0_3 = Agent & (x0_4 = Free | x0_4 = Target) & move = Right: Free;
+    x0_3 = Agent & (x1_3 = Free | x1_3 = Target) & move = Down: Free;
+    x0_3 = Agent & (x0_2 = Free | x0_2 = Target) & move = Left : Free;
+    x0_3 = Agent &  (x0_4 = Box | x0_4 = BoxOnTarget) & (x0_5 = Free | x0_5 = Target) & move = Right: Free;
+    x0_3 = Agent & (x1_3 = Box | x1_3 = BoxOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Down: Free;
+    x0_3 = Agent & (x0_2 = Box | x0_2 = BoxOnTarget) & (x0_1 = Free | x0_1 = Target) & move = Left: Free;
+    x0_3 = Box & (x0_4 = Agent | x0_4 = AgentOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Left: Agent;
+    x0_3 = Box & (x0_2 = Agent | x0_2 = AgentOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Right : Agent;
+    x0_3 = Target & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x0_3 = Target & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x0_3 = Target & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x0_3 = Target & (x0_4 = Box | x0_4 = BoxOnTarget) & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x0_3 = Target & (x1_3 = Box | x1_3 = BoxOnTarget) & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x0_3 = Target & (x0_2 = Box | x0_2 = BoxOnTarget) & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x0_3 = AgentOnTarget & (x0_4 = Free | x0_4 = Target) & move = Right: Target;
+    x0_3 = AgentOnTarget & (x1_3 = Free | x1_3 = Target) & move = Down: Target;
+    x0_3 = AgentOnTarget & (x0_2 = Free | x0_2 = Target) & move = Left : Target;
+    x0_3 = BoxOnTarget & (x0_4 = Agent | x0_4 = AgentOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Left: AgentOnTarget;
+    x0_3 = BoxOnTarget & (x0_2 = Agent | x0_2 = AgentOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Right : AgentOnTarget;
+    TRUE : x0_3;
+  esac;
+  next(x0_4) := case
+    x0_4 = Wall: Wall;
+    x0_4 = Free & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Left: Agent;
+    x0_4 = Free & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Up: Agent;
+    x0_4 = Free & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Right : Agent;
+    x0_4 = Free & (x0_5 = Box | x0_5 = BoxOnTarget) & (x0_6 = Agent | x0_6 = AgentOnTarget) & move = Left: Box;
+    x0_4 = Free & (x1_4 = Box | x1_4 = BoxOnTarget) & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Up: Box;
+    x0_4 = Free & (x0_3 = Box | x0_3 = BoxOnTarget) & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Right : Box;
+    x0_4 = Agent & (x0_5 = Free | x0_5 = Target) & move = Right: Free;
+    x0_4 = Agent & (x1_4 = Free | x1_4 = Target) & move = Down: Free;
+    x0_4 = Agent & (x0_3 = Free | x0_3 = Target) & move = Left : Free;
+    x0_4 = Agent &  (x0_5 = Box | x0_5 = BoxOnTarget) & (x0_6 = Free | x0_6 = Target) & move = Right: Free;
+    x0_4 = Agent & (x1_4 = Box | x1_4 = BoxOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Down: Free;
+    x0_4 = Agent & (x0_3 = Box | x0_3 = BoxOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Left: Free;
+    x0_4 = Box & (x0_5 = Agent | x0_5 = AgentOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Left: Agent;
+    x0_4 = Box & (x0_3 = Agent | x0_3 = AgentOnTarget) & (x0_5 = Free | x0_5 = Target) & move = Right : Agent;
+    x0_4 = Target & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x0_4 = Target & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x0_4 = Target & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x0_4 = Target & (x0_5 = Box | x0_5 = BoxOnTarget) & (x0_6 = Agent | x0_6 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x0_4 = Target & (x1_4 = Box | x1_4 = BoxOnTarget) & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x0_4 = Target & (x0_3 = Box | x0_3 = BoxOnTarget) & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x0_4 = AgentOnTarget & (x0_5 = Free | x0_5 = Target) & move = Right: Target;
+    x0_4 = AgentOnTarget & (x1_4 = Free | x1_4 = Target) & move = Down: Target;
+    x0_4 = AgentOnTarget & (x0_3 = Free | x0_3 = Target) & move = Left : Target;
+    x0_4 = BoxOnTarget & (x0_5 = Agent | x0_5 = AgentOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Left: AgentOnTarget;
+    x0_4 = BoxOnTarget & (x0_3 = Agent | x0_3 = AgentOnTarget) & (x0_5 = Free | x0_5 = Target) & move = Right : AgentOnTarget;
+    TRUE : x0_4;
+  esac;
+  next(x0_5) := case
+    x0_5 = Wall: Wall;
+    x0_5 = Free & (x0_6 = Agent | x0_6 = AgentOnTarget) & move = Left: Agent;
+    x0_5 = Free & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Up: Agent;
+    x0_5 = Free & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Right : Agent;
+    x0_5 = Free & (x1_5 = Box | x1_5 = BoxOnTarget) & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Up: Box;
+    x0_5 = Free & (x0_4 = Box | x0_4 = BoxOnTarget) & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Right : Box;
+    x0_5 = Agent & (x0_6 = Free | x0_6 = Target) & move = Right: Free;
+    x0_5 = Agent & (x1_5 = Free | x1_5 = Target) & move = Down: Free;
+    x0_5 = Agent & (x0_4 = Free | x0_4 = Target) & move = Left : Free;
+    x0_5 = Agent & (x1_5 = Box | x1_5 = BoxOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Down: Free;
+    x0_5 = Agent & (x0_4 = Box | x0_4 = BoxOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Left: Free;
+    x0_5 = Box & (x0_6 = Agent | x0_6 = AgentOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Left: Agent;
+    x0_5 = Box & (x0_4 = Agent | x0_4 = AgentOnTarget) & (x0_6 = Free | x0_6 = Target) & move = Right : Agent;
+    x0_5 = Target & (x0_6 = Agent | x0_6 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x0_5 = Target & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x0_5 = Target & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x0_5 = Target & (x1_5 = Box | x1_5 = BoxOnTarget) & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x0_5 = Target & (x0_4 = Box | x0_4 = BoxOnTarget) & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x0_5 = AgentOnTarget & (x0_6 = Free | x0_6 = Target) & move = Right: Target;
+    x0_5 = AgentOnTarget & (x1_5 = Free | x1_5 = Target) & move = Down: Target;
+    x0_5 = AgentOnTarget & (x0_4 = Free | x0_4 = Target) & move = Left : Target;
+    x0_5 = BoxOnTarget & (x0_6 = Agent | x0_6 = AgentOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Left: AgentOnTarget;
+    x0_5 = BoxOnTarget & (x0_4 = Agent | x0_4 = AgentOnTarget) & (x0_6 = Free | x0_6 = Target) & move = Right : AgentOnTarget;
+    TRUE : x0_5;
+  esac;
+  next(x0_6) := case
+    x0_6 = Wall: Wall;
+    x0_6 = Free & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Up: Agent;
+    x0_6 = Free & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Right : Agent;
+    x0_6 = Free & (x1_6 = Box | x1_6 = BoxOnTarget) & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Up: Box;
+    x0_6 = Free & (x0_5 = Box | x0_5 = BoxOnTarget) & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Right : Box;
+    x0_6 = Agent & (x1_6 = Free | x1_6 = Target) & move = Down: Free;
+    x0_6 = Agent & (x0_5 = Free | x0_5 = Target) & move = Left : Free;
+    x0_6 = Agent & (x1_6 = Box | x1_6 = BoxOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Down: Free;
+    x0_6 = Agent & (x0_5 = Box | x0_5 = BoxOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Left: Free;
+    x0_6 = Target & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x0_6 = Target & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x0_6 = Target & (x1_6 = Box | x1_6 = BoxOnTarget) & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x0_6 = Target & (x0_5 = Box | x0_5 = BoxOnTarget) & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x0_6 = AgentOnTarget & (x1_6 = Free | x1_6 = Target) & move = Down: Target;
+    x0_6 = AgentOnTarget & (x0_5 = Free | x0_5 = Target) & move = Left : Target;
+    TRUE : x0_6;
+  esac;
+  next(x1_0) := case
+    x1_0 = Wall: Wall;
+    x1_0 = Free & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Left: Agent;
+    x1_0 = Free & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Up: Agent;
+    x1_0 = Free & (x0_0 = Agent | x0_0 = AgentOnTarget) & move = Down : Agent;
+    x1_0 = Free & (x1_1 = Box | x1_1 = BoxOnTarget) & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Left: Box;
+    x1_0 = Free & (x2_0 = Box | x2_0 = BoxOnTarget) & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Up: Box;
+    x1_0 = Agent & (x1_1 = Free | x1_1 = Target) & move = Right: Free;
+    x1_0 = Agent & (x2_0 = Free | x2_0 = Target) & move = Down: Free;
+    x1_0 = Agent & (x0_0= Free | x0_0 = Target) & move = Up : Free;
+    x1_0 = Agent &  (x1_1 = Box | x1_1 = BoxOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Right: Free;
+    x1_0 = Agent & (x2_0 = Box | x2_0 = BoxOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Down: Free;
+    x1_0 = Box & (x2_0 = Agent | x2_0 = AgentOnTarget) & (x0_0 = Free | x0_0 = Target) & move = Up: Agent;
+    x1_0 = Box & (x0_0 = Agent | x0_0 = AgentOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Down : Agent;
+    x1_0 = Target & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x1_0 = Target & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x1_0 = Target & (x0_0 = Agent | x0_0 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x1_0 = Target & (x1_1 = Box | x1_1 = BoxOnTarget) & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x1_0 = Target & (x2_0 = Box | x2_0 = BoxOnTarget) & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x1_0 = AgentOnTarget & (x1_1 = Free | x1_1 = Target) & move = Right: Target;
+    x1_0 = AgentOnTarget & (x2_0 = Free | x2_0 = Target) & move = Down: Target;
+    x1_0 = AgentOnTarget & (x0_0 = Free | x0_0 = Target) & move = Up : Target;
+    x1_0 = BoxOnTarget & (x2_0 = Agent | x2_0 = AgentOnTarget) & (x0_0 = Free | x0_0 = Target) & move = Up: AgentOnTarget;
+    x1_0 = BoxOnTarget & (x0_0 = Agent | x0_0 = AgentOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Down : AgentOnTarget;
+    TRUE : x1_0;
+  esac;
+  next(x1_1) := case
+    x1_1 = Wall: Wall;
+    x1_1 = Free & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Left: Agent;
+    x1_1 = Free & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Up: Agent;
+    x1_1 = Free & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Right : Agent;
+    x1_1 = Free & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Down : Agent;
+    x1_1 = Free & (x1_2 = Box | x1_2 = BoxOnTarget) & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Left: Box;
+    x1_1 = Free & (x2_1 = Box | x2_1 = BoxOnTarget) & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Up: Box;
+    x1_1 = Agent & (x1_2 = Free | x1_2 = Target) & move = Right: Free;
+    x1_1 = Agent & (x2_1 = Free | x2_1 = Target) & move = Down: Free;
+    x1_1 = Agent & (x1_0 = Free | x1_0 = Target) & move = Left : Free;
+    x1_1 = Agent & (x0_1= Free | x0_1 = Target) & move = Up : Free;
+    x1_1 = Agent &  (x1_2 = Box | x1_2 = BoxOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Right: Free;
+    x1_1 = Agent & (x2_1 = Box | x2_1 = BoxOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Down: Free;
+    x1_1 = Box & (x1_2 = Agent | x1_2 = AgentOnTarget) & (x1_0 = Free | x1_0 = Target) & move = Left: Agent;
+    x1_1 = Box & (x2_1 = Agent | x2_1 = AgentOnTarget) & (x0_1 = Free | x0_1 = Target) & move = Up: Agent;
+    x1_1 = Box & (x1_0 = Agent | x1_0 = AgentOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Right : Agent;
+    x1_1 = Box & (x0_1 = Agent | x0_1 = AgentOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Down : Agent;
+    x1_1 = Target & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x1_1 = Target & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x1_1 = Target & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x1_1 = Target & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x1_1 = Target & (x1_2 = Box | x1_2 = BoxOnTarget) & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x1_1 = Target & (x2_1 = Box | x2_1 = BoxOnTarget) & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x1_1 = AgentOnTarget & (x1_2 = Free | x1_2 = Target) & move = Right: Target;
+    x1_1 = AgentOnTarget & (x2_1 = Free | x2_1 = Target) & move = Down: Target;
+    x1_1 = AgentOnTarget & (x1_0 = Free | x1_0 = Target) & move = Left : Target;
+    x1_1 = AgentOnTarget & (x0_1 = Free | x0_1 = Target) & move = Up : Target;
+    x1_1 = BoxOnTarget & (x1_2 = Agent | x1_2 = AgentOnTarget) & (x1_0 = Free | x1_0 = Target) & move = Left: AgentOnTarget;
+    x1_1 = BoxOnTarget & (x2_1 = Agent | x2_1 = AgentOnTarget) & (x0_1 = Free | x0_1 = Target) & move = Up: AgentOnTarget;
+    x1_1 = BoxOnTarget & (x1_0 = Agent | x1_0 = AgentOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Right : AgentOnTarget;
+    x1_1 = BoxOnTarget & (x0_1 = Agent | x0_1 = AgentOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Down : AgentOnTarget;
+    TRUE : x1_1;
+  esac;
+  next(x1_2) := case
+    x1_2 = Wall: Wall;
+    x1_2 = Free & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Left: Agent;
+    x1_2 = Free & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Up: Agent;
+    x1_2 = Free & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Right : Agent;
+    x1_2 = Free & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Down : Agent;
+    x1_2 = Free & (x1_3 = Box | x1_3 = BoxOnTarget) & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Left: Box;
+    x1_2 = Free & (x2_2 = Box | x2_2 = BoxOnTarget) & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Up: Box;
+    x1_2 = Free & (x1_1 = Box | x1_1 = BoxOnTarget) & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Right : Box;
+    x1_2 = Agent & (x1_3 = Free | x1_3 = Target) & move = Right: Free;
+    x1_2 = Agent & (x2_2 = Free | x2_2 = Target) & move = Down: Free;
+    x1_2 = Agent & (x1_1 = Free | x1_1 = Target) & move = Left : Free;
+    x1_2 = Agent & (x0_2= Free | x0_2 = Target) & move = Up : Free;
+    x1_2 = Agent &  (x1_3 = Box | x1_3 = BoxOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Right: Free;
+    x1_2 = Agent & (x2_2 = Box | x2_2 = BoxOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Down: Free;
+    x1_2 = Agent & (x1_1 = Box | x1_1 = BoxOnTarget) & (x1_0 = Free | x1_0 = Target) & move = Left: Free;
+    x1_2 = Box & (x1_3 = Agent | x1_3 = AgentOnTarget) & (x1_1 = Free | x1_1 = Target) & move = Left: Agent;
+    x1_2 = Box & (x2_2 = Agent | x2_2 = AgentOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Up: Agent;
+    x1_2 = Box & (x1_1 = Agent | x1_1 = AgentOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Right : Agent;
+    x1_2 = Box & (x0_2 = Agent | x0_2 = AgentOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Down : Agent;
+    x1_2 = Target & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x1_2 = Target & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x1_2 = Target & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x1_2 = Target & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x1_2 = Target & (x1_3 = Box | x1_3 = BoxOnTarget) & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x1_2 = Target & (x2_2 = Box | x2_2 = BoxOnTarget) & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x1_2 = Target & (x1_1 = Box | x1_1 = BoxOnTarget) & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x1_2 = AgentOnTarget & (x1_3 = Free | x1_3 = Target) & move = Right: Target;
+    x1_2 = AgentOnTarget & (x2_2 = Free | x2_2 = Target) & move = Down: Target;
+    x1_2 = AgentOnTarget & (x1_1 = Free | x1_1 = Target) & move = Left : Target;
+    x1_2 = AgentOnTarget & (x0_2 = Free | x0_2 = Target) & move = Up : Target;
+    x1_2 = BoxOnTarget & (x1_3 = Agent | x1_3 = AgentOnTarget) & (x1_1 = Free | x1_1 = Target) & move = Left: AgentOnTarget;
+    x1_2 = BoxOnTarget & (x2_2 = Agent | x2_2 = AgentOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Up: AgentOnTarget;
+    x1_2 = BoxOnTarget & (x1_1 = Agent | x1_1 = AgentOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Right : AgentOnTarget;
+    x1_2 = BoxOnTarget & (x0_2 = Agent | x0_2 = AgentOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Down : AgentOnTarget;
+    TRUE : x1_2;
+  esac;
+  next(x1_3) := case
+    x1_3 = Wall: Wall;
+    x1_3 = Free & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Left: Agent;
+    x1_3 = Free & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Up: Agent;
+    x1_3 = Free & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Right : Agent;
+    x1_3 = Free & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Down : Agent;
+    x1_3 = Free & (x1_4 = Box | x1_4 = BoxOnTarget) & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Left: Box;
+    x1_3 = Free & (x2_3 = Box | x2_3 = BoxOnTarget) & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Up: Box;
+    x1_3 = Free & (x1_2 = Box | x1_2 = BoxOnTarget) & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Right : Box;
+    x1_3 = Agent & (x1_4 = Free | x1_4 = Target) & move = Right: Free;
+    x1_3 = Agent & (x2_3 = Free | x2_3 = Target) & move = Down: Free;
+    x1_3 = Agent & (x1_2 = Free | x1_2 = Target) & move = Left : Free;
+    x1_3 = Agent & (x0_3= Free | x0_3 = Target) & move = Up : Free;
+    x1_3 = Agent &  (x1_4 = Box | x1_4 = BoxOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Right: Free;
+    x1_3 = Agent & (x2_3 = Box | x2_3 = BoxOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Down: Free;
+    x1_3 = Agent & (x1_2 = Box | x1_2 = BoxOnTarget) & (x1_1 = Free | x1_1 = Target) & move = Left: Free;
+    x1_3 = Box & (x1_4 = Agent | x1_4 = AgentOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Left: Agent;
+    x1_3 = Box & (x2_3 = Agent | x2_3 = AgentOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Up: Agent;
+    x1_3 = Box & (x1_2 = Agent | x1_2 = AgentOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Right : Agent;
+    x1_3 = Box & (x0_3 = Agent | x0_3 = AgentOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Down : Agent;
+    x1_3 = Target & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x1_3 = Target & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x1_3 = Target & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x1_3 = Target & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x1_3 = Target & (x1_4 = Box | x1_4 = BoxOnTarget) & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x1_3 = Target & (x2_3 = Box | x2_3 = BoxOnTarget) & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x1_3 = Target & (x1_2 = Box | x1_2 = BoxOnTarget) & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x1_3 = AgentOnTarget & (x1_4 = Free | x1_4 = Target) & move = Right: Target;
+    x1_3 = AgentOnTarget & (x2_3 = Free | x2_3 = Target) & move = Down: Target;
+    x1_3 = AgentOnTarget & (x1_2 = Free | x1_2 = Target) & move = Left : Target;
+    x1_3 = AgentOnTarget & (x0_3 = Free | x0_3 = Target) & move = Up : Target;
+    x1_3 = BoxOnTarget & (x1_4 = Agent | x1_4 = AgentOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Left: AgentOnTarget;
+    x1_3 = BoxOnTarget & (x2_3 = Agent | x2_3 = AgentOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Up: AgentOnTarget;
+    x1_3 = BoxOnTarget & (x1_2 = Agent | x1_2 = AgentOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Right : AgentOnTarget;
+    x1_3 = BoxOnTarget & (x0_3 = Agent | x0_3 = AgentOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Down : AgentOnTarget;
+    TRUE : x1_3;
+  esac;
+  next(x1_4) := case
+    x1_4 = Wall: Wall;
+    x1_4 = Free & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Left: Agent;
+    x1_4 = Free & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Up: Agent;
+    x1_4 = Free & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Right : Agent;
+    x1_4 = Free & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Down : Agent;
+    x1_4 = Free & (x1_5 = Box | x1_5 = BoxOnTarget) & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Left: Box;
+    x1_4 = Free & (x2_4 = Box | x2_4 = BoxOnTarget) & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Up: Box;
+    x1_4 = Free & (x1_3 = Box | x1_3 = BoxOnTarget) & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Right : Box;
+    x1_4 = Agent & (x1_5 = Free | x1_5 = Target) & move = Right: Free;
+    x1_4 = Agent & (x2_4 = Free | x2_4 = Target) & move = Down: Free;
+    x1_4 = Agent & (x1_3 = Free | x1_3 = Target) & move = Left : Free;
+    x1_4 = Agent & (x0_4= Free | x0_4 = Target) & move = Up : Free;
+    x1_4 = Agent &  (x1_5 = Box | x1_5 = BoxOnTarget) & (x1_6 = Free | x1_6 = Target) & move = Right: Free;
+    x1_4 = Agent & (x2_4 = Box | x2_4 = BoxOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Down: Free;
+    x1_4 = Agent & (x1_3 = Box | x1_3 = BoxOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Left: Free;
+    x1_4 = Box & (x1_5 = Agent | x1_5 = AgentOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Left: Agent;
+    x1_4 = Box & (x2_4 = Agent | x2_4 = AgentOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Up: Agent;
+    x1_4 = Box & (x1_3 = Agent | x1_3 = AgentOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Right : Agent;
+    x1_4 = Box & (x0_4 = Agent | x0_4 = AgentOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Down : Agent;
+    x1_4 = Target & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x1_4 = Target & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x1_4 = Target & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x1_4 = Target & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x1_4 = Target & (x1_5 = Box | x1_5 = BoxOnTarget) & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x1_4 = Target & (x2_4 = Box | x2_4 = BoxOnTarget) & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x1_4 = Target & (x1_3 = Box | x1_3 = BoxOnTarget) & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x1_4 = AgentOnTarget & (x1_5 = Free | x1_5 = Target) & move = Right: Target;
+    x1_4 = AgentOnTarget & (x2_4 = Free | x2_4 = Target) & move = Down: Target;
+    x1_4 = AgentOnTarget & (x1_3 = Free | x1_3 = Target) & move = Left : Target;
+    x1_4 = AgentOnTarget & (x0_4 = Free | x0_4 = Target) & move = Up : Target;
+    x1_4 = BoxOnTarget & (x1_5 = Agent | x1_5 = AgentOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Left: AgentOnTarget;
+    x1_4 = BoxOnTarget & (x2_4 = Agent | x2_4 = AgentOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Up: AgentOnTarget;
+    x1_4 = BoxOnTarget & (x1_3 = Agent | x1_3 = AgentOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Right : AgentOnTarget;
+    x1_4 = BoxOnTarget & (x0_4 = Agent | x0_4 = AgentOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Down : AgentOnTarget;
+    TRUE : x1_4;
+  esac;
+  next(x1_5) := case
+    x1_5 = Wall: Wall;
+    x1_5 = Free & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Left: Agent;
+    x1_5 = Free & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Up: Agent;
+    x1_5 = Free & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Right : Agent;
+    x1_5 = Free & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Down : Agent;
+    x1_5 = Free & (x1_6 = Box | x1_6 = BoxOnTarget) & (x1_7 = Agent | x1_7 = AgentOnTarget) & move = Left: Box;
+    x1_5 = Free & (x2_5 = Box | x2_5 = BoxOnTarget) & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Up: Box;
+    x1_5 = Free & (x1_4 = Box | x1_4 = BoxOnTarget) & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Right : Box;
+    x1_5 = Agent & (x1_6 = Free | x1_6 = Target) & move = Right: Free;
+    x1_5 = Agent & (x2_5 = Free | x2_5 = Target) & move = Down: Free;
+    x1_5 = Agent & (x1_4 = Free | x1_4 = Target) & move = Left : Free;
+    x1_5 = Agent & (x0_5= Free | x0_5 = Target) & move = Up : Free;
+    x1_5 = Agent &  (x1_6 = Box | x1_6 = BoxOnTarget) & (x1_7 = Free | x1_7 = Target) & move = Right: Free;
+    x1_5 = Agent & (x2_5 = Box | x2_5 = BoxOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Down: Free;
+    x1_5 = Agent & (x1_4 = Box | x1_4 = BoxOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Left: Free;
+    x1_5 = Box & (x1_6 = Agent | x1_6 = AgentOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Left: Agent;
+    x1_5 = Box & (x2_5 = Agent | x2_5 = AgentOnTarget) & (x0_5 = Free | x0_5 = Target) & move = Up: Agent;
+    x1_5 = Box & (x1_4 = Agent | x1_4 = AgentOnTarget) & (x1_6 = Free | x1_6 = Target) & move = Right : Agent;
+    x1_5 = Box & (x0_5 = Agent | x0_5 = AgentOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Down : Agent;
+    x1_5 = Target & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x1_5 = Target & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x1_5 = Target & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x1_5 = Target & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x1_5 = Target & (x1_6 = Box | x1_6 = BoxOnTarget) & (x1_7 = Agent | x1_7 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x1_5 = Target & (x2_5 = Box | x2_5 = BoxOnTarget) & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x1_5 = Target & (x1_4 = Box | x1_4 = BoxOnTarget) & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x1_5 = AgentOnTarget & (x1_6 = Free | x1_6 = Target) & move = Right: Target;
+    x1_5 = AgentOnTarget & (x2_5 = Free | x2_5 = Target) & move = Down: Target;
+    x1_5 = AgentOnTarget & (x1_4 = Free | x1_4 = Target) & move = Left : Target;
+    x1_5 = AgentOnTarget & (x0_5 = Free | x0_5 = Target) & move = Up : Target;
+    x1_5 = BoxOnTarget & (x1_6 = Agent | x1_6 = AgentOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Left: AgentOnTarget;
+    x1_5 = BoxOnTarget & (x2_5 = Agent | x2_5 = AgentOnTarget) & (x0_5 = Free | x0_5 = Target) & move = Up: AgentOnTarget;
+    x1_5 = BoxOnTarget & (x1_4 = Agent | x1_4 = AgentOnTarget) & (x1_6 = Free | x1_6 = Target) & move = Right : AgentOnTarget;
+    x1_5 = BoxOnTarget & (x0_5 = Agent | x0_5 = AgentOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Down : AgentOnTarget;
+    TRUE : x1_5;
+  esac;
+  next(x1_6) := case
+    x1_6 = Wall: Wall;
+    x1_6 = Free & (x1_7 = Agent | x1_7 = AgentOnTarget) & move = Left: Agent;
+    x1_6 = Free & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Up: Agent;
+    x1_6 = Free & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Right : Agent;
+    x1_6 = Free & (x0_6 = Agent | x0_6 = AgentOnTarget) & move = Down : Agent;
+    x1_6 = Free & (x2_6 = Box | x2_6 = BoxOnTarget) & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Up: Box;
+    x1_6 = Free & (x1_5 = Box | x1_5 = BoxOnTarget) & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Right : Box;
+    x1_6 = Agent & (x1_7 = Free | x1_7 = Target) & move = Right: Free;
+    x1_6 = Agent & (x2_6 = Free | x2_6 = Target) & move = Down: Free;
+    x1_6 = Agent & (x1_5 = Free | x1_5 = Target) & move = Left : Free;
+    x1_6 = Agent & (x0_6= Free | x0_6 = Target) & move = Up : Free;
+    x1_6 = Agent & (x2_6 = Box | x2_6 = BoxOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Down: Free;
+    x1_6 = Agent & (x1_5 = Box | x1_5 = BoxOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Left: Free;
+    x1_6 = Box & (x1_7 = Agent | x1_7 = AgentOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Left: Agent;
+    x1_6 = Box & (x2_6 = Agent | x2_6 = AgentOnTarget) & (x0_6 = Free | x0_6 = Target) & move = Up: Agent;
+    x1_6 = Box & (x1_5 = Agent | x1_5 = AgentOnTarget) & (x1_7 = Free | x1_7 = Target) & move = Right : Agent;
+    x1_6 = Box & (x0_6 = Agent | x0_6 = AgentOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Down : Agent;
+    x1_6 = Target & (x1_7 = Agent | x1_7 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x1_6 = Target & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x1_6 = Target & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x1_6 = Target & (x0_6 = Agent | x0_6 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x1_6 = Target & (x2_6 = Box | x2_6 = BoxOnTarget) & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x1_6 = Target & (x1_5 = Box | x1_5 = BoxOnTarget) & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x1_6 = AgentOnTarget & (x1_7 = Free | x1_7 = Target) & move = Right: Target;
+    x1_6 = AgentOnTarget & (x2_6 = Free | x2_6 = Target) & move = Down: Target;
+    x1_6 = AgentOnTarget & (x1_5 = Free | x1_5 = Target) & move = Left : Target;
+    x1_6 = AgentOnTarget & (x0_6 = Free | x0_6 = Target) & move = Up : Target;
+    x1_6 = BoxOnTarget & (x1_7 = Agent | x1_7 = AgentOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Left: AgentOnTarget;
+    x1_6 = BoxOnTarget & (x2_6 = Agent | x2_6 = AgentOnTarget) & (x0_6 = Free | x0_6 = Target) & move = Up: AgentOnTarget;
+    x1_6 = BoxOnTarget & (x1_5 = Agent | x1_5 = AgentOnTarget) & (x1_7 = Free | x1_7 = Target) & move = Right : AgentOnTarget;
+    x1_6 = BoxOnTarget & (x0_6 = Agent | x0_6 = AgentOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Down : AgentOnTarget;
+    TRUE : x1_6;
+  esac;
+  next(x1_7) := case
+    x1_7 = Wall: Wall;
+    x1_7 = Free & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Up: Agent;
+    x1_7 = Free & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Right : Agent;
+    x1_7 = Free & (x2_7 = Box | x2_7 = BoxOnTarget) & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Up: Box;
+    x1_7 = Free & (x1_6 = Box | x1_6 = BoxOnTarget) & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Right : Box;
+    x1_7 = Agent & (x2_7 = Free | x2_7 = Target) & move = Down: Free;
+    x1_7 = Agent & (x1_6 = Free | x1_6 = Target) & move = Left : Free;
+    x1_7 = Agent & (x2_7 = Box | x2_7 = BoxOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Down: Free;
+    x1_7 = Agent & (x1_6 = Box | x1_6 = BoxOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Left: Free;
+    x1_7 = Target & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x1_7 = Target & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x1_7 = Target & (x2_7 = Box | x2_7 = BoxOnTarget) & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x1_7 = Target & (x1_6 = Box | x1_6 = BoxOnTarget) & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x1_7 = AgentOnTarget & (x2_7 = Free | x2_7 = Target) & move = Down: Target;
+    x1_7 = AgentOnTarget & (x1_6 = Free | x1_6 = Target) & move = Left : Target;
+    TRUE : x1_7;
+  esac;
+  next(x2_0) := case
+    x2_0 = Wall: Wall;
+    x2_0 = Free & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Left: Agent;
+    x2_0 = Free & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Up: Agent;
+    x2_0 = Free & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Down : Agent;
+    x2_0 = Free & (x2_1 = Box | x2_1 = BoxOnTarget) & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Left: Box;
+    x2_0 = Free & (x3_0 = Box | x3_0 = BoxOnTarget) & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Up: Box;
+    x2_0 = Free & (x1_0 = Box | x1_0 = BoxOnTarget) & (x0_0 = Agent | x0_0 = AgentOnTarget) & move = Down : Box;
+    x2_0 = Agent & (x2_1 = Free | x2_1 = Target) & move = Right: Free;
+    x2_0 = Agent & (x3_0 = Free | x3_0 = Target) & move = Down: Free;
+    x2_0 = Agent & (x1_0= Free | x1_0 = Target) & move = Up : Free;
+    x2_0 = Agent &  (x2_1 = Box | x2_1 = BoxOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Right: Free;
+    x2_0 = Agent & (x3_0 = Box | x3_0 = BoxOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Down: Free;
+    x2_0 = Agent & (x1_0 = Box | x1_0 = BoxOnTarget) & (x0_0 = Free | x0_0 = Target) & move = Up: Free;
+    x2_0 = Box & (x3_0 = Agent | x3_0 = AgentOnTarget) & (x1_0 = Free | x1_0 = Target) & move = Up: Agent;
+    x2_0 = Box & (x1_0 = Agent | x1_0 = AgentOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Down : Agent;
+    x2_0 = Target & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x2_0 = Target & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x2_0 = Target & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x2_0 = Target & (x2_1 = Box | x2_1 = BoxOnTarget) & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x2_0 = Target & (x3_0 = Box | x3_0 = BoxOnTarget) & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x2_0 = Target & (x1_0 = Box | x1_0 = BoxOnTarget) & (x0_0 = Agent | x0_0 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x2_0 = AgentOnTarget & (x2_1 = Free | x2_1 = Target) & move = Right: Target;
+    x2_0 = AgentOnTarget & (x3_0 = Free | x3_0 = Target) & move = Down: Target;
+    x2_0 = AgentOnTarget & (x1_0 = Free | x1_0 = Target) & move = Up : Target;
+    x2_0 = BoxOnTarget & (x3_0 = Agent | x3_0 = AgentOnTarget) & (x1_0 = Free | x1_0 = Target) & move = Up: AgentOnTarget;
+    x2_0 = BoxOnTarget & (x1_0 = Agent | x1_0 = AgentOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Down : AgentOnTarget;
+    TRUE : x2_0;
+  esac;
+  next(x2_1) := case
+    x2_1 = Wall: Wall;
+    x2_1 = Free & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Left: Agent;
+    x2_1 = Free & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Up: Agent;
+    x2_1 = Free & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Right : Agent;
+    x2_1 = Free & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Down : Agent;
+    x2_1 = Free & (x2_2 = Box | x2_2 = BoxOnTarget) & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Left: Box;
+    x2_1 = Free & (x3_1 = Box | x3_1 = BoxOnTarget) & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Up: Box;
+    x2_1 = Free & (x1_1 = Box | x1_1 = BoxOnTarget) & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Down : Box;
+    x2_1 = Agent & (x2_2 = Free | x2_2 = Target) & move = Right: Free;
+    x2_1 = Agent & (x3_1 = Free | x3_1 = Target) & move = Down: Free;
+    x2_1 = Agent & (x2_0 = Free | x2_0 = Target) & move = Left : Free;
+    x2_1 = Agent & (x1_1= Free | x1_1 = Target) & move = Up : Free;
+    x2_1 = Agent &  (x2_2 = Box | x2_2 = BoxOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Right: Free;
+    x2_1 = Agent & (x3_1 = Box | x3_1 = BoxOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Down: Free;
+    x2_1 = Agent & (x1_1 = Box | x1_1 = BoxOnTarget) & (x0_1 = Free | x0_1 = Target) & move = Up: Free;
+    x2_1 = Box & (x2_2 = Agent | x2_2 = AgentOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Left: Agent;
+    x2_1 = Box & (x3_1 = Agent | x3_1 = AgentOnTarget) & (x1_1 = Free | x1_1 = Target) & move = Up: Agent;
+    x2_1 = Box & (x2_0 = Agent | x2_0 = AgentOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Right : Agent;
+    x2_1 = Box & (x1_1 = Agent | x1_1 = AgentOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Down : Agent;
+    x2_1 = Target & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x2_1 = Target & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x2_1 = Target & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x2_1 = Target & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x2_1 = Target & (x2_2 = Box | x2_2 = BoxOnTarget) & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x2_1 = Target & (x3_1 = Box | x3_1 = BoxOnTarget) & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x2_1 = Target & (x1_1 = Box | x1_1 = BoxOnTarget) & (x0_1 = Agent | x0_1 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x2_1 = AgentOnTarget & (x2_2 = Free | x2_2 = Target) & move = Right: Target;
+    x2_1 = AgentOnTarget & (x3_1 = Free | x3_1 = Target) & move = Down: Target;
+    x2_1 = AgentOnTarget & (x2_0 = Free | x2_0 = Target) & move = Left : Target;
+    x2_1 = AgentOnTarget & (x1_1 = Free | x1_1 = Target) & move = Up : Target;
+    x2_1 = BoxOnTarget & (x2_2 = Agent | x2_2 = AgentOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Left: AgentOnTarget;
+    x2_1 = BoxOnTarget & (x3_1 = Agent | x3_1 = AgentOnTarget) & (x1_1 = Free | x1_1 = Target) & move = Up: AgentOnTarget;
+    x2_1 = BoxOnTarget & (x2_0 = Agent | x2_0 = AgentOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Right : AgentOnTarget;
+    x2_1 = BoxOnTarget & (x1_1 = Agent | x1_1 = AgentOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Down : AgentOnTarget;
+    TRUE : x2_1;
+  esac;
+  next(x2_2) := case
+    x2_2 = Wall: Wall;
+    x2_2 = Free & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Left: Agent;
+    x2_2 = Free & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Up: Agent;
+    x2_2 = Free & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Right : Agent;
+    x2_2 = Free & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Down : Agent;
+    x2_2 = Free & (x2_3 = Box | x2_3 = BoxOnTarget) & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Left: Box;
+    x2_2 = Free & (x3_2 = Box | x3_2 = BoxOnTarget) & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Up: Box;
+    x2_2 = Free & (x2_1 = Box | x2_1 = BoxOnTarget) & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Right : Box;
+    x2_2 = Free & (x1_2 = Box | x1_2 = BoxOnTarget) & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Down : Box;
+    x2_2 = Agent & (x2_3 = Free | x2_3 = Target) & move = Right: Free;
+    x2_2 = Agent & (x3_2 = Free | x3_2 = Target) & move = Down: Free;
+    x2_2 = Agent & (x2_1 = Free | x2_1 = Target) & move = Left : Free;
+    x2_2 = Agent & (x1_2= Free | x1_2 = Target) & move = Up : Free;
+    x2_2 = Agent &  (x2_3 = Box | x2_3 = BoxOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Right: Free;
+    x2_2 = Agent & (x3_2 = Box | x3_2 = BoxOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Down: Free;
+    x2_2 = Agent & (x2_1 = Box | x2_1 = BoxOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Left: Free;
+    x2_2 = Agent & (x1_2 = Box | x1_2 = BoxOnTarget) & (x0_2 = Free | x0_2 = Target) & move = Up: Free;
+    x2_2 = Box & (x2_3 = Agent | x2_3 = AgentOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Left: Agent;
+    x2_2 = Box & (x3_2 = Agent | x3_2 = AgentOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Up: Agent;
+    x2_2 = Box & (x2_1 = Agent | x2_1 = AgentOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Right : Agent;
+    x2_2 = Box & (x1_2 = Agent | x1_2 = AgentOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Down : Agent;
+    x2_2 = Target & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x2_2 = Target & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x2_2 = Target & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x2_2 = Target & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x2_2 = Target & (x2_3 = Box | x2_3 = BoxOnTarget) & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x2_2 = Target & (x3_2 = Box | x3_2 = BoxOnTarget) & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x2_2 = Target & (x2_1 = Box | x2_1 = BoxOnTarget) & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x2_2 = Target & (x1_2 = Box | x1_2 = BoxOnTarget) & (x0_2 = Agent | x0_2 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x2_2 = AgentOnTarget & (x2_3 = Free | x2_3 = Target) & move = Right: Target;
+    x2_2 = AgentOnTarget & (x3_2 = Free | x3_2 = Target) & move = Down: Target;
+    x2_2 = AgentOnTarget & (x2_1 = Free | x2_1 = Target) & move = Left : Target;
+    x2_2 = AgentOnTarget & (x1_2 = Free | x1_2 = Target) & move = Up : Target;
+    x2_2 = BoxOnTarget & (x2_3 = Agent | x2_3 = AgentOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Left: AgentOnTarget;
+    x2_2 = BoxOnTarget & (x3_2 = Agent | x3_2 = AgentOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Up: AgentOnTarget;
+    x2_2 = BoxOnTarget & (x2_1 = Agent | x2_1 = AgentOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Right : AgentOnTarget;
+    x2_2 = BoxOnTarget & (x1_2 = Agent | x1_2 = AgentOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Down : AgentOnTarget;
+    TRUE : x2_2;
+  esac;
+  next(x2_3) := case
+    x2_3 = Wall: Wall;
+    x2_3 = Free & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Left: Agent;
+    x2_3 = Free & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Up: Agent;
+    x2_3 = Free & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Right : Agent;
+    x2_3 = Free & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Down : Agent;
+    x2_3 = Free & (x2_4 = Box | x2_4 = BoxOnTarget) & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Left: Box;
+    x2_3 = Free & (x3_3 = Box | x3_3 = BoxOnTarget) & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Up: Box;
+    x2_3 = Free & (x2_2 = Box | x2_2 = BoxOnTarget) & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Right : Box;
+    x2_3 = Free & (x1_3 = Box | x1_3 = BoxOnTarget) & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Down : Box;
+    x2_3 = Agent & (x2_4 = Free | x2_4 = Target) & move = Right: Free;
+    x2_3 = Agent & (x3_3 = Free | x3_3 = Target) & move = Down: Free;
+    x2_3 = Agent & (x2_2 = Free | x2_2 = Target) & move = Left : Free;
+    x2_3 = Agent & (x1_3= Free | x1_3 = Target) & move = Up : Free;
+    x2_3 = Agent &  (x2_4 = Box | x2_4 = BoxOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Right: Free;
+    x2_3 = Agent & (x3_3 = Box | x3_3 = BoxOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Down: Free;
+    x2_3 = Agent & (x2_2 = Box | x2_2 = BoxOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Left: Free;
+    x2_3 = Agent & (x1_3 = Box | x1_3 = BoxOnTarget) & (x0_3 = Free | x0_3 = Target) & move = Up: Free;
+    x2_3 = Box & (x2_4 = Agent | x2_4 = AgentOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Left: Agent;
+    x2_3 = Box & (x3_3 = Agent | x3_3 = AgentOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Up: Agent;
+    x2_3 = Box & (x2_2 = Agent | x2_2 = AgentOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Right : Agent;
+    x2_3 = Box & (x1_3 = Agent | x1_3 = AgentOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Down : Agent;
+    x2_3 = Target & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x2_3 = Target & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x2_3 = Target & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x2_3 = Target & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x2_3 = Target & (x2_4 = Box | x2_4 = BoxOnTarget) & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x2_3 = Target & (x3_3 = Box | x3_3 = BoxOnTarget) & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x2_3 = Target & (x2_2 = Box | x2_2 = BoxOnTarget) & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x2_3 = Target & (x1_3 = Box | x1_3 = BoxOnTarget) & (x0_3 = Agent | x0_3 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x2_3 = AgentOnTarget & (x2_4 = Free | x2_4 = Target) & move = Right: Target;
+    x2_3 = AgentOnTarget & (x3_3 = Free | x3_3 = Target) & move = Down: Target;
+    x2_3 = AgentOnTarget & (x2_2 = Free | x2_2 = Target) & move = Left : Target;
+    x2_3 = AgentOnTarget & (x1_3 = Free | x1_3 = Target) & move = Up : Target;
+    x2_3 = BoxOnTarget & (x2_4 = Agent | x2_4 = AgentOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Left: AgentOnTarget;
+    x2_3 = BoxOnTarget & (x3_3 = Agent | x3_3 = AgentOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Up: AgentOnTarget;
+    x2_3 = BoxOnTarget & (x2_2 = Agent | x2_2 = AgentOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Right : AgentOnTarget;
+    x2_3 = BoxOnTarget & (x1_3 = Agent | x1_3 = AgentOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Down : AgentOnTarget;
+    TRUE : x2_3;
+  esac;
+  next(x2_4) := case
+    x2_4 = Wall: Wall;
+    x2_4 = Free & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Left: Agent;
+    x2_4 = Free & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Up: Agent;
+    x2_4 = Free & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Right : Agent;
+    x2_4 = Free & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Down : Agent;
+    x2_4 = Free & (x2_5 = Box | x2_5 = BoxOnTarget) & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Left: Box;
+    x2_4 = Free & (x3_4 = Box | x3_4 = BoxOnTarget) & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Up: Box;
+    x2_4 = Free & (x2_3 = Box | x2_3 = BoxOnTarget) & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Right : Box;
+    x2_4 = Free & (x1_4 = Box | x1_4 = BoxOnTarget) & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Down : Box;
+    x2_4 = Agent & (x2_5 = Free | x2_5 = Target) & move = Right: Free;
+    x2_4 = Agent & (x3_4 = Free | x3_4 = Target) & move = Down: Free;
+    x2_4 = Agent & (x2_3 = Free | x2_3 = Target) & move = Left : Free;
+    x2_4 = Agent & (x1_4= Free | x1_4 = Target) & move = Up : Free;
+    x2_4 = Agent &  (x2_5 = Box | x2_5 = BoxOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Right: Free;
+    x2_4 = Agent & (x3_4 = Box | x3_4 = BoxOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Down: Free;
+    x2_4 = Agent & (x2_3 = Box | x2_3 = BoxOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Left: Free;
+    x2_4 = Agent & (x1_4 = Box | x1_4 = BoxOnTarget) & (x0_4 = Free | x0_4 = Target) & move = Up: Free;
+    x2_4 = Box & (x2_5 = Agent | x2_5 = AgentOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Left: Agent;
+    x2_4 = Box & (x3_4 = Agent | x3_4 = AgentOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Up: Agent;
+    x2_4 = Box & (x2_3 = Agent | x2_3 = AgentOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Right : Agent;
+    x2_4 = Box & (x1_4 = Agent | x1_4 = AgentOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Down : Agent;
+    x2_4 = Target & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x2_4 = Target & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x2_4 = Target & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x2_4 = Target & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x2_4 = Target & (x2_5 = Box | x2_5 = BoxOnTarget) & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x2_4 = Target & (x3_4 = Box | x3_4 = BoxOnTarget) & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x2_4 = Target & (x2_3 = Box | x2_3 = BoxOnTarget) & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x2_4 = Target & (x1_4 = Box | x1_4 = BoxOnTarget) & (x0_4 = Agent | x0_4 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x2_4 = AgentOnTarget & (x2_5 = Free | x2_5 = Target) & move = Right: Target;
+    x2_4 = AgentOnTarget & (x3_4 = Free | x3_4 = Target) & move = Down: Target;
+    x2_4 = AgentOnTarget & (x2_3 = Free | x2_3 = Target) & move = Left : Target;
+    x2_4 = AgentOnTarget & (x1_4 = Free | x1_4 = Target) & move = Up : Target;
+    x2_4 = BoxOnTarget & (x2_5 = Agent | x2_5 = AgentOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Left: AgentOnTarget;
+    x2_4 = BoxOnTarget & (x3_4 = Agent | x3_4 = AgentOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Up: AgentOnTarget;
+    x2_4 = BoxOnTarget & (x2_3 = Agent | x2_3 = AgentOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Right : AgentOnTarget;
+    x2_4 = BoxOnTarget & (x1_4 = Agent | x1_4 = AgentOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Down : AgentOnTarget;
+    TRUE : x2_4;
+  esac;
+  next(x2_5) := case
+    x2_5 = Wall: Wall;
+    x2_5 = Free & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Left: Agent;
+    x2_5 = Free & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Up: Agent;
+    x2_5 = Free & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Right : Agent;
+    x2_5 = Free & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Down : Agent;
+    x2_5 = Free & (x2_6 = Box | x2_6 = BoxOnTarget) & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Left: Box;
+    x2_5 = Free & (x3_5 = Box | x3_5 = BoxOnTarget) & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Up: Box;
+    x2_5 = Free & (x2_4 = Box | x2_4 = BoxOnTarget) & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Right : Box;
+    x2_5 = Free & (x1_5 = Box | x1_5 = BoxOnTarget) & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Down : Box;
+    x2_5 = Agent & (x2_6 = Free | x2_6 = Target) & move = Right: Free;
+    x2_5 = Agent & (x3_5 = Free | x3_5 = Target) & move = Down: Free;
+    x2_5 = Agent & (x2_4 = Free | x2_4 = Target) & move = Left : Free;
+    x2_5 = Agent & (x1_5= Free | x1_5 = Target) & move = Up : Free;
+    x2_5 = Agent &  (x2_6 = Box | x2_6 = BoxOnTarget) & (x2_7 = Free | x2_7 = Target) & move = Right: Free;
+    x2_5 = Agent & (x3_5 = Box | x3_5 = BoxOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Down: Free;
+    x2_5 = Agent & (x2_4 = Box | x2_4 = BoxOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Left: Free;
+    x2_5 = Agent & (x1_5 = Box | x1_5 = BoxOnTarget) & (x0_5 = Free | x0_5 = Target) & move = Up: Free;
+    x2_5 = Box & (x2_6 = Agent | x2_6 = AgentOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Left: Agent;
+    x2_5 = Box & (x3_5 = Agent | x3_5 = AgentOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Up: Agent;
+    x2_5 = Box & (x2_4 = Agent | x2_4 = AgentOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Right : Agent;
+    x2_5 = Box & (x1_5 = Agent | x1_5 = AgentOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Down : Agent;
+    x2_5 = Target & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x2_5 = Target & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x2_5 = Target & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x2_5 = Target & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x2_5 = Target & (x2_6 = Box | x2_6 = BoxOnTarget) & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x2_5 = Target & (x3_5 = Box | x3_5 = BoxOnTarget) & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x2_5 = Target & (x2_4 = Box | x2_4 = BoxOnTarget) & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x2_5 = Target & (x1_5 = Box | x1_5 = BoxOnTarget) & (x0_5 = Agent | x0_5 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x2_5 = AgentOnTarget & (x2_6 = Free | x2_6 = Target) & move = Right: Target;
+    x2_5 = AgentOnTarget & (x3_5 = Free | x3_5 = Target) & move = Down: Target;
+    x2_5 = AgentOnTarget & (x2_4 = Free | x2_4 = Target) & move = Left : Target;
+    x2_5 = AgentOnTarget & (x1_5 = Free | x1_5 = Target) & move = Up : Target;
+    x2_5 = BoxOnTarget & (x2_6 = Agent | x2_6 = AgentOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Left: AgentOnTarget;
+    x2_5 = BoxOnTarget & (x3_5 = Agent | x3_5 = AgentOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Up: AgentOnTarget;
+    x2_5 = BoxOnTarget & (x2_4 = Agent | x2_4 = AgentOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Right : AgentOnTarget;
+    x2_5 = BoxOnTarget & (x1_5 = Agent | x1_5 = AgentOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Down : AgentOnTarget;
+    TRUE : x2_5;
+  esac;
+  next(x2_6) := case
+    x2_6 = Wall: Wall;
+    x2_6 = Free & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Left: Agent;
+    x2_6 = Free & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Up: Agent;
+    x2_6 = Free & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Right : Agent;
+    x2_6 = Free & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Down : Agent;
+    x2_6 = Free & (x3_6 = Box | x3_6 = BoxOnTarget) & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Up: Box;
+    x2_6 = Free & (x2_5 = Box | x2_5 = BoxOnTarget) & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Right : Box;
+    x2_6 = Free & (x1_6 = Box | x1_6 = BoxOnTarget) & (x0_6 = Agent | x0_6 = AgentOnTarget) & move = Down : Box;
+    x2_6 = Agent & (x2_7 = Free | x2_7 = Target) & move = Right: Free;
+    x2_6 = Agent & (x3_6 = Free | x3_6 = Target) & move = Down: Free;
+    x2_6 = Agent & (x2_5 = Free | x2_5 = Target) & move = Left : Free;
+    x2_6 = Agent & (x1_6= Free | x1_6 = Target) & move = Up : Free;
+    x2_6 = Agent & (x3_6 = Box | x3_6 = BoxOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Down: Free;
+    x2_6 = Agent & (x2_5 = Box | x2_5 = BoxOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Left: Free;
+    x2_6 = Agent & (x1_6 = Box | x1_6 = BoxOnTarget) & (x0_6 = Free | x0_6 = Target) & move = Up: Free;
+    x2_6 = Box & (x2_7 = Agent | x2_7 = AgentOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Left: Agent;
+    x2_6 = Box & (x3_6 = Agent | x3_6 = AgentOnTarget) & (x1_6 = Free | x1_6 = Target) & move = Up: Agent;
+    x2_6 = Box & (x2_5 = Agent | x2_5 = AgentOnTarget) & (x2_7 = Free | x2_7 = Target) & move = Right : Agent;
+    x2_6 = Box & (x1_6 = Agent | x1_6 = AgentOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Down : Agent;
+    x2_6 = Target & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x2_6 = Target & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x2_6 = Target & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x2_6 = Target & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x2_6 = Target & (x3_6 = Box | x3_6 = BoxOnTarget) & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x2_6 = Target & (x2_5 = Box | x2_5 = BoxOnTarget) & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x2_6 = Target & (x1_6 = Box | x1_6 = BoxOnTarget) & (x0_6 = Agent | x0_6 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x2_6 = AgentOnTarget & (x2_7 = Free | x2_7 = Target) & move = Right: Target;
+    x2_6 = AgentOnTarget & (x3_6 = Free | x3_6 = Target) & move = Down: Target;
+    x2_6 = AgentOnTarget & (x2_5 = Free | x2_5 = Target) & move = Left : Target;
+    x2_6 = AgentOnTarget & (x1_6 = Free | x1_6 = Target) & move = Up : Target;
+    x2_6 = BoxOnTarget & (x2_7 = Agent | x2_7 = AgentOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Left: AgentOnTarget;
+    x2_6 = BoxOnTarget & (x3_6 = Agent | x3_6 = AgentOnTarget) & (x1_6 = Free | x1_6 = Target) & move = Up: AgentOnTarget;
+    x2_6 = BoxOnTarget & (x2_5 = Agent | x2_5 = AgentOnTarget) & (x2_7 = Free | x2_7 = Target) & move = Right : AgentOnTarget;
+    x2_6 = BoxOnTarget & (x1_6 = Agent | x1_6 = AgentOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Down : AgentOnTarget;
+    TRUE : x2_6;
+  esac;
+  next(x2_7) := case
+    x2_7 = Wall: Wall;
+    x2_7 = Free & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Up: Agent;
+    x2_7 = Free & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Right : Agent;
+    x2_7 = Free & (x1_7 = Agent | x1_7 = AgentOnTarget) & move = Down : Agent;
+    x2_7 = Free & (x3_7 = Box | x3_7 = BoxOnTarget) & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Up: Box;
+    x2_7 = Free & (x2_6 = Box | x2_6 = BoxOnTarget) & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Right : Box;
+    x2_7 = Agent & (x3_7 = Free | x3_7 = Target) & move = Down: Free;
+    x2_7 = Agent & (x2_6 = Free | x2_6 = Target) & move = Left : Free;
+    x2_7 = Agent & (x1_7= Free | x1_7 = Target) & move = Up : Free;
+    x2_7 = Agent & (x3_7 = Box | x3_7 = BoxOnTarget) & (x4_7 = Free | x4_7 = Target) & move = Down: Free;
+    x2_7 = Agent & (x2_6 = Box | x2_6 = BoxOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Left: Free;
+    x2_7 = Box & (x3_7 = Agent | x3_7 = AgentOnTarget) & (x1_7 = Free | x1_7 = Target) & move = Up: Agent;
+    x2_7 = Box & (x1_7 = Agent | x1_7 = AgentOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Down : Agent;
+    x2_7 = Target & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x2_7 = Target & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x2_7 = Target & (x1_7 = Agent | x1_7 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x2_7 = Target & (x3_7 = Box | x3_7 = BoxOnTarget) & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x2_7 = Target & (x2_6 = Box | x2_6 = BoxOnTarget) & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x2_7 = AgentOnTarget & (x3_7 = Free | x3_7 = Target) & move = Down: Target;
+    x2_7 = AgentOnTarget & (x2_6 = Free | x2_6 = Target) & move = Left : Target;
+    x2_7 = AgentOnTarget & (x1_7 = Free | x1_7 = Target) & move = Up : Target;
+    x2_7 = BoxOnTarget & (x3_7 = Agent | x3_7 = AgentOnTarget) & (x1_7 = Free | x1_7 = Target) & move = Up: AgentOnTarget;
+    x2_7 = BoxOnTarget & (x1_7 = Agent | x1_7 = AgentOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Down : AgentOnTarget;
+    TRUE : x2_7;
+  esac;
+  next(x3_0) := case
+    x3_0 = Wall: Wall;
+    x3_0 = Free & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Left: Agent;
+    x3_0 = Free & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Up: Agent;
+    x3_0 = Free & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Down : Agent;
+    x3_0 = Free & (x3_1 = Box | x3_1 = BoxOnTarget) & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Left: Box;
+    x3_0 = Free & (x4_0 = Box | x4_0 = BoxOnTarget) & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Up: Box;
+    x3_0 = Free & (x2_0 = Box | x2_0 = BoxOnTarget) & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Down : Box;
+    x3_0 = Agent & (x3_1 = Free | x3_1 = Target) & move = Right: Free;
+    x3_0 = Agent & (x4_0 = Free | x4_0 = Target) & move = Down: Free;
+    x3_0 = Agent & (x2_0= Free | x2_0 = Target) & move = Up : Free;
+    x3_0 = Agent &  (x3_1 = Box | x3_1 = BoxOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Right: Free;
+    x3_0 = Agent & (x4_0 = Box | x4_0 = BoxOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Down: Free;
+    x3_0 = Agent & (x2_0 = Box | x2_0 = BoxOnTarget) & (x1_0 = Free | x1_0 = Target) & move = Up: Free;
+    x3_0 = Box & (x4_0 = Agent | x4_0 = AgentOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Up: Agent;
+    x3_0 = Box & (x2_0 = Agent | x2_0 = AgentOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Down : Agent;
+    x3_0 = Target & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x3_0 = Target & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x3_0 = Target & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x3_0 = Target & (x3_1 = Box | x3_1 = BoxOnTarget) & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x3_0 = Target & (x4_0 = Box | x4_0 = BoxOnTarget) & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x3_0 = Target & (x2_0 = Box | x2_0 = BoxOnTarget) & (x1_0 = Agent | x1_0 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x3_0 = AgentOnTarget & (x3_1 = Free | x3_1 = Target) & move = Right: Target;
+    x3_0 = AgentOnTarget & (x4_0 = Free | x4_0 = Target) & move = Down: Target;
+    x3_0 = AgentOnTarget & (x2_0 = Free | x2_0 = Target) & move = Up : Target;
+    x3_0 = BoxOnTarget & (x4_0 = Agent | x4_0 = AgentOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Up: AgentOnTarget;
+    x3_0 = BoxOnTarget & (x2_0 = Agent | x2_0 = AgentOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Down : AgentOnTarget;
+    TRUE : x3_0;
+  esac;
+  next(x3_1) := case
+    x3_1 = Wall: Wall;
+    x3_1 = Free & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Left: Agent;
+    x3_1 = Free & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Up: Agent;
+    x3_1 = Free & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Right : Agent;
+    x3_1 = Free & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Down : Agent;
+    x3_1 = Free & (x3_2 = Box | x3_2 = BoxOnTarget) & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Left: Box;
+    x3_1 = Free & (x4_1 = Box | x4_1 = BoxOnTarget) & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Up: Box;
+    x3_1 = Free & (x2_1 = Box | x2_1 = BoxOnTarget) & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Down : Box;
+    x3_1 = Agent & (x3_2 = Free | x3_2 = Target) & move = Right: Free;
+    x3_1 = Agent & (x4_1 = Free | x4_1 = Target) & move = Down: Free;
+    x3_1 = Agent & (x3_0 = Free | x3_0 = Target) & move = Left : Free;
+    x3_1 = Agent & (x2_1= Free | x2_1 = Target) & move = Up : Free;
+    x3_1 = Agent &  (x3_2 = Box | x3_2 = BoxOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Right: Free;
+    x3_1 = Agent & (x4_1 = Box | x4_1 = BoxOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Down: Free;
+    x3_1 = Agent & (x2_1 = Box | x2_1 = BoxOnTarget) & (x1_1 = Free | x1_1 = Target) & move = Up: Free;
+    x3_1 = Box & (x3_2 = Agent | x3_2 = AgentOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Left: Agent;
+    x3_1 = Box & (x4_1 = Agent | x4_1 = AgentOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Up: Agent;
+    x3_1 = Box & (x3_0 = Agent | x3_0 = AgentOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Right : Agent;
+    x3_1 = Box & (x2_1 = Agent | x2_1 = AgentOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Down : Agent;
+    x3_1 = Target & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x3_1 = Target & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x3_1 = Target & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x3_1 = Target & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x3_1 = Target & (x3_2 = Box | x3_2 = BoxOnTarget) & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x3_1 = Target & (x4_1 = Box | x4_1 = BoxOnTarget) & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x3_1 = Target & (x2_1 = Box | x2_1 = BoxOnTarget) & (x1_1 = Agent | x1_1 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x3_1 = AgentOnTarget & (x3_2 = Free | x3_2 = Target) & move = Right: Target;
+    x3_1 = AgentOnTarget & (x4_1 = Free | x4_1 = Target) & move = Down: Target;
+    x3_1 = AgentOnTarget & (x3_0 = Free | x3_0 = Target) & move = Left : Target;
+    x3_1 = AgentOnTarget & (x2_1 = Free | x2_1 = Target) & move = Up : Target;
+    x3_1 = BoxOnTarget & (x3_2 = Agent | x3_2 = AgentOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Left: AgentOnTarget;
+    x3_1 = BoxOnTarget & (x4_1 = Agent | x4_1 = AgentOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Up: AgentOnTarget;
+    x3_1 = BoxOnTarget & (x3_0 = Agent | x3_0 = AgentOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Right : AgentOnTarget;
+    x3_1 = BoxOnTarget & (x2_1 = Agent | x2_1 = AgentOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Down : AgentOnTarget;
+    TRUE : x3_1;
+  esac;
+  next(x3_2) := case
+    x3_2 = Wall: Wall;
+    x3_2 = Free & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Left: Agent;
+    x3_2 = Free & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Up: Agent;
+    x3_2 = Free & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Right : Agent;
+    x3_2 = Free & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Down : Agent;
+    x3_2 = Free & (x3_3 = Box | x3_3 = BoxOnTarget) & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Left: Box;
+    x3_2 = Free & (x4_2 = Box | x4_2 = BoxOnTarget) & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Up: Box;
+    x3_2 = Free & (x3_1 = Box | x3_1 = BoxOnTarget) & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Right : Box;
+    x3_2 = Free & (x2_2 = Box | x2_2 = BoxOnTarget) & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Down : Box;
+    x3_2 = Agent & (x3_3 = Free | x3_3 = Target) & move = Right: Free;
+    x3_2 = Agent & (x4_2 = Free | x4_2 = Target) & move = Down: Free;
+    x3_2 = Agent & (x3_1 = Free | x3_1 = Target) & move = Left : Free;
+    x3_2 = Agent & (x2_2= Free | x2_2 = Target) & move = Up : Free;
+    x3_2 = Agent &  (x3_3 = Box | x3_3 = BoxOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Right: Free;
+    x3_2 = Agent & (x4_2 = Box | x4_2 = BoxOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Down: Free;
+    x3_2 = Agent & (x3_1 = Box | x3_1 = BoxOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Left: Free;
+    x3_2 = Agent & (x2_2 = Box | x2_2 = BoxOnTarget) & (x1_2 = Free | x1_2 = Target) & move = Up: Free;
+    x3_2 = Box & (x3_3 = Agent | x3_3 = AgentOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Left: Agent;
+    x3_2 = Box & (x4_2 = Agent | x4_2 = AgentOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Up: Agent;
+    x3_2 = Box & (x3_1 = Agent | x3_1 = AgentOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Right : Agent;
+    x3_2 = Box & (x2_2 = Agent | x2_2 = AgentOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Down : Agent;
+    x3_2 = Target & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x3_2 = Target & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x3_2 = Target & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x3_2 = Target & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x3_2 = Target & (x3_3 = Box | x3_3 = BoxOnTarget) & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x3_2 = Target & (x4_2 = Box | x4_2 = BoxOnTarget) & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x3_2 = Target & (x3_1 = Box | x3_1 = BoxOnTarget) & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x3_2 = Target & (x2_2 = Box | x2_2 = BoxOnTarget) & (x1_2 = Agent | x1_2 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x3_2 = AgentOnTarget & (x3_3 = Free | x3_3 = Target) & move = Right: Target;
+    x3_2 = AgentOnTarget & (x4_2 = Free | x4_2 = Target) & move = Down: Target;
+    x3_2 = AgentOnTarget & (x3_1 = Free | x3_1 = Target) & move = Left : Target;
+    x3_2 = AgentOnTarget & (x2_2 = Free | x2_2 = Target) & move = Up : Target;
+    x3_2 = BoxOnTarget & (x3_3 = Agent | x3_3 = AgentOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Left: AgentOnTarget;
+    x3_2 = BoxOnTarget & (x4_2 = Agent | x4_2 = AgentOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Up: AgentOnTarget;
+    x3_2 = BoxOnTarget & (x3_1 = Agent | x3_1 = AgentOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Right : AgentOnTarget;
+    x3_2 = BoxOnTarget & (x2_2 = Agent | x2_2 = AgentOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Down : AgentOnTarget;
+    TRUE : x3_2;
+  esac;
+  next(x3_3) := case
+    x3_3 = Wall: Wall;
+    x3_3 = Free & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Left: Agent;
+    x3_3 = Free & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Up: Agent;
+    x3_3 = Free & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Right : Agent;
+    x3_3 = Free & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Down : Agent;
+    x3_3 = Free & (x3_4 = Box | x3_4 = BoxOnTarget) & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Left: Box;
+    x3_3 = Free & (x4_3 = Box | x4_3 = BoxOnTarget) & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Up: Box;
+    x3_3 = Free & (x3_2 = Box | x3_2 = BoxOnTarget) & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Right : Box;
+    x3_3 = Free & (x2_3 = Box | x2_3 = BoxOnTarget) & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Down : Box;
+    x3_3 = Agent & (x3_4 = Free | x3_4 = Target) & move = Right: Free;
+    x3_3 = Agent & (x4_3 = Free | x4_3 = Target) & move = Down: Free;
+    x3_3 = Agent & (x3_2 = Free | x3_2 = Target) & move = Left : Free;
+    x3_3 = Agent & (x2_3= Free | x2_3 = Target) & move = Up : Free;
+    x3_3 = Agent &  (x3_4 = Box | x3_4 = BoxOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Right: Free;
+    x3_3 = Agent & (x4_3 = Box | x4_3 = BoxOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Down: Free;
+    x3_3 = Agent & (x3_2 = Box | x3_2 = BoxOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Left: Free;
+    x3_3 = Agent & (x2_3 = Box | x2_3 = BoxOnTarget) & (x1_3 = Free | x1_3 = Target) & move = Up: Free;
+    x3_3 = Box & (x3_4 = Agent | x3_4 = AgentOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Left: Agent;
+    x3_3 = Box & (x4_3 = Agent | x4_3 = AgentOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Up: Agent;
+    x3_3 = Box & (x3_2 = Agent | x3_2 = AgentOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Right : Agent;
+    x3_3 = Box & (x2_3 = Agent | x2_3 = AgentOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Down : Agent;
+    x3_3 = Target & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x3_3 = Target & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x3_3 = Target & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x3_3 = Target & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x3_3 = Target & (x3_4 = Box | x3_4 = BoxOnTarget) & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x3_3 = Target & (x4_3 = Box | x4_3 = BoxOnTarget) & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x3_3 = Target & (x3_2 = Box | x3_2 = BoxOnTarget) & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x3_3 = Target & (x2_3 = Box | x2_3 = BoxOnTarget) & (x1_3 = Agent | x1_3 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x3_3 = AgentOnTarget & (x3_4 = Free | x3_4 = Target) & move = Right: Target;
+    x3_3 = AgentOnTarget & (x4_3 = Free | x4_3 = Target) & move = Down: Target;
+    x3_3 = AgentOnTarget & (x3_2 = Free | x3_2 = Target) & move = Left : Target;
+    x3_3 = AgentOnTarget & (x2_3 = Free | x2_3 = Target) & move = Up : Target;
+    x3_3 = BoxOnTarget & (x3_4 = Agent | x3_4 = AgentOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Left: AgentOnTarget;
+    x3_3 = BoxOnTarget & (x4_3 = Agent | x4_3 = AgentOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Up: AgentOnTarget;
+    x3_3 = BoxOnTarget & (x3_2 = Agent | x3_2 = AgentOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Right : AgentOnTarget;
+    x3_3 = BoxOnTarget & (x2_3 = Agent | x2_3 = AgentOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Down : AgentOnTarget;
+    TRUE : x3_3;
+  esac;
+  next(x3_4) := case
+    x3_4 = Wall: Wall;
+    x3_4 = Free & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Left: Agent;
+    x3_4 = Free & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Up: Agent;
+    x3_4 = Free & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Right : Agent;
+    x3_4 = Free & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Down : Agent;
+    x3_4 = Free & (x3_5 = Box | x3_5 = BoxOnTarget) & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Left: Box;
+    x3_4 = Free & (x4_4 = Box | x4_4 = BoxOnTarget) & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Up: Box;
+    x3_4 = Free & (x3_3 = Box | x3_3 = BoxOnTarget) & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Right : Box;
+    x3_4 = Free & (x2_4 = Box | x2_4 = BoxOnTarget) & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Down : Box;
+    x3_4 = Agent & (x3_5 = Free | x3_5 = Target) & move = Right: Free;
+    x3_4 = Agent & (x4_4 = Free | x4_4 = Target) & move = Down: Free;
+    x3_4 = Agent & (x3_3 = Free | x3_3 = Target) & move = Left : Free;
+    x3_4 = Agent & (x2_4= Free | x2_4 = Target) & move = Up : Free;
+    x3_4 = Agent &  (x3_5 = Box | x3_5 = BoxOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Right: Free;
+    x3_4 = Agent & (x4_4 = Box | x4_4 = BoxOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Down: Free;
+    x3_4 = Agent & (x3_3 = Box | x3_3 = BoxOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Left: Free;
+    x3_4 = Agent & (x2_4 = Box | x2_4 = BoxOnTarget) & (x1_4 = Free | x1_4 = Target) & move = Up: Free;
+    x3_4 = Box & (x3_5 = Agent | x3_5 = AgentOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Left: Agent;
+    x3_4 = Box & (x4_4 = Agent | x4_4 = AgentOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Up: Agent;
+    x3_4 = Box & (x3_3 = Agent | x3_3 = AgentOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Right : Agent;
+    x3_4 = Box & (x2_4 = Agent | x2_4 = AgentOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Down : Agent;
+    x3_4 = Target & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x3_4 = Target & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x3_4 = Target & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x3_4 = Target & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x3_4 = Target & (x3_5 = Box | x3_5 = BoxOnTarget) & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x3_4 = Target & (x4_4 = Box | x4_4 = BoxOnTarget) & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x3_4 = Target & (x3_3 = Box | x3_3 = BoxOnTarget) & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x3_4 = Target & (x2_4 = Box | x2_4 = BoxOnTarget) & (x1_4 = Agent | x1_4 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x3_4 = AgentOnTarget & (x3_5 = Free | x3_5 = Target) & move = Right: Target;
+    x3_4 = AgentOnTarget & (x4_4 = Free | x4_4 = Target) & move = Down: Target;
+    x3_4 = AgentOnTarget & (x3_3 = Free | x3_3 = Target) & move = Left : Target;
+    x3_4 = AgentOnTarget & (x2_4 = Free | x2_4 = Target) & move = Up : Target;
+    x3_4 = BoxOnTarget & (x3_5 = Agent | x3_5 = AgentOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Left: AgentOnTarget;
+    x3_4 = BoxOnTarget & (x4_4 = Agent | x4_4 = AgentOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Up: AgentOnTarget;
+    x3_4 = BoxOnTarget & (x3_3 = Agent | x3_3 = AgentOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Right : AgentOnTarget;
+    x3_4 = BoxOnTarget & (x2_4 = Agent | x2_4 = AgentOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Down : AgentOnTarget;
+    TRUE : x3_4;
+  esac;
+  next(x3_5) := case
+    x3_5 = Wall: Wall;
+    x3_5 = Free & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Left: Agent;
+    x3_5 = Free & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Up: Agent;
+    x3_5 = Free & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Right : Agent;
+    x3_5 = Free & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Down : Agent;
+    x3_5 = Free & (x3_6 = Box | x3_6 = BoxOnTarget) & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Left: Box;
+    x3_5 = Free & (x4_5 = Box | x4_5 = BoxOnTarget) & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Up: Box;
+    x3_5 = Free & (x3_4 = Box | x3_4 = BoxOnTarget) & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Right : Box;
+    x3_5 = Free & (x2_5 = Box | x2_5 = BoxOnTarget) & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Down : Box;
+    x3_5 = Agent & (x3_6 = Free | x3_6 = Target) & move = Right: Free;
+    x3_5 = Agent & (x4_5 = Free | x4_5 = Target) & move = Down: Free;
+    x3_5 = Agent & (x3_4 = Free | x3_4 = Target) & move = Left : Free;
+    x3_5 = Agent & (x2_5= Free | x2_5 = Target) & move = Up : Free;
+    x3_5 = Agent &  (x3_6 = Box | x3_6 = BoxOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Right: Free;
+    x3_5 = Agent & (x4_5 = Box | x4_5 = BoxOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Down: Free;
+    x3_5 = Agent & (x3_4 = Box | x3_4 = BoxOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Left: Free;
+    x3_5 = Agent & (x2_5 = Box | x2_5 = BoxOnTarget) & (x1_5 = Free | x1_5 = Target) & move = Up: Free;
+    x3_5 = Box & (x3_6 = Agent | x3_6 = AgentOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Left: Agent;
+    x3_5 = Box & (x4_5 = Agent | x4_5 = AgentOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Up: Agent;
+    x3_5 = Box & (x3_4 = Agent | x3_4 = AgentOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Right : Agent;
+    x3_5 = Box & (x2_5 = Agent | x2_5 = AgentOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Down : Agent;
+    x3_5 = Target & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x3_5 = Target & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x3_5 = Target & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x3_5 = Target & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x3_5 = Target & (x3_6 = Box | x3_6 = BoxOnTarget) & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x3_5 = Target & (x4_5 = Box | x4_5 = BoxOnTarget) & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x3_5 = Target & (x3_4 = Box | x3_4 = BoxOnTarget) & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x3_5 = Target & (x2_5 = Box | x2_5 = BoxOnTarget) & (x1_5 = Agent | x1_5 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x3_5 = AgentOnTarget & (x3_6 = Free | x3_6 = Target) & move = Right: Target;
+    x3_5 = AgentOnTarget & (x4_5 = Free | x4_5 = Target) & move = Down: Target;
+    x3_5 = AgentOnTarget & (x3_4 = Free | x3_4 = Target) & move = Left : Target;
+    x3_5 = AgentOnTarget & (x2_5 = Free | x2_5 = Target) & move = Up : Target;
+    x3_5 = BoxOnTarget & (x3_6 = Agent | x3_6 = AgentOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Left: AgentOnTarget;
+    x3_5 = BoxOnTarget & (x4_5 = Agent | x4_5 = AgentOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Up: AgentOnTarget;
+    x3_5 = BoxOnTarget & (x3_4 = Agent | x3_4 = AgentOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Right : AgentOnTarget;
+    x3_5 = BoxOnTarget & (x2_5 = Agent | x2_5 = AgentOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Down : AgentOnTarget;
+    TRUE : x3_5;
+  esac;
+  next(x3_6) := case
+    x3_6 = Wall: Wall;
+    x3_6 = Free & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Left: Agent;
+    x3_6 = Free & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Up: Agent;
+    x3_6 = Free & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Right : Agent;
+    x3_6 = Free & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Down : Agent;
+    x3_6 = Free & (x4_6 = Box | x4_6 = BoxOnTarget) & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Up: Box;
+    x3_6 = Free & (x3_5 = Box | x3_5 = BoxOnTarget) & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Right : Box;
+    x3_6 = Free & (x2_6 = Box | x2_6 = BoxOnTarget) & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Down : Box;
+    x3_6 = Agent & (x3_7 = Free | x3_7 = Target) & move = Right: Free;
+    x3_6 = Agent & (x4_6 = Free | x4_6 = Target) & move = Down: Free;
+    x3_6 = Agent & (x3_5 = Free | x3_5 = Target) & move = Left : Free;
+    x3_6 = Agent & (x2_6= Free | x2_6 = Target) & move = Up : Free;
+    x3_6 = Agent & (x4_6 = Box | x4_6 = BoxOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Down: Free;
+    x3_6 = Agent & (x3_5 = Box | x3_5 = BoxOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Left: Free;
+    x3_6 = Agent & (x2_6 = Box | x2_6 = BoxOnTarget) & (x1_6 = Free | x1_6 = Target) & move = Up: Free;
+    x3_6 = Box & (x3_7 = Agent | x3_7 = AgentOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Left: Agent;
+    x3_6 = Box & (x4_6 = Agent | x4_6 = AgentOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Up: Agent;
+    x3_6 = Box & (x3_5 = Agent | x3_5 = AgentOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Right : Agent;
+    x3_6 = Box & (x2_6 = Agent | x2_6 = AgentOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Down : Agent;
+    x3_6 = Target & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x3_6 = Target & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x3_6 = Target & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x3_6 = Target & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x3_6 = Target & (x4_6 = Box | x4_6 = BoxOnTarget) & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x3_6 = Target & (x3_5 = Box | x3_5 = BoxOnTarget) & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x3_6 = Target & (x2_6 = Box | x2_6 = BoxOnTarget) & (x1_6 = Agent | x1_6 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x3_6 = AgentOnTarget & (x3_7 = Free | x3_7 = Target) & move = Right: Target;
+    x3_6 = AgentOnTarget & (x4_6 = Free | x4_6 = Target) & move = Down: Target;
+    x3_6 = AgentOnTarget & (x3_5 = Free | x3_5 = Target) & move = Left : Target;
+    x3_6 = AgentOnTarget & (x2_6 = Free | x2_6 = Target) & move = Up : Target;
+    x3_6 = BoxOnTarget & (x3_7 = Agent | x3_7 = AgentOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Left: AgentOnTarget;
+    x3_6 = BoxOnTarget & (x4_6 = Agent | x4_6 = AgentOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Up: AgentOnTarget;
+    x3_6 = BoxOnTarget & (x3_5 = Agent | x3_5 = AgentOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Right : AgentOnTarget;
+    x3_6 = BoxOnTarget & (x2_6 = Agent | x2_6 = AgentOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Down : AgentOnTarget;
+    TRUE : x3_6;
+  esac;
+  next(x3_7) := case
+    x3_7 = Wall: Wall;
+    x3_7 = Free & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Up: Agent;
+    x3_7 = Free & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Right : Agent;
+    x3_7 = Free & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Down : Agent;
+    x3_7 = Free & (x4_7 = Box | x4_7 = BoxOnTarget) & (x5_7 = Agent | x5_7 = AgentOnTarget) & move = Up: Box;
+    x3_7 = Free & (x3_6 = Box | x3_6 = BoxOnTarget) & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Right : Box;
+    x3_7 = Free & (x2_7 = Box | x2_7 = BoxOnTarget) & (x1_7 = Agent | x1_7 = AgentOnTarget) & move = Down : Box;
+    x3_7 = Agent & (x4_7 = Free | x4_7 = Target) & move = Down: Free;
+    x3_7 = Agent & (x3_6 = Free | x3_6 = Target) & move = Left : Free;
+    x3_7 = Agent & (x2_7= Free | x2_7 = Target) & move = Up : Free;
+    x3_7 = Agent & (x4_7 = Box | x4_7 = BoxOnTarget) & (x5_7 = Free | x5_7 = Target) & move = Down: Free;
+    x3_7 = Agent & (x3_6 = Box | x3_6 = BoxOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Left: Free;
+    x3_7 = Agent & (x2_7 = Box | x2_7 = BoxOnTarget) & (x1_7 = Free | x1_7 = Target) & move = Up: Free;
+    x3_7 = Box & (x4_7 = Agent | x4_7 = AgentOnTarget) & (x2_7 = Free | x2_7 = Target) & move = Up: Agent;
+    x3_7 = Box & (x2_7 = Agent | x2_7 = AgentOnTarget) & (x4_7 = Free | x4_7 = Target) & move = Down : Agent;
+    x3_7 = Target & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x3_7 = Target & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x3_7 = Target & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x3_7 = Target & (x4_7 = Box | x4_7 = BoxOnTarget) & (x5_7 = Agent | x5_7 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x3_7 = Target & (x3_6 = Box | x3_6 = BoxOnTarget) & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x3_7 = Target & (x2_7 = Box | x2_7 = BoxOnTarget) & (x1_7 = Agent | x1_7 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x3_7 = AgentOnTarget & (x4_7 = Free | x4_7 = Target) & move = Down: Target;
+    x3_7 = AgentOnTarget & (x3_6 = Free | x3_6 = Target) & move = Left : Target;
+    x3_7 = AgentOnTarget & (x2_7 = Free | x2_7 = Target) & move = Up : Target;
+    x3_7 = BoxOnTarget & (x4_7 = Agent | x4_7 = AgentOnTarget) & (x2_7 = Free | x2_7 = Target) & move = Up: AgentOnTarget;
+    x3_7 = BoxOnTarget & (x2_7 = Agent | x2_7 = AgentOnTarget) & (x4_7 = Free | x4_7 = Target) & move = Down : AgentOnTarget;
+    TRUE : x3_7;
+  esac;
+  next(x4_0) := case
+    x4_0 = Wall: Wall;
+    x4_0 = Free & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Left: Agent;
+    x4_0 = Free & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Up: Agent;
+    x4_0 = Free & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Down : Agent;
+    x4_0 = Free & (x4_1 = Box | x4_1 = BoxOnTarget) & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Left: Box;
+    x4_0 = Free & (x5_0 = Box | x5_0 = BoxOnTarget) & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Up: Box;
+    x4_0 = Free & (x3_0 = Box | x3_0 = BoxOnTarget) & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Down : Box;
+    x4_0 = Agent & (x4_1 = Free | x4_1 = Target) & move = Right: Free;
+    x4_0 = Agent & (x5_0 = Free | x5_0 = Target) & move = Down: Free;
+    x4_0 = Agent & (x3_0= Free | x3_0 = Target) & move = Up : Free;
+    x4_0 = Agent &  (x4_1 = Box | x4_1 = BoxOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Right: Free;
+    x4_0 = Agent & (x5_0 = Box | x5_0 = BoxOnTarget) & (x6_0 = Free | x6_0 = Target) & move = Down: Free;
+    x4_0 = Agent & (x3_0 = Box | x3_0 = BoxOnTarget) & (x2_0 = Free | x2_0 = Target) & move = Up: Free;
+    x4_0 = Box & (x5_0 = Agent | x5_0 = AgentOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Up: Agent;
+    x4_0 = Box & (x3_0 = Agent | x3_0 = AgentOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Down : Agent;
+    x4_0 = Target & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x4_0 = Target & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x4_0 = Target & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x4_0 = Target & (x4_1 = Box | x4_1 = BoxOnTarget) & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x4_0 = Target & (x5_0 = Box | x5_0 = BoxOnTarget) & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x4_0 = Target & (x3_0 = Box | x3_0 = BoxOnTarget) & (x2_0 = Agent | x2_0 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x4_0 = AgentOnTarget & (x4_1 = Free | x4_1 = Target) & move = Right: Target;
+    x4_0 = AgentOnTarget & (x5_0 = Free | x5_0 = Target) & move = Down: Target;
+    x4_0 = AgentOnTarget & (x3_0 = Free | x3_0 = Target) & move = Up : Target;
+    x4_0 = BoxOnTarget & (x5_0 = Agent | x5_0 = AgentOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Up: AgentOnTarget;
+    x4_0 = BoxOnTarget & (x3_0 = Agent | x3_0 = AgentOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Down : AgentOnTarget;
+    TRUE : x4_0;
+  esac;
+  next(x4_1) := case
+    x4_1 = Wall: Wall;
+    x4_1 = Free & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Left: Agent;
+    x4_1 = Free & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Up: Agent;
+    x4_1 = Free & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Right : Agent;
+    x4_1 = Free & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Down : Agent;
+    x4_1 = Free & (x4_2 = Box | x4_2 = BoxOnTarget) & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Left: Box;
+    x4_1 = Free & (x5_1 = Box | x5_1 = BoxOnTarget) & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Up: Box;
+    x4_1 = Free & (x3_1 = Box | x3_1 = BoxOnTarget) & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Down : Box;
+    x4_1 = Agent & (x4_2 = Free | x4_2 = Target) & move = Right: Free;
+    x4_1 = Agent & (x5_1 = Free | x5_1 = Target) & move = Down: Free;
+    x4_1 = Agent & (x4_0 = Free | x4_0 = Target) & move = Left : Free;
+    x4_1 = Agent & (x3_1= Free | x3_1 = Target) & move = Up : Free;
+    x4_1 = Agent &  (x4_2 = Box | x4_2 = BoxOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Right: Free;
+    x4_1 = Agent & (x5_1 = Box | x5_1 = BoxOnTarget) & (x6_1 = Free | x6_1 = Target) & move = Down: Free;
+    x4_1 = Agent & (x3_1 = Box | x3_1 = BoxOnTarget) & (x2_1 = Free | x2_1 = Target) & move = Up: Free;
+    x4_1 = Box & (x4_2 = Agent | x4_2 = AgentOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Left: Agent;
+    x4_1 = Box & (x5_1 = Agent | x5_1 = AgentOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Up: Agent;
+    x4_1 = Box & (x4_0 = Agent | x4_0 = AgentOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Right : Agent;
+    x4_1 = Box & (x3_1 = Agent | x3_1 = AgentOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Down : Agent;
+    x4_1 = Target & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x4_1 = Target & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x4_1 = Target & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x4_1 = Target & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x4_1 = Target & (x4_2 = Box | x4_2 = BoxOnTarget) & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x4_1 = Target & (x5_1 = Box | x5_1 = BoxOnTarget) & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x4_1 = Target & (x3_1 = Box | x3_1 = BoxOnTarget) & (x2_1 = Agent | x2_1 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x4_1 = AgentOnTarget & (x4_2 = Free | x4_2 = Target) & move = Right: Target;
+    x4_1 = AgentOnTarget & (x5_1 = Free | x5_1 = Target) & move = Down: Target;
+    x4_1 = AgentOnTarget & (x4_0 = Free | x4_0 = Target) & move = Left : Target;
+    x4_1 = AgentOnTarget & (x3_1 = Free | x3_1 = Target) & move = Up : Target;
+    x4_1 = BoxOnTarget & (x4_2 = Agent | x4_2 = AgentOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Left: AgentOnTarget;
+    x4_1 = BoxOnTarget & (x5_1 = Agent | x5_1 = AgentOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Up: AgentOnTarget;
+    x4_1 = BoxOnTarget & (x4_0 = Agent | x4_0 = AgentOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Right : AgentOnTarget;
+    x4_1 = BoxOnTarget & (x3_1 = Agent | x3_1 = AgentOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Down : AgentOnTarget;
+    TRUE : x4_1;
+  esac;
+  next(x4_2) := case
+    x4_2 = Wall: Wall;
+    x4_2 = Free & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Left: Agent;
+    x4_2 = Free & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Up: Agent;
+    x4_2 = Free & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Right : Agent;
+    x4_2 = Free & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Down : Agent;
+    x4_2 = Free & (x4_3 = Box | x4_3 = BoxOnTarget) & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Left: Box;
+    x4_2 = Free & (x5_2 = Box | x5_2 = BoxOnTarget) & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Up: Box;
+    x4_2 = Free & (x4_1 = Box | x4_1 = BoxOnTarget) & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Right : Box;
+    x4_2 = Free & (x3_2 = Box | x3_2 = BoxOnTarget) & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Down : Box;
+    x4_2 = Agent & (x4_3 = Free | x4_3 = Target) & move = Right: Free;
+    x4_2 = Agent & (x5_2 = Free | x5_2 = Target) & move = Down: Free;
+    x4_2 = Agent & (x4_1 = Free | x4_1 = Target) & move = Left : Free;
+    x4_2 = Agent & (x3_2= Free | x3_2 = Target) & move = Up : Free;
+    x4_2 = Agent &  (x4_3 = Box | x4_3 = BoxOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Right: Free;
+    x4_2 = Agent & (x5_2 = Box | x5_2 = BoxOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Down: Free;
+    x4_2 = Agent & (x4_1 = Box | x4_1 = BoxOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Left: Free;
+    x4_2 = Agent & (x3_2 = Box | x3_2 = BoxOnTarget) & (x2_2 = Free | x2_2 = Target) & move = Up: Free;
+    x4_2 = Box & (x4_3 = Agent | x4_3 = AgentOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Left: Agent;
+    x4_2 = Box & (x5_2 = Agent | x5_2 = AgentOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Up: Agent;
+    x4_2 = Box & (x4_1 = Agent | x4_1 = AgentOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Right : Agent;
+    x4_2 = Box & (x3_2 = Agent | x3_2 = AgentOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Down : Agent;
+    x4_2 = Target & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x4_2 = Target & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x4_2 = Target & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x4_2 = Target & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x4_2 = Target & (x4_3 = Box | x4_3 = BoxOnTarget) & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x4_2 = Target & (x5_2 = Box | x5_2 = BoxOnTarget) & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x4_2 = Target & (x4_1 = Box | x4_1 = BoxOnTarget) & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x4_2 = Target & (x3_2 = Box | x3_2 = BoxOnTarget) & (x2_2 = Agent | x2_2 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x4_2 = AgentOnTarget & (x4_3 = Free | x4_3 = Target) & move = Right: Target;
+    x4_2 = AgentOnTarget & (x5_2 = Free | x5_2 = Target) & move = Down: Target;
+    x4_2 = AgentOnTarget & (x4_1 = Free | x4_1 = Target) & move = Left : Target;
+    x4_2 = AgentOnTarget & (x3_2 = Free | x3_2 = Target) & move = Up : Target;
+    x4_2 = BoxOnTarget & (x4_3 = Agent | x4_3 = AgentOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Left: AgentOnTarget;
+    x4_2 = BoxOnTarget & (x5_2 = Agent | x5_2 = AgentOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Up: AgentOnTarget;
+    x4_2 = BoxOnTarget & (x4_1 = Agent | x4_1 = AgentOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Right : AgentOnTarget;
+    x4_2 = BoxOnTarget & (x3_2 = Agent | x3_2 = AgentOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Down : AgentOnTarget;
+    TRUE : x4_2;
+  esac;
+  next(x4_3) := case
+    x4_3 = Wall: Wall;
+    x4_3 = Free & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Left: Agent;
+    x4_3 = Free & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Up: Agent;
+    x4_3 = Free & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Right : Agent;
+    x4_3 = Free & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Down : Agent;
+    x4_3 = Free & (x4_4 = Box | x4_4 = BoxOnTarget) & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Left: Box;
+    x4_3 = Free & (x5_3 = Box | x5_3 = BoxOnTarget) & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Up: Box;
+    x4_3 = Free & (x4_2 = Box | x4_2 = BoxOnTarget) & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Right : Box;
+    x4_3 = Free & (x3_3 = Box | x3_3 = BoxOnTarget) & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Down : Box;
+    x4_3 = Agent & (x4_4 = Free | x4_4 = Target) & move = Right: Free;
+    x4_3 = Agent & (x5_3 = Free | x5_3 = Target) & move = Down: Free;
+    x4_3 = Agent & (x4_2 = Free | x4_2 = Target) & move = Left : Free;
+    x4_3 = Agent & (x3_3= Free | x3_3 = Target) & move = Up : Free;
+    x4_3 = Agent &  (x4_4 = Box | x4_4 = BoxOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Right: Free;
+    x4_3 = Agent & (x5_3 = Box | x5_3 = BoxOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Down: Free;
+    x4_3 = Agent & (x4_2 = Box | x4_2 = BoxOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Left: Free;
+    x4_3 = Agent & (x3_3 = Box | x3_3 = BoxOnTarget) & (x2_3 = Free | x2_3 = Target) & move = Up: Free;
+    x4_3 = Box & (x4_4 = Agent | x4_4 = AgentOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Left: Agent;
+    x4_3 = Box & (x5_3 = Agent | x5_3 = AgentOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Up: Agent;
+    x4_3 = Box & (x4_2 = Agent | x4_2 = AgentOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Right : Agent;
+    x4_3 = Box & (x3_3 = Agent | x3_3 = AgentOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Down : Agent;
+    x4_3 = Target & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x4_3 = Target & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x4_3 = Target & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x4_3 = Target & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x4_3 = Target & (x4_4 = Box | x4_4 = BoxOnTarget) & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x4_3 = Target & (x5_3 = Box | x5_3 = BoxOnTarget) & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x4_3 = Target & (x4_2 = Box | x4_2 = BoxOnTarget) & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x4_3 = Target & (x3_3 = Box | x3_3 = BoxOnTarget) & (x2_3 = Agent | x2_3 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x4_3 = AgentOnTarget & (x4_4 = Free | x4_4 = Target) & move = Right: Target;
+    x4_3 = AgentOnTarget & (x5_3 = Free | x5_3 = Target) & move = Down: Target;
+    x4_3 = AgentOnTarget & (x4_2 = Free | x4_2 = Target) & move = Left : Target;
+    x4_3 = AgentOnTarget & (x3_3 = Free | x3_3 = Target) & move = Up : Target;
+    x4_3 = BoxOnTarget & (x4_4 = Agent | x4_4 = AgentOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Left: AgentOnTarget;
+    x4_3 = BoxOnTarget & (x5_3 = Agent | x5_3 = AgentOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Up: AgentOnTarget;
+    x4_3 = BoxOnTarget & (x4_2 = Agent | x4_2 = AgentOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Right : AgentOnTarget;
+    x4_3 = BoxOnTarget & (x3_3 = Agent | x3_3 = AgentOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Down : AgentOnTarget;
+    TRUE : x4_3;
+  esac;
+  next(x4_4) := case
+    x4_4 = Wall: Wall;
+    x4_4 = Free & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Left: Agent;
+    x4_4 = Free & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Up: Agent;
+    x4_4 = Free & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Right : Agent;
+    x4_4 = Free & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Down : Agent;
+    x4_4 = Free & (x4_5 = Box | x4_5 = BoxOnTarget) & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Left: Box;
+    x4_4 = Free & (x5_4 = Box | x5_4 = BoxOnTarget) & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Up: Box;
+    x4_4 = Free & (x4_3 = Box | x4_3 = BoxOnTarget) & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Right : Box;
+    x4_4 = Free & (x3_4 = Box | x3_4 = BoxOnTarget) & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Down : Box;
+    x4_4 = Agent & (x4_5 = Free | x4_5 = Target) & move = Right: Free;
+    x4_4 = Agent & (x5_4 = Free | x5_4 = Target) & move = Down: Free;
+    x4_4 = Agent & (x4_3 = Free | x4_3 = Target) & move = Left : Free;
+    x4_4 = Agent & (x3_4= Free | x3_4 = Target) & move = Up : Free;
+    x4_4 = Agent &  (x4_5 = Box | x4_5 = BoxOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Right: Free;
+    x4_4 = Agent & (x5_4 = Box | x5_4 = BoxOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Down: Free;
+    x4_4 = Agent & (x4_3 = Box | x4_3 = BoxOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Left: Free;
+    x4_4 = Agent & (x3_4 = Box | x3_4 = BoxOnTarget) & (x2_4 = Free | x2_4 = Target) & move = Up: Free;
+    x4_4 = Box & (x4_5 = Agent | x4_5 = AgentOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Left: Agent;
+    x4_4 = Box & (x5_4 = Agent | x5_4 = AgentOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Up: Agent;
+    x4_4 = Box & (x4_3 = Agent | x4_3 = AgentOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Right : Agent;
+    x4_4 = Box & (x3_4 = Agent | x3_4 = AgentOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Down : Agent;
+    x4_4 = Target & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x4_4 = Target & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x4_4 = Target & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x4_4 = Target & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x4_4 = Target & (x4_5 = Box | x4_5 = BoxOnTarget) & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x4_4 = Target & (x5_4 = Box | x5_4 = BoxOnTarget) & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x4_4 = Target & (x4_3 = Box | x4_3 = BoxOnTarget) & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x4_4 = Target & (x3_4 = Box | x3_4 = BoxOnTarget) & (x2_4 = Agent | x2_4 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x4_4 = AgentOnTarget & (x4_5 = Free | x4_5 = Target) & move = Right: Target;
+    x4_4 = AgentOnTarget & (x5_4 = Free | x5_4 = Target) & move = Down: Target;
+    x4_4 = AgentOnTarget & (x4_3 = Free | x4_3 = Target) & move = Left : Target;
+    x4_4 = AgentOnTarget & (x3_4 = Free | x3_4 = Target) & move = Up : Target;
+    x4_4 = BoxOnTarget & (x4_5 = Agent | x4_5 = AgentOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Left: AgentOnTarget;
+    x4_4 = BoxOnTarget & (x5_4 = Agent | x5_4 = AgentOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Up: AgentOnTarget;
+    x4_4 = BoxOnTarget & (x4_3 = Agent | x4_3 = AgentOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Right : AgentOnTarget;
+    x4_4 = BoxOnTarget & (x3_4 = Agent | x3_4 = AgentOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Down : AgentOnTarget;
+    TRUE : x4_4;
+  esac;
+  next(x4_5) := case
+    x4_5 = Wall: Wall;
+    x4_5 = Free & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Left: Agent;
+    x4_5 = Free & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Up: Agent;
+    x4_5 = Free & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Right : Agent;
+    x4_5 = Free & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Down : Agent;
+    x4_5 = Free & (x4_6 = Box | x4_6 = BoxOnTarget) & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Left: Box;
+    x4_5 = Free & (x5_5 = Box | x5_5 = BoxOnTarget) & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Up: Box;
+    x4_5 = Free & (x4_4 = Box | x4_4 = BoxOnTarget) & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Right : Box;
+    x4_5 = Free & (x3_5 = Box | x3_5 = BoxOnTarget) & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Down : Box;
+    x4_5 = Agent & (x4_6 = Free | x4_6 = Target) & move = Right: Free;
+    x4_5 = Agent & (x5_5 = Free | x5_5 = Target) & move = Down: Free;
+    x4_5 = Agent & (x4_4 = Free | x4_4 = Target) & move = Left : Free;
+    x4_5 = Agent & (x3_5= Free | x3_5 = Target) & move = Up : Free;
+    x4_5 = Agent &  (x4_6 = Box | x4_6 = BoxOnTarget) & (x4_7 = Free | x4_7 = Target) & move = Right: Free;
+    x4_5 = Agent & (x5_5 = Box | x5_5 = BoxOnTarget) & (x6_5 = Free | x6_5 = Target) & move = Down: Free;
+    x4_5 = Agent & (x4_4 = Box | x4_4 = BoxOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Left: Free;
+    x4_5 = Agent & (x3_5 = Box | x3_5 = BoxOnTarget) & (x2_5 = Free | x2_5 = Target) & move = Up: Free;
+    x4_5 = Box & (x4_6 = Agent | x4_6 = AgentOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Left: Agent;
+    x4_5 = Box & (x5_5 = Agent | x5_5 = AgentOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Up: Agent;
+    x4_5 = Box & (x4_4 = Agent | x4_4 = AgentOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Right : Agent;
+    x4_5 = Box & (x3_5 = Agent | x3_5 = AgentOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Down : Agent;
+    x4_5 = Target & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x4_5 = Target & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x4_5 = Target & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x4_5 = Target & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x4_5 = Target & (x4_6 = Box | x4_6 = BoxOnTarget) & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x4_5 = Target & (x5_5 = Box | x5_5 = BoxOnTarget) & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x4_5 = Target & (x4_4 = Box | x4_4 = BoxOnTarget) & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x4_5 = Target & (x3_5 = Box | x3_5 = BoxOnTarget) & (x2_5 = Agent | x2_5 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x4_5 = AgentOnTarget & (x4_6 = Free | x4_6 = Target) & move = Right: Target;
+    x4_5 = AgentOnTarget & (x5_5 = Free | x5_5 = Target) & move = Down: Target;
+    x4_5 = AgentOnTarget & (x4_4 = Free | x4_4 = Target) & move = Left : Target;
+    x4_5 = AgentOnTarget & (x3_5 = Free | x3_5 = Target) & move = Up : Target;
+    x4_5 = BoxOnTarget & (x4_6 = Agent | x4_6 = AgentOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Left: AgentOnTarget;
+    x4_5 = BoxOnTarget & (x5_5 = Agent | x5_5 = AgentOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Up: AgentOnTarget;
+    x4_5 = BoxOnTarget & (x4_4 = Agent | x4_4 = AgentOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Right : AgentOnTarget;
+    x4_5 = BoxOnTarget & (x3_5 = Agent | x3_5 = AgentOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Down : AgentOnTarget;
+    TRUE : x4_5;
+  esac;
+  next(x4_6) := case
+    x4_6 = Wall: Wall;
+    x4_6 = Free & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Left: Agent;
+    x4_6 = Free & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Up: Agent;
+    x4_6 = Free & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Right : Agent;
+    x4_6 = Free & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Down : Agent;
+    x4_6 = Free & (x5_6 = Box | x5_6 = BoxOnTarget) & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Up: Box;
+    x4_6 = Free & (x4_5 = Box | x4_5 = BoxOnTarget) & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Right : Box;
+    x4_6 = Free & (x3_6 = Box | x3_6 = BoxOnTarget) & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Down : Box;
+    x4_6 = Agent & (x4_7 = Free | x4_7 = Target) & move = Right: Free;
+    x4_6 = Agent & (x5_6 = Free | x5_6 = Target) & move = Down: Free;
+    x4_6 = Agent & (x4_5 = Free | x4_5 = Target) & move = Left : Free;
+    x4_6 = Agent & (x3_6= Free | x3_6 = Target) & move = Up : Free;
+    x4_6 = Agent & (x5_6 = Box | x5_6 = BoxOnTarget) & (x6_6 = Free | x6_6 = Target) & move = Down: Free;
+    x4_6 = Agent & (x4_5 = Box | x4_5 = BoxOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Left: Free;
+    x4_6 = Agent & (x3_6 = Box | x3_6 = BoxOnTarget) & (x2_6 = Free | x2_6 = Target) & move = Up: Free;
+    x4_6 = Box & (x4_7 = Agent | x4_7 = AgentOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Left: Agent;
+    x4_6 = Box & (x5_6 = Agent | x5_6 = AgentOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Up: Agent;
+    x4_6 = Box & (x4_5 = Agent | x4_5 = AgentOnTarget) & (x4_7 = Free | x4_7 = Target) & move = Right : Agent;
+    x4_6 = Box & (x3_6 = Agent | x3_6 = AgentOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Down : Agent;
+    x4_6 = Target & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x4_6 = Target & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x4_6 = Target & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x4_6 = Target & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x4_6 = Target & (x5_6 = Box | x5_6 = BoxOnTarget) & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x4_6 = Target & (x4_5 = Box | x4_5 = BoxOnTarget) & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x4_6 = Target & (x3_6 = Box | x3_6 = BoxOnTarget) & (x2_6 = Agent | x2_6 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x4_6 = AgentOnTarget & (x4_7 = Free | x4_7 = Target) & move = Right: Target;
+    x4_6 = AgentOnTarget & (x5_6 = Free | x5_6 = Target) & move = Down: Target;
+    x4_6 = AgentOnTarget & (x4_5 = Free | x4_5 = Target) & move = Left : Target;
+    x4_6 = AgentOnTarget & (x3_6 = Free | x3_6 = Target) & move = Up : Target;
+    x4_6 = BoxOnTarget & (x4_7 = Agent | x4_7 = AgentOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Left: AgentOnTarget;
+    x4_6 = BoxOnTarget & (x5_6 = Agent | x5_6 = AgentOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Up: AgentOnTarget;
+    x4_6 = BoxOnTarget & (x4_5 = Agent | x4_5 = AgentOnTarget) & (x4_7 = Free | x4_7 = Target) & move = Right : AgentOnTarget;
+    x4_6 = BoxOnTarget & (x3_6 = Agent | x3_6 = AgentOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Down : AgentOnTarget;
+    TRUE : x4_6;
+  esac;
+  next(x4_7) := case
+    x4_7 = Wall: Wall;
+    x4_7 = Free & (x5_7 = Agent | x5_7 = AgentOnTarget) & move = Up: Agent;
+    x4_7 = Free & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Right : Agent;
+    x4_7 = Free & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Down : Agent;
+    x4_7 = Free & (x4_6 = Box | x4_6 = BoxOnTarget) & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Right : Box;
+    x4_7 = Free & (x3_7 = Box | x3_7 = BoxOnTarget) & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Down : Box;
+    x4_7 = Agent & (x5_7 = Free | x5_7 = Target) & move = Down: Free;
+    x4_7 = Agent & (x4_6 = Free | x4_6 = Target) & move = Left : Free;
+    x4_7 = Agent & (x3_7= Free | x3_7 = Target) & move = Up : Free;
+    x4_7 = Agent & (x4_6 = Box | x4_6 = BoxOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Left: Free;
+    x4_7 = Agent & (x3_7 = Box | x3_7 = BoxOnTarget) & (x2_7 = Free | x2_7 = Target) & move = Up: Free;
+    x4_7 = Box & (x5_7 = Agent | x5_7 = AgentOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Up: Agent;
+    x4_7 = Box & (x3_7 = Agent | x3_7 = AgentOnTarget) & (x5_7 = Free | x5_7 = Target) & move = Down : Agent;
+    x4_7 = Target & (x5_7 = Agent | x5_7 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x4_7 = Target & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x4_7 = Target & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x4_7 = Target & (x4_6 = Box | x4_6 = BoxOnTarget) & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x4_7 = Target & (x3_7 = Box | x3_7 = BoxOnTarget) & (x2_7 = Agent | x2_7 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x4_7 = AgentOnTarget & (x5_7 = Free | x5_7 = Target) & move = Down: Target;
+    x4_7 = AgentOnTarget & (x4_6 = Free | x4_6 = Target) & move = Left : Target;
+    x4_7 = AgentOnTarget & (x3_7 = Free | x3_7 = Target) & move = Up : Target;
+    x4_7 = BoxOnTarget & (x5_7 = Agent | x5_7 = AgentOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Up: AgentOnTarget;
+    x4_7 = BoxOnTarget & (x3_7 = Agent | x3_7 = AgentOnTarget) & (x5_7 = Free | x5_7 = Target) & move = Down : AgentOnTarget;
+    TRUE : x4_7;
+  esac;
+  next(x5_0) := case
+    x5_0 = Wall: Wall;
+    x5_0 = Free & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Left: Agent;
+    x5_0 = Free & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Up: Agent;
+    x5_0 = Free & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Down : Agent;
+    x5_0 = Free & (x5_1 = Box | x5_1 = BoxOnTarget) & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Left: Box;
+    x5_0 = Free & (x6_0 = Box | x6_0 = BoxOnTarget) & (x7_0 = Agent | x7_0 = AgentOnTarget) & move = Up: Box;
+    x5_0 = Free & (x4_0 = Box | x4_0 = BoxOnTarget) & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Down : Box;
+    x5_0 = Agent & (x5_1 = Free | x5_1 = Target) & move = Right: Free;
+    x5_0 = Agent & (x6_0 = Free | x6_0 = Target) & move = Down: Free;
+    x5_0 = Agent & (x4_0= Free | x4_0 = Target) & move = Up : Free;
+    x5_0 = Agent &  (x5_1 = Box | x5_1 = BoxOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Right: Free;
+    x5_0 = Agent & (x6_0 = Box | x6_0 = BoxOnTarget) & (x7_0 = Free | x7_0 = Target) & move = Down: Free;
+    x5_0 = Agent & (x4_0 = Box | x4_0 = BoxOnTarget) & (x3_0 = Free | x3_0 = Target) & move = Up: Free;
+    x5_0 = Box & (x6_0 = Agent | x6_0 = AgentOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Up: Agent;
+    x5_0 = Box & (x4_0 = Agent | x4_0 = AgentOnTarget) & (x6_0 = Free | x6_0 = Target) & move = Down : Agent;
+    x5_0 = Target & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x5_0 = Target & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x5_0 = Target & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x5_0 = Target & (x5_1 = Box | x5_1 = BoxOnTarget) & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x5_0 = Target & (x6_0 = Box | x6_0 = BoxOnTarget) & (x7_0 = Agent | x7_0 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x5_0 = Target & (x4_0 = Box | x4_0 = BoxOnTarget) & (x3_0 = Agent | x3_0 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x5_0 = AgentOnTarget & (x5_1 = Free | x5_1 = Target) & move = Right: Target;
+    x5_0 = AgentOnTarget & (x6_0 = Free | x6_0 = Target) & move = Down: Target;
+    x5_0 = AgentOnTarget & (x4_0 = Free | x4_0 = Target) & move = Up : Target;
+    x5_0 = BoxOnTarget & (x6_0 = Agent | x6_0 = AgentOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Up: AgentOnTarget;
+    x5_0 = BoxOnTarget & (x4_0 = Agent | x4_0 = AgentOnTarget) & (x6_0 = Free | x6_0 = Target) & move = Down : AgentOnTarget;
+    TRUE : x5_0;
+  esac;
+  next(x5_1) := case
+    x5_1 = Wall: Wall;
+    x5_1 = Free & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Left: Agent;
+    x5_1 = Free & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Up: Agent;
+    x5_1 = Free & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Right : Agent;
+    x5_1 = Free & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Down : Agent;
+    x5_1 = Free & (x5_2 = Box | x5_2 = BoxOnTarget) & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Left: Box;
+    x5_1 = Free & (x6_1 = Box | x6_1 = BoxOnTarget) & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Up: Box;
+    x5_1 = Free & (x4_1 = Box | x4_1 = BoxOnTarget) & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Down : Box;
+    x5_1 = Agent & (x5_2 = Free | x5_2 = Target) & move = Right: Free;
+    x5_1 = Agent & (x6_1 = Free | x6_1 = Target) & move = Down: Free;
+    x5_1 = Agent & (x5_0 = Free | x5_0 = Target) & move = Left : Free;
+    x5_1 = Agent & (x4_1= Free | x4_1 = Target) & move = Up : Free;
+    x5_1 = Agent &  (x5_2 = Box | x5_2 = BoxOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Right: Free;
+    x5_1 = Agent & (x6_1 = Box | x6_1 = BoxOnTarget) & (x7_1 = Free | x7_1 = Target) & move = Down: Free;
+    x5_1 = Agent & (x4_1 = Box | x4_1 = BoxOnTarget) & (x3_1 = Free | x3_1 = Target) & move = Up: Free;
+    x5_1 = Box & (x5_2 = Agent | x5_2 = AgentOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Left: Agent;
+    x5_1 = Box & (x6_1 = Agent | x6_1 = AgentOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Up: Agent;
+    x5_1 = Box & (x5_0 = Agent | x5_0 = AgentOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Right : Agent;
+    x5_1 = Box & (x4_1 = Agent | x4_1 = AgentOnTarget) & (x6_1 = Free | x6_1 = Target) & move = Down : Agent;
+    x5_1 = Target & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x5_1 = Target & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x5_1 = Target & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x5_1 = Target & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x5_1 = Target & (x5_2 = Box | x5_2 = BoxOnTarget) & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x5_1 = Target & (x6_1 = Box | x6_1 = BoxOnTarget) & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x5_1 = Target & (x4_1 = Box | x4_1 = BoxOnTarget) & (x3_1 = Agent | x3_1 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x5_1 = AgentOnTarget & (x5_2 = Free | x5_2 = Target) & move = Right: Target;
+    x5_1 = AgentOnTarget & (x6_1 = Free | x6_1 = Target) & move = Down: Target;
+    x5_1 = AgentOnTarget & (x5_0 = Free | x5_0 = Target) & move = Left : Target;
+    x5_1 = AgentOnTarget & (x4_1 = Free | x4_1 = Target) & move = Up : Target;
+    x5_1 = BoxOnTarget & (x5_2 = Agent | x5_2 = AgentOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Left: AgentOnTarget;
+    x5_1 = BoxOnTarget & (x6_1 = Agent | x6_1 = AgentOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Up: AgentOnTarget;
+    x5_1 = BoxOnTarget & (x5_0 = Agent | x5_0 = AgentOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Right : AgentOnTarget;
+    x5_1 = BoxOnTarget & (x4_1 = Agent | x4_1 = AgentOnTarget) & (x6_1 = Free | x6_1 = Target) & move = Down : AgentOnTarget;
+    TRUE : x5_1;
+  esac;
+  next(x5_2) := case
+    x5_2 = Wall: Wall;
+    x5_2 = Free & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Left: Agent;
+    x5_2 = Free & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Up: Agent;
+    x5_2 = Free & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Right : Agent;
+    x5_2 = Free & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Down : Agent;
+    x5_2 = Free & (x5_3 = Box | x5_3 = BoxOnTarget) & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Left: Box;
+    x5_2 = Free & (x6_2 = Box | x6_2 = BoxOnTarget) & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Up: Box;
+    x5_2 = Free & (x5_1 = Box | x5_1 = BoxOnTarget) & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Right : Box;
+    x5_2 = Free & (x4_2 = Box | x4_2 = BoxOnTarget) & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Down : Box;
+    x5_2 = Agent & (x5_3 = Free | x5_3 = Target) & move = Right: Free;
+    x5_2 = Agent & (x6_2 = Free | x6_2 = Target) & move = Down: Free;
+    x5_2 = Agent & (x5_1 = Free | x5_1 = Target) & move = Left : Free;
+    x5_2 = Agent & (x4_2= Free | x4_2 = Target) & move = Up : Free;
+    x5_2 = Agent &  (x5_3 = Box | x5_3 = BoxOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Right: Free;
+    x5_2 = Agent & (x6_2 = Box | x6_2 = BoxOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Down: Free;
+    x5_2 = Agent & (x5_1 = Box | x5_1 = BoxOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Left: Free;
+    x5_2 = Agent & (x4_2 = Box | x4_2 = BoxOnTarget) & (x3_2 = Free | x3_2 = Target) & move = Up: Free;
+    x5_2 = Box & (x5_3 = Agent | x5_3 = AgentOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Left: Agent;
+    x5_2 = Box & (x6_2 = Agent | x6_2 = AgentOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Up: Agent;
+    x5_2 = Box & (x5_1 = Agent | x5_1 = AgentOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Right : Agent;
+    x5_2 = Box & (x4_2 = Agent | x4_2 = AgentOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Down : Agent;
+    x5_2 = Target & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x5_2 = Target & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x5_2 = Target & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x5_2 = Target & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x5_2 = Target & (x5_3 = Box | x5_3 = BoxOnTarget) & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x5_2 = Target & (x6_2 = Box | x6_2 = BoxOnTarget) & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x5_2 = Target & (x5_1 = Box | x5_1 = BoxOnTarget) & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x5_2 = Target & (x4_2 = Box | x4_2 = BoxOnTarget) & (x3_2 = Agent | x3_2 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x5_2 = AgentOnTarget & (x5_3 = Free | x5_3 = Target) & move = Right: Target;
+    x5_2 = AgentOnTarget & (x6_2 = Free | x6_2 = Target) & move = Down: Target;
+    x5_2 = AgentOnTarget & (x5_1 = Free | x5_1 = Target) & move = Left : Target;
+    x5_2 = AgentOnTarget & (x4_2 = Free | x4_2 = Target) & move = Up : Target;
+    x5_2 = BoxOnTarget & (x5_3 = Agent | x5_3 = AgentOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Left: AgentOnTarget;
+    x5_2 = BoxOnTarget & (x6_2 = Agent | x6_2 = AgentOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Up: AgentOnTarget;
+    x5_2 = BoxOnTarget & (x5_1 = Agent | x5_1 = AgentOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Right : AgentOnTarget;
+    x5_2 = BoxOnTarget & (x4_2 = Agent | x4_2 = AgentOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Down : AgentOnTarget;
+    TRUE : x5_2;
+  esac;
+  next(x5_3) := case
+    x5_3 = Wall: Wall;
+    x5_3 = Free & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Left: Agent;
+    x5_3 = Free & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Up: Agent;
+    x5_3 = Free & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Right : Agent;
+    x5_3 = Free & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Down : Agent;
+    x5_3 = Free & (x5_4 = Box | x5_4 = BoxOnTarget) & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Left: Box;
+    x5_3 = Free & (x6_3 = Box | x6_3 = BoxOnTarget) & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Up: Box;
+    x5_3 = Free & (x5_2 = Box | x5_2 = BoxOnTarget) & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Right : Box;
+    x5_3 = Free & (x4_3 = Box | x4_3 = BoxOnTarget) & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Down : Box;
+    x5_3 = Agent & (x5_4 = Free | x5_4 = Target) & move = Right: Free;
+    x5_3 = Agent & (x6_3 = Free | x6_3 = Target) & move = Down: Free;
+    x5_3 = Agent & (x5_2 = Free | x5_2 = Target) & move = Left : Free;
+    x5_3 = Agent & (x4_3= Free | x4_3 = Target) & move = Up : Free;
+    x5_3 = Agent &  (x5_4 = Box | x5_4 = BoxOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Right: Free;
+    x5_3 = Agent & (x6_3 = Box | x6_3 = BoxOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Down: Free;
+    x5_3 = Agent & (x5_2 = Box | x5_2 = BoxOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Left: Free;
+    x5_3 = Agent & (x4_3 = Box | x4_3 = BoxOnTarget) & (x3_3 = Free | x3_3 = Target) & move = Up: Free;
+    x5_3 = Box & (x5_4 = Agent | x5_4 = AgentOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Left: Agent;
+    x5_3 = Box & (x6_3 = Agent | x6_3 = AgentOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Up: Agent;
+    x5_3 = Box & (x5_2 = Agent | x5_2 = AgentOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Right : Agent;
+    x5_3 = Box & (x4_3 = Agent | x4_3 = AgentOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Down : Agent;
+    x5_3 = Target & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x5_3 = Target & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x5_3 = Target & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x5_3 = Target & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x5_3 = Target & (x5_4 = Box | x5_4 = BoxOnTarget) & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x5_3 = Target & (x6_3 = Box | x6_3 = BoxOnTarget) & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x5_3 = Target & (x5_2 = Box | x5_2 = BoxOnTarget) & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x5_3 = Target & (x4_3 = Box | x4_3 = BoxOnTarget) & (x3_3 = Agent | x3_3 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x5_3 = AgentOnTarget & (x5_4 = Free | x5_4 = Target) & move = Right: Target;
+    x5_3 = AgentOnTarget & (x6_3 = Free | x6_3 = Target) & move = Down: Target;
+    x5_3 = AgentOnTarget & (x5_2 = Free | x5_2 = Target) & move = Left : Target;
+    x5_3 = AgentOnTarget & (x4_3 = Free | x4_3 = Target) & move = Up : Target;
+    x5_3 = BoxOnTarget & (x5_4 = Agent | x5_4 = AgentOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Left: AgentOnTarget;
+    x5_3 = BoxOnTarget & (x6_3 = Agent | x6_3 = AgentOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Up: AgentOnTarget;
+    x5_3 = BoxOnTarget & (x5_2 = Agent | x5_2 = AgentOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Right : AgentOnTarget;
+    x5_3 = BoxOnTarget & (x4_3 = Agent | x4_3 = AgentOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Down : AgentOnTarget;
+    TRUE : x5_3;
+  esac;
+  next(x5_4) := case
+    x5_4 = Wall: Wall;
+    x5_4 = Free & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Left: Agent;
+    x5_4 = Free & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Up: Agent;
+    x5_4 = Free & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Right : Agent;
+    x5_4 = Free & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Down : Agent;
+    x5_4 = Free & (x5_5 = Box | x5_5 = BoxOnTarget) & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Left: Box;
+    x5_4 = Free & (x6_4 = Box | x6_4 = BoxOnTarget) & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Up: Box;
+    x5_4 = Free & (x5_3 = Box | x5_3 = BoxOnTarget) & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Right : Box;
+    x5_4 = Free & (x4_4 = Box | x4_4 = BoxOnTarget) & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Down : Box;
+    x5_4 = Agent & (x5_5 = Free | x5_5 = Target) & move = Right: Free;
+    x5_4 = Agent & (x6_4 = Free | x6_4 = Target) & move = Down: Free;
+    x5_4 = Agent & (x5_3 = Free | x5_3 = Target) & move = Left : Free;
+    x5_4 = Agent & (x4_4= Free | x4_4 = Target) & move = Up : Free;
+    x5_4 = Agent &  (x5_5 = Box | x5_5 = BoxOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Right: Free;
+    x5_4 = Agent & (x6_4 = Box | x6_4 = BoxOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Down: Free;
+    x5_4 = Agent & (x5_3 = Box | x5_3 = BoxOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Left: Free;
+    x5_4 = Agent & (x4_4 = Box | x4_4 = BoxOnTarget) & (x3_4 = Free | x3_4 = Target) & move = Up: Free;
+    x5_4 = Box & (x5_5 = Agent | x5_5 = AgentOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Left: Agent;
+    x5_4 = Box & (x6_4 = Agent | x6_4 = AgentOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Up: Agent;
+    x5_4 = Box & (x5_3 = Agent | x5_3 = AgentOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Right : Agent;
+    x5_4 = Box & (x4_4 = Agent | x4_4 = AgentOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Down : Agent;
+    x5_4 = Target & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x5_4 = Target & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x5_4 = Target & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x5_4 = Target & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x5_4 = Target & (x5_5 = Box | x5_5 = BoxOnTarget) & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x5_4 = Target & (x6_4 = Box | x6_4 = BoxOnTarget) & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x5_4 = Target & (x5_3 = Box | x5_3 = BoxOnTarget) & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x5_4 = Target & (x4_4 = Box | x4_4 = BoxOnTarget) & (x3_4 = Agent | x3_4 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x5_4 = AgentOnTarget & (x5_5 = Free | x5_5 = Target) & move = Right: Target;
+    x5_4 = AgentOnTarget & (x6_4 = Free | x6_4 = Target) & move = Down: Target;
+    x5_4 = AgentOnTarget & (x5_3 = Free | x5_3 = Target) & move = Left : Target;
+    x5_4 = AgentOnTarget & (x4_4 = Free | x4_4 = Target) & move = Up : Target;
+    x5_4 = BoxOnTarget & (x5_5 = Agent | x5_5 = AgentOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Left: AgentOnTarget;
+    x5_4 = BoxOnTarget & (x6_4 = Agent | x6_4 = AgentOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Up: AgentOnTarget;
+    x5_4 = BoxOnTarget & (x5_3 = Agent | x5_3 = AgentOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Right : AgentOnTarget;
+    x5_4 = BoxOnTarget & (x4_4 = Agent | x4_4 = AgentOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Down : AgentOnTarget;
+    TRUE : x5_4;
+  esac;
+  next(x5_5) := case
+    x5_5 = Wall: Wall;
+    x5_5 = Free & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Left: Agent;
+    x5_5 = Free & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Up: Agent;
+    x5_5 = Free & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Right : Agent;
+    x5_5 = Free & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Down : Agent;
+    x5_5 = Free & (x5_6 = Box | x5_6 = BoxOnTarget) & (x5_7 = Agent | x5_7 = AgentOnTarget) & move = Left: Box;
+    x5_5 = Free & (x6_5 = Box | x6_5 = BoxOnTarget) & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Up: Box;
+    x5_5 = Free & (x5_4 = Box | x5_4 = BoxOnTarget) & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Right : Box;
+    x5_5 = Free & (x4_5 = Box | x4_5 = BoxOnTarget) & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Down : Box;
+    x5_5 = Agent & (x5_6 = Free | x5_6 = Target) & move = Right: Free;
+    x5_5 = Agent & (x6_5 = Free | x6_5 = Target) & move = Down: Free;
+    x5_5 = Agent & (x5_4 = Free | x5_4 = Target) & move = Left : Free;
+    x5_5 = Agent & (x4_5= Free | x4_5 = Target) & move = Up : Free;
+    x5_5 = Agent &  (x5_6 = Box | x5_6 = BoxOnTarget) & (x5_7 = Free | x5_7 = Target) & move = Right: Free;
+    x5_5 = Agent & (x6_5 = Box | x6_5 = BoxOnTarget) & (x7_5 = Free | x7_5 = Target) & move = Down: Free;
+    x5_5 = Agent & (x5_4 = Box | x5_4 = BoxOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Left: Free;
+    x5_5 = Agent & (x4_5 = Box | x4_5 = BoxOnTarget) & (x3_5 = Free | x3_5 = Target) & move = Up: Free;
+    x5_5 = Box & (x5_6 = Agent | x5_6 = AgentOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Left: Agent;
+    x5_5 = Box & (x6_5 = Agent | x6_5 = AgentOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Up: Agent;
+    x5_5 = Box & (x5_4 = Agent | x5_4 = AgentOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Right : Agent;
+    x5_5 = Box & (x4_5 = Agent | x4_5 = AgentOnTarget) & (x6_5 = Free | x6_5 = Target) & move = Down : Agent;
+    x5_5 = Target & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x5_5 = Target & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x5_5 = Target & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x5_5 = Target & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x5_5 = Target & (x5_6 = Box | x5_6 = BoxOnTarget) & (x5_7 = Agent | x5_7 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x5_5 = Target & (x6_5 = Box | x6_5 = BoxOnTarget) & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x5_5 = Target & (x5_4 = Box | x5_4 = BoxOnTarget) & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x5_5 = Target & (x4_5 = Box | x4_5 = BoxOnTarget) & (x3_5 = Agent | x3_5 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x5_5 = AgentOnTarget & (x5_6 = Free | x5_6 = Target) & move = Right: Target;
+    x5_5 = AgentOnTarget & (x6_5 = Free | x6_5 = Target) & move = Down: Target;
+    x5_5 = AgentOnTarget & (x5_4 = Free | x5_4 = Target) & move = Left : Target;
+    x5_5 = AgentOnTarget & (x4_5 = Free | x4_5 = Target) & move = Up : Target;
+    x5_5 = BoxOnTarget & (x5_6 = Agent | x5_6 = AgentOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Left: AgentOnTarget;
+    x5_5 = BoxOnTarget & (x6_5 = Agent | x6_5 = AgentOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Up: AgentOnTarget;
+    x5_5 = BoxOnTarget & (x5_4 = Agent | x5_4 = AgentOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Right : AgentOnTarget;
+    x5_5 = BoxOnTarget & (x4_5 = Agent | x4_5 = AgentOnTarget) & (x6_5 = Free | x6_5 = Target) & move = Down : AgentOnTarget;
+    TRUE : x5_5;
+  esac;
+  next(x5_6) := case
+    x5_6 = Wall: Wall;
+    x5_6 = Free & (x5_7 = Agent | x5_7 = AgentOnTarget) & move = Left: Agent;
+    x5_6 = Free & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Up: Agent;
+    x5_6 = Free & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Right : Agent;
+    x5_6 = Free & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Down : Agent;
+    x5_6 = Free & (x6_6 = Box | x6_6 = BoxOnTarget) & (x7_6 = Agent | x7_6 = AgentOnTarget) & move = Up: Box;
+    x5_6 = Free & (x5_5 = Box | x5_5 = BoxOnTarget) & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Right : Box;
+    x5_6 = Free & (x4_6 = Box | x4_6 = BoxOnTarget) & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Down : Box;
+    x5_6 = Agent & (x5_7 = Free | x5_7 = Target) & move = Right: Free;
+    x5_6 = Agent & (x6_6 = Free | x6_6 = Target) & move = Down: Free;
+    x5_6 = Agent & (x5_5 = Free | x5_5 = Target) & move = Left : Free;
+    x5_6 = Agent & (x4_6= Free | x4_6 = Target) & move = Up : Free;
+    x5_6 = Agent & (x6_6 = Box | x6_6 = BoxOnTarget) & (x7_6 = Free | x7_6 = Target) & move = Down: Free;
+    x5_6 = Agent & (x5_5 = Box | x5_5 = BoxOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Left: Free;
+    x5_6 = Agent & (x4_6 = Box | x4_6 = BoxOnTarget) & (x3_6 = Free | x3_6 = Target) & move = Up: Free;
+    x5_6 = Box & (x5_7 = Agent | x5_7 = AgentOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Left: Agent;
+    x5_6 = Box & (x6_6 = Agent | x6_6 = AgentOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Up: Agent;
+    x5_6 = Box & (x5_5 = Agent | x5_5 = AgentOnTarget) & (x5_7 = Free | x5_7 = Target) & move = Right : Agent;
+    x5_6 = Box & (x4_6 = Agent | x4_6 = AgentOnTarget) & (x6_6 = Free | x6_6 = Target) & move = Down : Agent;
+    x5_6 = Target & (x5_7 = Agent | x5_7 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x5_6 = Target & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x5_6 = Target & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x5_6 = Target & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x5_6 = Target & (x6_6 = Box | x6_6 = BoxOnTarget) & (x7_6 = Agent | x7_6 = AgentOnTarget) & move = Up: BoxOnTarget;
+    x5_6 = Target & (x5_5 = Box | x5_5 = BoxOnTarget) & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x5_6 = Target & (x4_6 = Box | x4_6 = BoxOnTarget) & (x3_6 = Agent | x3_6 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x5_6 = AgentOnTarget & (x5_7 = Free | x5_7 = Target) & move = Right: Target;
+    x5_6 = AgentOnTarget & (x6_6 = Free | x6_6 = Target) & move = Down: Target;
+    x5_6 = AgentOnTarget & (x5_5 = Free | x5_5 = Target) & move = Left : Target;
+    x5_6 = AgentOnTarget & (x4_6 = Free | x4_6 = Target) & move = Up : Target;
+    x5_6 = BoxOnTarget & (x5_7 = Agent | x5_7 = AgentOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Left: AgentOnTarget;
+    x5_6 = BoxOnTarget & (x6_6 = Agent | x6_6 = AgentOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Up: AgentOnTarget;
+    x5_6 = BoxOnTarget & (x5_5 = Agent | x5_5 = AgentOnTarget) & (x5_7 = Free | x5_7 = Target) & move = Right : AgentOnTarget;
+    x5_6 = BoxOnTarget & (x4_6 = Agent | x4_6 = AgentOnTarget) & (x6_6 = Free | x6_6 = Target) & move = Down : AgentOnTarget;
+    TRUE : x5_6;
+  esac;
+  next(x5_7) := case
+    x5_7 = Wall: Wall;
+    x5_7 = Free & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Right : Agent;
+    x5_7 = Free & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Down : Agent;
+    x5_7 = Free & (x5_6 = Box | x5_6 = BoxOnTarget) & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Right : Box;
+    x5_7 = Free & (x4_7 = Box | x4_7 = BoxOnTarget) & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Down : Box;
+    x5_7 = Agent & (x5_6 = Free | x5_6 = Target) & move = Left : Free;
+    x5_7 = Agent & (x4_7= Free | x4_7 = Target) & move = Up : Free;
+    x5_7 = Agent & (x5_6 = Box | x5_6 = BoxOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Left: Free;
+    x5_7 = Agent & (x4_7 = Box | x4_7 = BoxOnTarget) & (x3_7 = Free | x3_7 = Target) & move = Up: Free;
+    x5_7 = Target & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x5_7 = Target & (x4_7 = Agent | x4_7 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x5_7 = Target & (x5_6 = Box | x5_6 = BoxOnTarget) & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x5_7 = Target & (x4_7 = Box | x4_7 = BoxOnTarget) & (x3_7 = Agent | x3_7 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x5_7 = AgentOnTarget & (x5_6 = Free | x5_6 = Target) & move = Left : Target;
+    x5_7 = AgentOnTarget & (x4_7 = Free | x4_7 = Target) & move = Up : Target;
+    TRUE : x5_7;
+  esac;
+  next(x6_0) := case
+    x6_0 = Wall: Wall;
+    x6_0 = Free & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Left: Agent;
+    x6_0 = Free & (x7_0 = Agent | x7_0 = AgentOnTarget) & move = Up: Agent;
+    x6_0 = Free & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Down : Agent;
+    x6_0 = Free & (x6_1 = Box | x6_1 = BoxOnTarget) & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Left: Box;
+    x6_0 = Free & (x5_0 = Box | x5_0 = BoxOnTarget) & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Down : Box;
+    x6_0 = Agent & (x6_1 = Free | x6_1 = Target) & move = Right: Free;
+    x6_0 = Agent & (x7_0 = Free | x7_0 = Target) & move = Down: Free;
+    x6_0 = Agent & (x5_0= Free | x5_0 = Target) & move = Up : Free;
+    x6_0 = Agent &  (x6_1 = Box | x6_1 = BoxOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Right: Free;
+    x6_0 = Agent & (x5_0 = Box | x5_0 = BoxOnTarget) & (x4_0 = Free | x4_0 = Target) & move = Up: Free;
+    x6_0 = Box & (x7_0 = Agent | x7_0 = AgentOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Up: Agent;
+    x6_0 = Box & (x5_0 = Agent | x5_0 = AgentOnTarget) & (x7_0 = Free | x7_0 = Target) & move = Down : Agent;
+    x6_0 = Target & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x6_0 = Target & (x7_0 = Agent | x7_0 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x6_0 = Target & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x6_0 = Target & (x6_1 = Box | x6_1 = BoxOnTarget) & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x6_0 = Target & (x5_0 = Box | x5_0 = BoxOnTarget) & (x4_0 = Agent | x4_0 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x6_0 = AgentOnTarget & (x6_1 = Free | x6_1 = Target) & move = Right: Target;
+    x6_0 = AgentOnTarget & (x7_0 = Free | x7_0 = Target) & move = Down: Target;
+    x6_0 = AgentOnTarget & (x5_0 = Free | x5_0 = Target) & move = Up : Target;
+    x6_0 = BoxOnTarget & (x7_0 = Agent | x7_0 = AgentOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Up: AgentOnTarget;
+    x6_0 = BoxOnTarget & (x5_0 = Agent | x5_0 = AgentOnTarget) & (x7_0 = Free | x7_0 = Target) & move = Down : AgentOnTarget;
+    TRUE : x6_0;
+  esac;
+  next(x6_1) := case
+    x6_1 = Wall: Wall;
+    x6_1 = Free & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Left: Agent;
+    x6_1 = Free & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Up: Agent;
+    x6_1 = Free & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Right : Agent;
+    x6_1 = Free & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Down : Agent;
+    x6_1 = Free & (x6_2 = Box | x6_2 = BoxOnTarget) & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Left: Box;
+    x6_1 = Free & (x5_1 = Box | x5_1 = BoxOnTarget) & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Down : Box;
+    x6_1 = Agent & (x6_2 = Free | x6_2 = Target) & move = Right: Free;
+    x6_1 = Agent & (x7_1 = Free | x7_1 = Target) & move = Down: Free;
+    x6_1 = Agent & (x6_0 = Free | x6_0 = Target) & move = Left : Free;
+    x6_1 = Agent & (x5_1= Free | x5_1 = Target) & move = Up : Free;
+    x6_1 = Agent &  (x6_2 = Box | x6_2 = BoxOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Right: Free;
+    x6_1 = Agent & (x5_1 = Box | x5_1 = BoxOnTarget) & (x4_1 = Free | x4_1 = Target) & move = Up: Free;
+    x6_1 = Box & (x6_2 = Agent | x6_2 = AgentOnTarget) & (x6_0 = Free | x6_0 = Target) & move = Left: Agent;
+    x6_1 = Box & (x7_1 = Agent | x7_1 = AgentOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Up: Agent;
+    x6_1 = Box & (x6_0 = Agent | x6_0 = AgentOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Right : Agent;
+    x6_1 = Box & (x5_1 = Agent | x5_1 = AgentOnTarget) & (x7_1 = Free | x7_1 = Target) & move = Down : Agent;
+    x6_1 = Target & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x6_1 = Target & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x6_1 = Target & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x6_1 = Target & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x6_1 = Target & (x6_2 = Box | x6_2 = BoxOnTarget) & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x6_1 = Target & (x5_1 = Box | x5_1 = BoxOnTarget) & (x4_1 = Agent | x4_1 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x6_1 = AgentOnTarget & (x6_2 = Free | x6_2 = Target) & move = Right: Target;
+    x6_1 = AgentOnTarget & (x7_1 = Free | x7_1 = Target) & move = Down: Target;
+    x6_1 = AgentOnTarget & (x6_0 = Free | x6_0 = Target) & move = Left : Target;
+    x6_1 = AgentOnTarget & (x5_1 = Free | x5_1 = Target) & move = Up : Target;
+    x6_1 = BoxOnTarget & (x6_2 = Agent | x6_2 = AgentOnTarget) & (x6_0 = Free | x6_0 = Target) & move = Left: AgentOnTarget;
+    x6_1 = BoxOnTarget & (x7_1 = Agent | x7_1 = AgentOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Up: AgentOnTarget;
+    x6_1 = BoxOnTarget & (x6_0 = Agent | x6_0 = AgentOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Right : AgentOnTarget;
+    x6_1 = BoxOnTarget & (x5_1 = Agent | x5_1 = AgentOnTarget) & (x7_1 = Free | x7_1 = Target) & move = Down : AgentOnTarget;
+    TRUE : x6_1;
+  esac;
+  next(x6_2) := case
+    x6_2 = Wall: Wall;
+    x6_2 = Free & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Left: Agent;
+    x6_2 = Free & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Up: Agent;
+    x6_2 = Free & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Right : Agent;
+    x6_2 = Free & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Down : Agent;
+    x6_2 = Free & (x6_3 = Box | x6_3 = BoxOnTarget) & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Left: Box;
+    x6_2 = Free & (x6_1 = Box | x6_1 = BoxOnTarget) & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Right : Box;
+    x6_2 = Free & (x5_2 = Box | x5_2 = BoxOnTarget) & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Down : Box;
+    x6_2 = Agent & (x6_3 = Free | x6_3 = Target) & move = Right: Free;
+    x6_2 = Agent & (x7_2 = Free | x7_2 = Target) & move = Down: Free;
+    x6_2 = Agent & (x6_1 = Free | x6_1 = Target) & move = Left : Free;
+    x6_2 = Agent & (x5_2= Free | x5_2 = Target) & move = Up : Free;
+    x6_2 = Agent &  (x6_3 = Box | x6_3 = BoxOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Right: Free;
+    x6_2 = Agent & (x6_1 = Box | x6_1 = BoxOnTarget) & (x6_0 = Free | x6_0 = Target) & move = Left: Free;
+    x6_2 = Agent & (x5_2 = Box | x5_2 = BoxOnTarget) & (x4_2 = Free | x4_2 = Target) & move = Up: Free;
+    x6_2 = Box & (x6_3 = Agent | x6_3 = AgentOnTarget) & (x6_1 = Free | x6_1 = Target) & move = Left: Agent;
+    x6_2 = Box & (x7_2 = Agent | x7_2 = AgentOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Up: Agent;
+    x6_2 = Box & (x6_1 = Agent | x6_1 = AgentOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Right : Agent;
+    x6_2 = Box & (x5_2 = Agent | x5_2 = AgentOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Down : Agent;
+    x6_2 = Target & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x6_2 = Target & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x6_2 = Target & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x6_2 = Target & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x6_2 = Target & (x6_3 = Box | x6_3 = BoxOnTarget) & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x6_2 = Target & (x6_1 = Box | x6_1 = BoxOnTarget) & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x6_2 = Target & (x5_2 = Box | x5_2 = BoxOnTarget) & (x4_2 = Agent | x4_2 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x6_2 = AgentOnTarget & (x6_3 = Free | x6_3 = Target) & move = Right: Target;
+    x6_2 = AgentOnTarget & (x7_2 = Free | x7_2 = Target) & move = Down: Target;
+    x6_2 = AgentOnTarget & (x6_1 = Free | x6_1 = Target) & move = Left : Target;
+    x6_2 = AgentOnTarget & (x5_2 = Free | x5_2 = Target) & move = Up : Target;
+    x6_2 = BoxOnTarget & (x6_3 = Agent | x6_3 = AgentOnTarget) & (x6_1 = Free | x6_1 = Target) & move = Left: AgentOnTarget;
+    x6_2 = BoxOnTarget & (x7_2 = Agent | x7_2 = AgentOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Up: AgentOnTarget;
+    x6_2 = BoxOnTarget & (x6_1 = Agent | x6_1 = AgentOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Right : AgentOnTarget;
+    x6_2 = BoxOnTarget & (x5_2 = Agent | x5_2 = AgentOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Down : AgentOnTarget;
+    TRUE : x6_2;
+  esac;
+  next(x6_3) := case
+    x6_3 = Wall: Wall;
+    x6_3 = Free & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Left: Agent;
+    x6_3 = Free & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Up: Agent;
+    x6_3 = Free & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Right : Agent;
+    x6_3 = Free & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Down : Agent;
+    x6_3 = Free & (x6_4 = Box | x6_4 = BoxOnTarget) & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Left: Box;
+    x6_3 = Free & (x6_2 = Box | x6_2 = BoxOnTarget) & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Right : Box;
+    x6_3 = Free & (x5_3 = Box | x5_3 = BoxOnTarget) & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Down : Box;
+    x6_3 = Agent & (x6_4 = Free | x6_4 = Target) & move = Right: Free;
+    x6_3 = Agent & (x7_3 = Free | x7_3 = Target) & move = Down: Free;
+    x6_3 = Agent & (x6_2 = Free | x6_2 = Target) & move = Left : Free;
+    x6_3 = Agent & (x5_3= Free | x5_3 = Target) & move = Up : Free;
+    x6_3 = Agent &  (x6_4 = Box | x6_4 = BoxOnTarget) & (x6_5 = Free | x6_5 = Target) & move = Right: Free;
+    x6_3 = Agent & (x6_2 = Box | x6_2 = BoxOnTarget) & (x6_1 = Free | x6_1 = Target) & move = Left: Free;
+    x6_3 = Agent & (x5_3 = Box | x5_3 = BoxOnTarget) & (x4_3 = Free | x4_3 = Target) & move = Up: Free;
+    x6_3 = Box & (x6_4 = Agent | x6_4 = AgentOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Left: Agent;
+    x6_3 = Box & (x7_3 = Agent | x7_3 = AgentOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Up: Agent;
+    x6_3 = Box & (x6_2 = Agent | x6_2 = AgentOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Right : Agent;
+    x6_3 = Box & (x5_3 = Agent | x5_3 = AgentOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Down : Agent;
+    x6_3 = Target & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x6_3 = Target & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x6_3 = Target & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x6_3 = Target & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x6_3 = Target & (x6_4 = Box | x6_4 = BoxOnTarget) & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x6_3 = Target & (x6_2 = Box | x6_2 = BoxOnTarget) & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x6_3 = Target & (x5_3 = Box | x5_3 = BoxOnTarget) & (x4_3 = Agent | x4_3 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x6_3 = AgentOnTarget & (x6_4 = Free | x6_4 = Target) & move = Right: Target;
+    x6_3 = AgentOnTarget & (x7_3 = Free | x7_3 = Target) & move = Down: Target;
+    x6_3 = AgentOnTarget & (x6_2 = Free | x6_2 = Target) & move = Left : Target;
+    x6_3 = AgentOnTarget & (x5_3 = Free | x5_3 = Target) & move = Up : Target;
+    x6_3 = BoxOnTarget & (x6_4 = Agent | x6_4 = AgentOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Left: AgentOnTarget;
+    x6_3 = BoxOnTarget & (x7_3 = Agent | x7_3 = AgentOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Up: AgentOnTarget;
+    x6_3 = BoxOnTarget & (x6_2 = Agent | x6_2 = AgentOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Right : AgentOnTarget;
+    x6_3 = BoxOnTarget & (x5_3 = Agent | x5_3 = AgentOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Down : AgentOnTarget;
+    TRUE : x6_3;
+  esac;
+  next(x6_4) := case
+    x6_4 = Wall: Wall;
+    x6_4 = Free & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Left: Agent;
+    x6_4 = Free & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Up: Agent;
+    x6_4 = Free & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Right : Agent;
+    x6_4 = Free & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Down : Agent;
+    x6_4 = Free & (x6_5 = Box | x6_5 = BoxOnTarget) & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Left: Box;
+    x6_4 = Free & (x6_3 = Box | x6_3 = BoxOnTarget) & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Right : Box;
+    x6_4 = Free & (x5_4 = Box | x5_4 = BoxOnTarget) & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Down : Box;
+    x6_4 = Agent & (x6_5 = Free | x6_5 = Target) & move = Right: Free;
+    x6_4 = Agent & (x7_4 = Free | x7_4 = Target) & move = Down: Free;
+    x6_4 = Agent & (x6_3 = Free | x6_3 = Target) & move = Left : Free;
+    x6_4 = Agent & (x5_4= Free | x5_4 = Target) & move = Up : Free;
+    x6_4 = Agent &  (x6_5 = Box | x6_5 = BoxOnTarget) & (x6_6 = Free | x6_6 = Target) & move = Right: Free;
+    x6_4 = Agent & (x6_3 = Box | x6_3 = BoxOnTarget) & (x6_2 = Free | x6_2 = Target) & move = Left: Free;
+    x6_4 = Agent & (x5_4 = Box | x5_4 = BoxOnTarget) & (x4_4 = Free | x4_4 = Target) & move = Up: Free;
+    x6_4 = Box & (x6_5 = Agent | x6_5 = AgentOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Left: Agent;
+    x6_4 = Box & (x7_4 = Agent | x7_4 = AgentOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Up: Agent;
+    x6_4 = Box & (x6_3 = Agent | x6_3 = AgentOnTarget) & (x6_5 = Free | x6_5 = Target) & move = Right : Agent;
+    x6_4 = Box & (x5_4 = Agent | x5_4 = AgentOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Down : Agent;
+    x6_4 = Target & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x6_4 = Target & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x6_4 = Target & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x6_4 = Target & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x6_4 = Target & (x6_5 = Box | x6_5 = BoxOnTarget) & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x6_4 = Target & (x6_3 = Box | x6_3 = BoxOnTarget) & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x6_4 = Target & (x5_4 = Box | x5_4 = BoxOnTarget) & (x4_4 = Agent | x4_4 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x6_4 = AgentOnTarget & (x6_5 = Free | x6_5 = Target) & move = Right: Target;
+    x6_4 = AgentOnTarget & (x7_4 = Free | x7_4 = Target) & move = Down: Target;
+    x6_4 = AgentOnTarget & (x6_3 = Free | x6_3 = Target) & move = Left : Target;
+    x6_4 = AgentOnTarget & (x5_4 = Free | x5_4 = Target) & move = Up : Target;
+    x6_4 = BoxOnTarget & (x6_5 = Agent | x6_5 = AgentOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Left: AgentOnTarget;
+    x6_4 = BoxOnTarget & (x7_4 = Agent | x7_4 = AgentOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Up: AgentOnTarget;
+    x6_4 = BoxOnTarget & (x6_3 = Agent | x6_3 = AgentOnTarget) & (x6_5 = Free | x6_5 = Target) & move = Right : AgentOnTarget;
+    x6_4 = BoxOnTarget & (x5_4 = Agent | x5_4 = AgentOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Down : AgentOnTarget;
+    TRUE : x6_4;
+  esac;
+  next(x6_5) := case
+    x6_5 = Wall: Wall;
+    x6_5 = Free & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Left: Agent;
+    x6_5 = Free & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Up: Agent;
+    x6_5 = Free & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Right : Agent;
+    x6_5 = Free & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Down : Agent;
+    x6_5 = Free & (x6_4 = Box | x6_4 = BoxOnTarget) & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Right : Box;
+    x6_5 = Free & (x5_5 = Box | x5_5 = BoxOnTarget) & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Down : Box;
+    x6_5 = Agent & (x6_6 = Free | x6_6 = Target) & move = Right: Free;
+    x6_5 = Agent & (x7_5 = Free | x7_5 = Target) & move = Down: Free;
+    x6_5 = Agent & (x6_4 = Free | x6_4 = Target) & move = Left : Free;
+    x6_5 = Agent & (x5_5= Free | x5_5 = Target) & move = Up : Free;
+    x6_5 = Agent & (x6_4 = Box | x6_4 = BoxOnTarget) & (x6_3 = Free | x6_3 = Target) & move = Left: Free;
+    x6_5 = Agent & (x5_5 = Box | x5_5 = BoxOnTarget) & (x4_5 = Free | x4_5 = Target) & move = Up: Free;
+    x6_5 = Box & (x6_6 = Agent | x6_6 = AgentOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Left: Agent;
+    x6_5 = Box & (x7_5 = Agent | x7_5 = AgentOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Up: Agent;
+    x6_5 = Box & (x6_4 = Agent | x6_4 = AgentOnTarget) & (x6_6 = Free | x6_6 = Target) & move = Right : Agent;
+    x6_5 = Box & (x5_5 = Agent | x5_5 = AgentOnTarget) & (x7_5 = Free | x7_5 = Target) & move = Down : Agent;
+    x6_5 = Target & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x6_5 = Target & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x6_5 = Target & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x6_5 = Target & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x6_5 = Target & (x6_4 = Box | x6_4 = BoxOnTarget) & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x6_5 = Target & (x5_5 = Box | x5_5 = BoxOnTarget) & (x4_5 = Agent | x4_5 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x6_5 = AgentOnTarget & (x6_6 = Free | x6_6 = Target) & move = Right: Target;
+    x6_5 = AgentOnTarget & (x7_5 = Free | x7_5 = Target) & move = Down: Target;
+    x6_5 = AgentOnTarget & (x6_4 = Free | x6_4 = Target) & move = Left : Target;
+    x6_5 = AgentOnTarget & (x5_5 = Free | x5_5 = Target) & move = Up : Target;
+    x6_5 = BoxOnTarget & (x6_6 = Agent | x6_6 = AgentOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Left: AgentOnTarget;
+    x6_5 = BoxOnTarget & (x7_5 = Agent | x7_5 = AgentOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Up: AgentOnTarget;
+    x6_5 = BoxOnTarget & (x6_4 = Agent | x6_4 = AgentOnTarget) & (x6_6 = Free | x6_6 = Target) & move = Right : AgentOnTarget;
+    x6_5 = BoxOnTarget & (x5_5 = Agent | x5_5 = AgentOnTarget) & (x7_5 = Free | x7_5 = Target) & move = Down : AgentOnTarget;
+    TRUE : x6_5;
+  esac;
+  next(x6_6) := case
+    x6_6 = Wall: Wall;
+    x6_6 = Free & (x7_6 = Agent | x7_6 = AgentOnTarget) & move = Up: Agent;
+    x6_6 = Free & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Right : Agent;
+    x6_6 = Free & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Down : Agent;
+    x6_6 = Free & (x6_5 = Box | x6_5 = BoxOnTarget) & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Right : Box;
+    x6_6 = Free & (x5_6 = Box | x5_6 = BoxOnTarget) & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Down : Box;
+    x6_6 = Agent & (x7_6 = Free | x7_6 = Target) & move = Down: Free;
+    x6_6 = Agent & (x6_5 = Free | x6_5 = Target) & move = Left : Free;
+    x6_6 = Agent & (x5_6= Free | x5_6 = Target) & move = Up : Free;
+    x6_6 = Agent & (x6_5 = Box | x6_5 = BoxOnTarget) & (x6_4 = Free | x6_4 = Target) & move = Left: Free;
+    x6_6 = Agent & (x5_6 = Box | x5_6 = BoxOnTarget) & (x4_6 = Free | x4_6 = Target) & move = Up: Free;
+    x6_6 = Box & (x7_6 = Agent | x7_6 = AgentOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Up: Agent;
+    x6_6 = Box & (x5_6 = Agent | x5_6 = AgentOnTarget) & (x7_6 = Free | x7_6 = Target) & move = Down : Agent;
+    x6_6 = Target & (x7_6 = Agent | x7_6 = AgentOnTarget) & move = Up: AgentOnTarget;
+    x6_6 = Target & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x6_6 = Target & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x6_6 = Target & (x6_5 = Box | x6_5 = BoxOnTarget) & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x6_6 = Target & (x5_6 = Box | x5_6 = BoxOnTarget) & (x4_6 = Agent | x4_6 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x6_6 = AgentOnTarget & (x7_6 = Free | x7_6 = Target) & move = Down: Target;
+    x6_6 = AgentOnTarget & (x6_5 = Free | x6_5 = Target) & move = Left : Target;
+    x6_6 = AgentOnTarget & (x5_6 = Free | x5_6 = Target) & move = Up : Target;
+    x6_6 = BoxOnTarget & (x7_6 = Agent | x7_6 = AgentOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Up: AgentOnTarget;
+    x6_6 = BoxOnTarget & (x5_6 = Agent | x5_6 = AgentOnTarget) & (x7_6 = Free | x7_6 = Target) & move = Down : AgentOnTarget;
+    TRUE : x6_6;
+  esac;
+  next(x7_0) := case
+    x7_0 = Wall: Wall;
+    x7_0 = Free & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Left: Agent;
+    x7_0 = Free & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Down : Agent;
+    x7_0 = Free & (x7_1 = Box | x7_1 = BoxOnTarget) & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Left: Box;
+    x7_0 = Free & (x6_0 = Box | x6_0 = BoxOnTarget) & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Down : Box;
+    x7_0 = Agent & (x7_1 = Free | x7_1 = Target) & move = Right: Free;
+    x7_0 = Agent & (x6_0= Free | x6_0 = Target) & move = Up : Free;
+    x7_0 = Agent &  (x7_1 = Box | x7_1 = BoxOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Right: Free;
+    x7_0 = Agent & (x6_0 = Box | x6_0 = BoxOnTarget) & (x5_0 = Free | x5_0 = Target) & move = Up: Free;
+    x7_0 = Target & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x7_0 = Target & (x6_0 = Agent | x6_0 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x7_0 = Target & (x7_1 = Box | x7_1 = BoxOnTarget) & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x7_0 = Target & (x6_0 = Box | x6_0 = BoxOnTarget) & (x5_0 = Agent | x5_0 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x7_0 = AgentOnTarget & (x7_1 = Free | x7_1 = Target) & move = Right: Target;
+    x7_0 = AgentOnTarget & (x6_0 = Free | x6_0 = Target) & move = Up : Target;
+    TRUE : x7_0;
+  esac;
+  next(x7_1) := case
+    x7_1 = Wall: Wall;
+    x7_1 = Free & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Left: Agent;
+    x7_1 = Free & (x7_0 = Agent | x7_0 = AgentOnTarget) & move = Right : Agent;
+    x7_1 = Free & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Down : Agent;
+    x7_1 = Free & (x7_2 = Box | x7_2 = BoxOnTarget) & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Left: Box;
+    x7_1 = Free & (x6_1 = Box | x6_1 = BoxOnTarget) & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Down : Box;
+    x7_1 = Agent & (x7_2 = Free | x7_2 = Target) & move = Right: Free;
+    x7_1 = Agent & (x7_0 = Free | x7_0 = Target) & move = Left : Free;
+    x7_1 = Agent & (x6_1= Free | x6_1 = Target) & move = Up : Free;
+    x7_1 = Agent &  (x7_2 = Box | x7_2 = BoxOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Right: Free;
+    x7_1 = Agent & (x6_1 = Box | x6_1 = BoxOnTarget) & (x5_1 = Free | x5_1 = Target) & move = Up: Free;
+    x7_1 = Box & (x7_2 = Agent | x7_2 = AgentOnTarget) & (x7_0 = Free | x7_0 = Target) & move = Left: Agent;
+    x7_1 = Box & (x7_0 = Agent | x7_0 = AgentOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Right : Agent;
+    x7_1 = Target & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x7_1 = Target & (x7_0 = Agent | x7_0 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x7_1 = Target & (x6_1 = Agent | x6_1 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x7_1 = Target & (x7_2 = Box | x7_2 = BoxOnTarget) & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x7_1 = Target & (x6_1 = Box | x6_1 = BoxOnTarget) & (x5_1 = Agent | x5_1 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x7_1 = AgentOnTarget & (x7_2 = Free | x7_2 = Target) & move = Right: Target;
+    x7_1 = AgentOnTarget & (x7_0 = Free | x7_0 = Target) & move = Left : Target;
+    x7_1 = AgentOnTarget & (x6_1 = Free | x6_1 = Target) & move = Up : Target;
+    x7_1 = BoxOnTarget & (x7_2 = Agent | x7_2 = AgentOnTarget) & (x7_0 = Free | x7_0 = Target) & move = Left: AgentOnTarget;
+    x7_1 = BoxOnTarget & (x7_0 = Agent | x7_0 = AgentOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Right : AgentOnTarget;
+    TRUE : x7_1;
+  esac;
+  next(x7_2) := case
+    x7_2 = Wall: Wall;
+    x7_2 = Free & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Left: Agent;
+    x7_2 = Free & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Right : Agent;
+    x7_2 = Free & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Down : Agent;
+    x7_2 = Free & (x7_3 = Box | x7_3 = BoxOnTarget) & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Left: Box;
+    x7_2 = Free & (x7_1 = Box | x7_1 = BoxOnTarget) & (x7_0 = Agent | x7_0 = AgentOnTarget) & move = Right : Box;
+    x7_2 = Free & (x6_2 = Box | x6_2 = BoxOnTarget) & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Down : Box;
+    x7_2 = Agent & (x7_3 = Free | x7_3 = Target) & move = Right: Free;
+    x7_2 = Agent & (x7_1 = Free | x7_1 = Target) & move = Left : Free;
+    x7_2 = Agent & (x6_2= Free | x6_2 = Target) & move = Up : Free;
+    x7_2 = Agent &  (x7_3 = Box | x7_3 = BoxOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Right: Free;
+    x7_2 = Agent & (x7_1 = Box | x7_1 = BoxOnTarget) & (x7_0 = Free | x7_0 = Target) & move = Left: Free;
+    x7_2 = Agent & (x6_2 = Box | x6_2 = BoxOnTarget) & (x5_2 = Free | x5_2 = Target) & move = Up: Free;
+    x7_2 = Box & (x7_3 = Agent | x7_3 = AgentOnTarget) & (x7_1 = Free | x7_1 = Target) & move = Left: Agent;
+    x7_2 = Box & (x7_1 = Agent | x7_1 = AgentOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Right : Agent;
+    x7_2 = Target & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x7_2 = Target & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x7_2 = Target & (x6_2 = Agent | x6_2 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x7_2 = Target & (x7_3 = Box | x7_3 = BoxOnTarget) & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x7_2 = Target & (x7_1 = Box | x7_1 = BoxOnTarget) & (x7_0 = Agent | x7_0 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x7_2 = Target & (x6_2 = Box | x6_2 = BoxOnTarget) & (x5_2 = Agent | x5_2 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x7_2 = AgentOnTarget & (x7_3 = Free | x7_3 = Target) & move = Right: Target;
+    x7_2 = AgentOnTarget & (x7_1 = Free | x7_1 = Target) & move = Left : Target;
+    x7_2 = AgentOnTarget & (x6_2 = Free | x6_2 = Target) & move = Up : Target;
+    x7_2 = BoxOnTarget & (x7_3 = Agent | x7_3 = AgentOnTarget) & (x7_1 = Free | x7_1 = Target) & move = Left: AgentOnTarget;
+    x7_2 = BoxOnTarget & (x7_1 = Agent | x7_1 = AgentOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Right : AgentOnTarget;
+    TRUE : x7_2;
+  esac;
+  next(x7_3) := case
+    x7_3 = Wall: Wall;
+    x7_3 = Free & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Left: Agent;
+    x7_3 = Free & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Right : Agent;
+    x7_3 = Free & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Down : Agent;
+    x7_3 = Free & (x7_4 = Box | x7_4 = BoxOnTarget) & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Left: Box;
+    x7_3 = Free & (x7_2 = Box | x7_2 = BoxOnTarget) & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Right : Box;
+    x7_3 = Free & (x6_3 = Box | x6_3 = BoxOnTarget) & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Down : Box;
+    x7_3 = Agent & (x7_4 = Free | x7_4 = Target) & move = Right: Free;
+    x7_3 = Agent & (x7_2 = Free | x7_2 = Target) & move = Left : Free;
+    x7_3 = Agent & (x6_3= Free | x6_3 = Target) & move = Up : Free;
+    x7_3 = Agent &  (x7_4 = Box | x7_4 = BoxOnTarget) & (x7_5 = Free | x7_5 = Target) & move = Right: Free;
+    x7_3 = Agent & (x7_2 = Box | x7_2 = BoxOnTarget) & (x7_1 = Free | x7_1 = Target) & move = Left: Free;
+    x7_3 = Agent & (x6_3 = Box | x6_3 = BoxOnTarget) & (x5_3 = Free | x5_3 = Target) & move = Up: Free;
+    x7_3 = Box & (x7_4 = Agent | x7_4 = AgentOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Left: Agent;
+    x7_3 = Box & (x7_2 = Agent | x7_2 = AgentOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Right : Agent;
+    x7_3 = Target & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x7_3 = Target & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x7_3 = Target & (x6_3 = Agent | x6_3 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x7_3 = Target & (x7_4 = Box | x7_4 = BoxOnTarget) & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x7_3 = Target & (x7_2 = Box | x7_2 = BoxOnTarget) & (x7_1 = Agent | x7_1 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x7_3 = Target & (x6_3 = Box | x6_3 = BoxOnTarget) & (x5_3 = Agent | x5_3 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x7_3 = AgentOnTarget & (x7_4 = Free | x7_4 = Target) & move = Right: Target;
+    x7_3 = AgentOnTarget & (x7_2 = Free | x7_2 = Target) & move = Left : Target;
+    x7_3 = AgentOnTarget & (x6_3 = Free | x6_3 = Target) & move = Up : Target;
+    x7_3 = BoxOnTarget & (x7_4 = Agent | x7_4 = AgentOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Left: AgentOnTarget;
+    x7_3 = BoxOnTarget & (x7_2 = Agent | x7_2 = AgentOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Right : AgentOnTarget;
+    TRUE : x7_3;
+  esac;
+  next(x7_4) := case
+    x7_4 = Wall: Wall;
+    x7_4 = Free & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Left: Agent;
+    x7_4 = Free & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Right : Agent;
+    x7_4 = Free & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Down : Agent;
+    x7_4 = Free & (x7_5 = Box | x7_5 = BoxOnTarget) & (x7_6 = Agent | x7_6 = AgentOnTarget) & move = Left: Box;
+    x7_4 = Free & (x7_3 = Box | x7_3 = BoxOnTarget) & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Right : Box;
+    x7_4 = Free & (x6_4 = Box | x6_4 = BoxOnTarget) & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Down : Box;
+    x7_4 = Agent & (x7_5 = Free | x7_5 = Target) & move = Right: Free;
+    x7_4 = Agent & (x7_3 = Free | x7_3 = Target) & move = Left : Free;
+    x7_4 = Agent & (x6_4= Free | x6_4 = Target) & move = Up : Free;
+    x7_4 = Agent &  (x7_5 = Box | x7_5 = BoxOnTarget) & (x7_6 = Free | x7_6 = Target) & move = Right: Free;
+    x7_4 = Agent & (x7_3 = Box | x7_3 = BoxOnTarget) & (x7_2 = Free | x7_2 = Target) & move = Left: Free;
+    x7_4 = Agent & (x6_4 = Box | x6_4 = BoxOnTarget) & (x5_4 = Free | x5_4 = Target) & move = Up: Free;
+    x7_4 = Box & (x7_5 = Agent | x7_5 = AgentOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Left: Agent;
+    x7_4 = Box & (x7_3 = Agent | x7_3 = AgentOnTarget) & (x7_5 = Free | x7_5 = Target) & move = Right : Agent;
+    x7_4 = Target & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x7_4 = Target & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x7_4 = Target & (x6_4 = Agent | x6_4 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x7_4 = Target & (x7_5 = Box | x7_5 = BoxOnTarget) & (x7_6 = Agent | x7_6 = AgentOnTarget) & move = Left: BoxOnTarget;
+    x7_4 = Target & (x7_3 = Box | x7_3 = BoxOnTarget) & (x7_2 = Agent | x7_2 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x7_4 = Target & (x6_4 = Box | x6_4 = BoxOnTarget) & (x5_4 = Agent | x5_4 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x7_4 = AgentOnTarget & (x7_5 = Free | x7_5 = Target) & move = Right: Target;
+    x7_4 = AgentOnTarget & (x7_3 = Free | x7_3 = Target) & move = Left : Target;
+    x7_4 = AgentOnTarget & (x6_4 = Free | x6_4 = Target) & move = Up : Target;
+    x7_4 = BoxOnTarget & (x7_5 = Agent | x7_5 = AgentOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Left: AgentOnTarget;
+    x7_4 = BoxOnTarget & (x7_3 = Agent | x7_3 = AgentOnTarget) & (x7_5 = Free | x7_5 = Target) & move = Right : AgentOnTarget;
+    TRUE : x7_4;
+  esac;
+  next(x7_5) := case
+    x7_5 = Wall: Wall;
+    x7_5 = Free & (x7_6 = Agent | x7_6 = AgentOnTarget) & move = Left: Agent;
+    x7_5 = Free & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Right : Agent;
+    x7_5 = Free & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Down : Agent;
+    x7_5 = Free & (x7_4 = Box | x7_4 = BoxOnTarget) & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Right : Box;
+    x7_5 = Free & (x6_5 = Box | x6_5 = BoxOnTarget) & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Down : Box;
+    x7_5 = Agent & (x7_6 = Free | x7_6 = Target) & move = Right: Free;
+    x7_5 = Agent & (x7_4 = Free | x7_4 = Target) & move = Left : Free;
+    x7_5 = Agent & (x6_5= Free | x6_5 = Target) & move = Up : Free;
+    x7_5 = Agent & (x7_4 = Box | x7_4 = BoxOnTarget) & (x7_3 = Free | x7_3 = Target) & move = Left: Free;
+    x7_5 = Agent & (x6_5 = Box | x6_5 = BoxOnTarget) & (x5_5 = Free | x5_5 = Target) & move = Up: Free;
+    x7_5 = Box & (x7_6 = Agent | x7_6 = AgentOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Left: Agent;
+    x7_5 = Box & (x7_4 = Agent | x7_4 = AgentOnTarget) & (x7_6 = Free | x7_6 = Target) & move = Right : Agent;
+    x7_5 = Target & (x7_6 = Agent | x7_6 = AgentOnTarget) & move = Left: AgentOnTarget;
+    x7_5 = Target & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x7_5 = Target & (x6_5 = Agent | x6_5 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x7_5 = Target & (x7_4 = Box | x7_4 = BoxOnTarget) & (x7_3 = Agent | x7_3 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x7_5 = Target & (x6_5 = Box | x6_5 = BoxOnTarget) & (x5_5 = Agent | x5_5 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x7_5 = AgentOnTarget & (x7_6 = Free | x7_6 = Target) & move = Right: Target;
+    x7_5 = AgentOnTarget & (x7_4 = Free | x7_4 = Target) & move = Left : Target;
+    x7_5 = AgentOnTarget & (x6_5 = Free | x6_5 = Target) & move = Up : Target;
+    x7_5 = BoxOnTarget & (x7_6 = Agent | x7_6 = AgentOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Left: AgentOnTarget;
+    x7_5 = BoxOnTarget & (x7_4 = Agent | x7_4 = AgentOnTarget) & (x7_6 = Free | x7_6 = Target) & move = Right : AgentOnTarget;
+    TRUE : x7_5;
+  esac;
+  next(x7_6) := case
+    x7_6 = Wall: Wall;
+    x7_6 = Free & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Right : Agent;
+    x7_6 = Free & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Down : Agent;
+    x7_6 = Free & (x7_5 = Box | x7_5 = BoxOnTarget) & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Right : Box;
+    x7_6 = Free & (x6_6 = Box | x6_6 = BoxOnTarget) & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Down : Box;
+    x7_6 = Agent & (x7_5 = Free | x7_5 = Target) & move = Left : Free;
+    x7_6 = Agent & (x6_6= Free | x6_6 = Target) & move = Up : Free;
+    x7_6 = Agent & (x7_5 = Box | x7_5 = BoxOnTarget) & (x7_4 = Free | x7_4 = Target) & move = Left: Free;
+    x7_6 = Agent & (x6_6 = Box | x6_6 = BoxOnTarget) & (x5_6 = Free | x5_6 = Target) & move = Up: Free;
+    x7_6 = Target & (x7_5 = Agent | x7_5 = AgentOnTarget) & move = Right : AgentOnTarget;
+    x7_6 = Target & (x6_6 = Agent | x6_6 = AgentOnTarget) & move = Down : AgentOnTarget;
+    x7_6 = Target & (x7_5 = Box | x7_5 = BoxOnTarget) & (x7_4 = Agent | x7_4 = AgentOnTarget) & move = Right : BoxOnTarget;
+    x7_6 = Target & (x6_6 = Box | x6_6 = BoxOnTarget) & (x5_6 = Agent | x5_6 = AgentOnTarget) & move = Down : BoxOnTarget;
+    x7_6 = AgentOnTarget & (x7_5 = Free | x7_5 = Target) & move = Left : Target;
+    x7_6 = AgentOnTarget & (x6_6 = Free | x6_6 = Target) & move = Up : Target;
+    TRUE : x7_6;
+  esac;
+  next(move) := {Up, Down, Left, Right};
+INVARSPEC !(
+x2_4 = BoxOnTarget & 
+x2_5 = BoxOnTarget & 
+x3_3 = BoxOnTarget
+)
\ No newline at end of file