2420: Swimming Duck

Memory Limit:512 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:15 Solved:7

Description

pcf最近沉迷于一款名为Swimming Duck的游戏。在游戏中,主角GreenDuck在一块n*n大小的正方形湖面上迷路了,玩家得帮助GreenDuck从 左上角出发,抵达右下角的目的地。在湖面上有一些味道鲜美的鱼,GreenDuck在回家时会不自觉地收集这些鱼儿。同时湖中也有阻挡道路的石头,GreenDuck不能越过它们。
pcf认为这些鱼有各自的价值,因此他想让GreenDuck最大化收集到的鱼的价值。庆幸的是,这款游戏仅仅是普及组的OIER设计的,所以GreenDuck只能向右或向下移动一格,也不能走斜线。
同时,为了向好朋友baobao证明自己没有开挂,他还要找出GreenDuck的移动路线。若GreenDuck有多条路线能得到最优解,那他会优先选择向下走。

Input

第一行一个整数n,表示湖的大小为n*n。(n≤100)
接下来n行,每行一个整数ai,描述了湖面上鱼的价值。特别地,若ai为-1,表示这是一块石头。

Output

第一行:一个整数。若GreenDuck不能回到家中,输出-1;否则接下来为n*n的一个矩形,'-'代表没有经过的地方,'*'代表GreenDuck经过的地方。每行末尾有空格。答案在int范围内。

Sample Input Copy

4
1 2 2 1
-1 1 -1 1
-1 1 -1 1
-1 1 1 1

Sample Output Copy

9
* * * *
- - - *
- - - *
- - - *

HINT

【输入样例2】
3
1 1 1
1 1 1
1 1 1
【输出样例2】
5
* - -
* - -
* * *
【解题提示】
强行二维dp.......