module main; // https://kmjp.hatenablog.jp/entry/2015/11/14/0930 より // 確率、動的計画法、数値積分 import std; void main() { // 入力 long N = readln.chomp.to!long; long L, R; readln.chomp.formattedRead("%d %d", L, R); // 答えの計算 L = min(6 * N, max(N, L)); R = min(6 * N, R); if (N <= 8000) { const di = 1 / 6.0; auto from = uninitializedArray!(double[])(6 * N + 10), to = from.dup; from[] = 0; from[0] = 1; foreach (i; 0 .. N) { to[] = 0; foreach (j; i .. 6 * i + 1) foreach (x; 1 .. 7) to[j + x] += from[j] * di; swap(from, to); } writefln("%.12f", from[L .. R + 1].sum); } else { double ave = N * 3.5; double var = N * 35.0 / 12; writefln("%.12f", (erf((R + 0.5 - ave) / sqrt(2 * var)) - erf((L - 0.5 - ave) / sqrt(2 * var))) / 2); } }