#include #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define FORD(i, a, b) for(int i = (a); i >= (b); --i) #define VAR(v, i) __typeof(i) v=(i) #define FORE(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i) #define all(v) (v).begin(),(v).end() #define PII pair #define mp make_pair #define st first #define nd second #define pb push_back #define lint long long int #define VI vector using namespace std; template void _dbg(const char *sdbg, TH h){cerr< void _dbg(const char *sdbg, TH h, TA... a) { while(*sdbg!=',')cerr<<*sdbg++;cerr<<"="< ostream &operator<<(ostream &os, vector V){ os<<"[";for(auto vv:V)os< ostream &operator<<(ostream &os, pair P) { return os << "(" << P.st << "," << P.nd << ")"; } #define debug(...) _dbg(#__VA_ARGS__, __VA_ARGS__) #define make( x) int (x); scanf("%d",&(x)); #define make2( x, y) int (x), (y); scanf("%d%d",&(x),&(y)); #define make3(x, y, z) int (x), (y), (z); scanf("%d%d%d",&(x),&(y),&(z)); #define make4(x, y, z, t) int (x), (y), (z), (t); scanf("%d%d%d%d",&(x),&(y),&(z),&(t)); #define makev(v,n) VI (v); FOR(i,0,(n)) { make(a); (v).pb(a);} #define IOS ios_base::sync_with_stdio(0) #define HEAP priority_queue #define read( x) scanf("%d",&(x)); #define read2( x, y) scanf("%d%d",&(x),&(y)); #define read3(x, y, z) scanf("%d%d%d",&(x),&(y),&(z)); #define read4(x, y, z, t) scanf("%d%d%d%d",&(x),&(y),&(z),&(t)); #define readv(v,n) FOR(i,0,(n)) { make(a); (v).pb(a);} #define jeb fflush(stdout) const int max_n = 1e5 + 5; char s[25][25]; int nr[25][25]; int n, m, k; int V = 3; double ile[405][405]; double pom[405][405]; const int die = 2; const int ex = 1; const int start = 0; int dx[] = {0,0,1,-1}; int dy[] = {1,-1,0,0}; PII tunel[25][25]; void square() { FOR(i,0,V) FOR(j,0,V) pom[i][j] = 0.; FOR(i,0,V) FOR(j,0,V) { FOR(k,0,V) pom[i][j] += ile[i][k] * ile[k][j]; } FOR(i,0,V) FOR(j,0,V) ile[i][j] = pom[i][j]; } bool inside(int x, int y) { return (x>=0 && y>=0 && x mvs; FOR(u,0,4) { int ni = i + dx[u]; int nj = j + dy[u]; if (inside(ni, nj) && nr[ni][nj]!=-1) { mvs.pb(mp(ni,nj)); } } if (mvs.size() != 0) { double p = 1./(mvs.size()); FORE(u,mvs) { ile[nr[i][j]][nr[u->st][u->nd]] += p; } } else { ile[nr[i][j]][nr[i][j]] = 1.; } } else { int xi = tunel[i][j].st; int xj = tunel[i][j].nd; vector mvs; FOR(u,0,4) { int ni = xi + dx[u]; int nj = xj + dy[u]; if (inside(ni, nj) && nr[ni][nj]!=-1) { mvs.pb(mp(ni,nj)); } } if (mvs.size() != 0) { double p = 1./(mvs.size()); FORE(u,mvs) { ile[nr[i][j]][nr[u->st][u->nd]] += p; } } else { ile[nr[i][j]][die] = 1.; } } } } FOR(j,0,20) square(); printf("%.10lf\n", ile[start][ex]); }