The blocks world is an old and well-known Al task-planning domain in which a robot arm manipulates blocks within a bounded workspace. Our
version of the blocks world, which we call the "(n, k) blocks world", has a table-top with n locations {$L_1,... L_n$} where k distinct blocks
{$B_1,..., B_k$} can be placed and stacked in various ways by the robot.
A state in the (n, k) blocks world is denoted as a list S = [$S_1,... S_n$], where $S_i$ is the list of blocks stacked at $L_i$, with the top block first in
the list ($S_i$ is an empty list [] if there are no blocks at $L_i$). An example state in a (3,4) blocks world is S = [[ ], [$B_1$, $B_3$], [$B_4$, $B_2$]].
Placing and stacking is performed using the action $M_{i \to j}$, which represents the robot moving a block at $L_i$ to $L_j$. Note:
• No fruitless moves; i.e. $M_{i \to i}$ is not allowed.
• if there is one or more blocks at $L_i$, $M_{i \to j}$ means the topmost block at $L_i$ is the one moved to $L_j$.
• if there is a stack of one or more blocks at $L_j$, $M_{i \to j}$ means the block moved from $L_i$ is placed on top of the existing stack at $L_j$.
• a move $M_{i \to j}$ is not legal if there is no block at $L_i$ to move.
For example, invoking $M_{3 \to 1}$ in state
$S_1$ = [[ ], [$B_1$, $B_3$], [$B_4$, $B_2$]] yields a new state
$S_2$ = [[$B_4$], [$B_1$, $B_3$], [$B_2$]].
*Place your answers to the parts of this question in the text cell below this one. *