#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<string>#include<map>#include<set>#include<iostream>#include<vector>#include<queue>using namespace std;#define sz(v) ((int)(v).size())#define rep(i, n) for (int i = 0; i < (n); ++i)#define repf(i, a, b) for (int i = (a); i <= (b); ++i)#define repd(i, a, b) for (int i = (a); i >= (b); --i)#define clr(x) memset(x,0,sizeof(x))#define clrs( x , y ) memset(x,y,sizeof(x))#define out(x) printf(#x" %dn", x)#define sqr(x) ((x) * (x))typedef long long lint;const int maxint = -1u>>1;const double eps = 1e-8;const int maxn = 10;const int max_dis = maxn * 6 * 2 + 10;const int mid_dis = maxn * 6;int sgn(const double &x) { return (x > eps) - (x < -eps); }double f[maxn][maxn][max_dis];double gao(int r, int w, int dis) { if (sgn(f[r][w][dis]) >= 0) return f[r][w][dis]; int ndis = dis - mid_dis; double &res = f[r][w][dis]; if (r == 0 && w == 0) { if (ndis > 0) return res = 1.0; else return res = 0.0; } else if (r != 0) { res = 0; repf (i, 1, 6) { res += gao(r - 1, w, dis + i) * 1.0 / 6; } return res; } else { res = 0; repf (i, 1, 6) { res += gao(r, w - 1, dis - i) * 1.0 / 6; } return res; }}int main() { int n, m; while (scanf("%d%d", &n, &m) == 2) { rep (i, maxn) rep (j, maxn) rep (k, max_dis) f[i][j][k] = -1.0; gao(n, m, mid_dis); printf("%fn", f[n][m][mid_dis]); } return 0;}


