Index: score_memo.txt
==================================================================
--- score_memo.txt
+++ score_memo.txt
@@ -6,11 +6,11 @@
 contest6     737    // 一度通り過ぎるとふさがってしまう曲がり道
 contest7     867?
 contest8    1245    // むり
 contest9    3041?
 contest10   2340    // "λの上に岩" トラップが複数
-flood1       569    // 崩すの怖がりすぎ
+flood1       937?
 flood2       281!
 flood3       852    // 溺死
 flood4       982    // むずかしい岩崩し
 flood5       561?
 trampoline1  291    // むずかしい岩崩し

Index: src/solver.d
==================================================================
--- src/solver.d
+++ src/solver.d
@@ -290,10 +290,18 @@
 		return c;
 	}
 
 	Tuple!(char,int)[] search(in Game g, in Pos s, in Pos[] gs, string death, bool danger_ok=false)
 	{
+		bool very_danger(int y, int x)
+		{
+			if(g.map[y,x] == ' ' || g.map[y,x] == 'R')
+				return false;
+			if(is_rocky(g.map[y+1,x]))
+				return true;
+			return false;
+		}
 		bool danger(int y, int x)
 		{
 			if(g.map[y,x] == ' ' || g.map[y,x] == 'R')
 				return false;
 			if(is_rocky(g.map[y+1,x]))
@@ -313,11 +321,11 @@
 
 		// avoid directly below '*'
 		Tuple!(char,int)[] tryA() {
 			const(Pos)[] q;
 			foreach(p; gs)
-				if(!danger(p.y,p.x))
+				if(!very_danger(p.y,p.x))
 					q ~= p;
 			bool[][] v = new bool[][](g.map.H+2, g.map.W+2);
 			foreach(p; q) v[p.y][p.x]=true;
 			bool first_step = true;
 			for(int step=1; q.length; ++step) {