罗密欧与朱丽叶的迷宫问题

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个m×n 的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n 个房间中有一些房间是封闭的,不允许任何人进入。
在迷宫中任何位置均可沿8 个方向进入未封闭的房间。罗密欧位于迷宫的(p,q)方格中,他必须找出一条通向朱丽叶所在的(r,s)方格的路。在抵达朱丽叶之前,他必须走遍所有未封闭的房间各一次,而且要使到达朱丽叶的转弯次数为最少。每改变一次前进方向算作转弯一次。请设计一个算法帮助罗密欧找出这样一条道路。

对于给定的罗密欧与朱丽叶的迷宫,计算罗密欧通向朱丽叶的所有最少转弯道路。

Input

输入数据的第一行有3 个正整数n,m,k,1≤n,m≤6,1≤k≤10分别表示迷宫的行数,列数和封闭的房间数。接下来的k行中,每行2 个正整数,表示被封闭的房间所在的行号和列号。最后的2 行,每行也有2 个正整数,分别表示罗密欧所处的方格(p,q)和朱丽叶所处的方格(r,s)。

Output

将计算出的罗密欧通向朱丽叶的最少转弯次数和有多少条不同的最少转弯道路输出。第一行是最少转弯次数。第2 行是不同的最少转弯道路数。接下来的n行每行m个数,表示迷宫的一条最少转弯道路。A[i][j]=k表示第k步到达方格(i,j);A[i][j]=-1 表示方格(i,j)是封闭的。
如果罗密欧无法通向朱丽叶则输出“No Solution!”。

Sample Input

3 4 2
1 2
3 4
1 1
2 2

Sample Output

6
7
1 -1 9 8
2 10 6 7
3 4 5 -1

Hint

 

Source