#P14614. [2019 KAIST RUN Fall] Bigger Sokoban 40k

[2019 KAIST RUN Fall] Bigger Sokoban 40k

Description

推箱子(Sokoban)是一款著名的益智游戏,玩家在 N×MN \times M 大小的网格中移动,并将 1×11 \times 1 大小的箱子推到 1×11 \times 1 大小的目标位置。

更大推箱子(Bigger Sokoban)是推箱子的一种可能变体,但箱子和目标位置的尺寸都大于 1×11 \times 1。本题特别使用 2×22 \times 2 的尺寸作为箱子和目标位置的大小。

更大推箱子的规则与推箱子相同。网格中的每个格子是空地或墙壁。一些 2×22 \times 2 的空地区域各包含一个 2×22 \times 2 大小的箱子,而一些 2×22 \times 2 的空地区域各被标记为 2×22 \times 2 大小的目标位置。

玩家位于网格中,可以向上、下、左、右移动到相邻的空地格子,但不能穿过墙壁、箱子或网格边界。如果玩家试图移动到一个箱子的位置,箱子会被向该方向推到相邻的格子。箱子不能被推到其他箱子、墙壁或网格边界上,且箱子不能被拉动。箱子的数量等于目标位置的数量。当所有箱子都位于目标位置上时,谜题即被解决。

你的任务是设计一个需要至少 40,000 步才能解决的更大推箱子网格。为了使情况更简单,网格必须满足以下约束:

  • 1N,M,N+M1001 \leq N, M, N+M \leq 100
  • 网格包含 一个 箱子和 一个 目标位置。
  • 玩家、箱子和目标位置必须互不重叠。

Input Format

本题没有输入。

Output Format

第一行输出两个以空格分隔的整数 N,MN, M,表示网格的尺寸。

接下来的 NN 行,每行输出一个长度为 MM 的字符串,描述网格的每一行。每个字符串必须由 .\texttt{.}#\texttt{\#}P\texttt{P}B\texttt{B}S\texttt{S} 组成;每个字符分别表示空地、墙壁、玩家、箱子、目标位置。

网格必须恰好包含一个 P\texttt{P},恰好四个 B\texttt{B},以及恰好四个 S\texttt{S}B\texttt{B}S\texttt{S} 必须各自形成一个 2×22 \times 2 的正方形。当然,网格必须是可解的。

请注意,样例输出仅用于演示格式正确的输出。由于它可以在少于 40,000 步内解决,因此不是一个正确答案。

<There are no inputs>
5 6
....SS
....SS
.#BB#.
..BB.P
......