package main
import (
"bufio"
"fmt"
"math"
"os"
)
func solveAlice(n, h int) float64 {
ans := float64(n)
fn := float64(n)
for j := 1; j <= h; j++ {
p2 := math.Ldexp(1.0, j)
y := math.Log1p(fn/(p2-1.0)) + fn*math.Log1p(-1.0/p2)
if y > 0 && y < 1e-15 {
y = 0
}
ans += 0.5 * p2 * (-math.Expm1(y))
}
return ans
}
func solveBob(b, h int) float64 {
prevG := make([]float64, b+1)
prevS := make([]float64, b+1)
for i := 1; i <= b; i++ {
prevG[i] = 1.0
prevS[i] = float64(i)
}
if h == 0 {
return float64(b)
}
powNeg := make([]float64, b+1)
for i := 1; i <= b; i++ {
powNeg[i] = math.Ldexp(1.0, -i)
}
curG := make([]float64, b+1)
curS := make([]float64, b+1)
for level := 1; level <= h; level++ {
Ag, Tg, Ug := 0.0, 0.0, 0.0
As, Ts := 0.0, 0.0
for q := 1; 2*q-1 <= b; q++ {
fq := float64(q)
g := prevG[q]
s := prevS[q]
Ag = g + 0.25*Ag
Tg = fq*g + 0.25*Tg
Ug = fq*fq*g + 0.25*Ug
As = s + 0.25*As
Ts = fq*s + 0.25*Ts
m1 := 2*q - 1
base1 := powNeg[m1]
curG[m1] = base1 + (fq+0.5)*Ag - Tg
curS[m1] = float64(m1)*base1 + 2.0*((fq+0.5)*As-Ts) + (2.0*fq*fq-0.5)*Ag - 4.0*fq*Tg + 2.0*Ug
m2 := 2 * q
if m2 <= b {
base2 := powNeg[m2]
curG[m2] = base2 + 0.5*((fq+1.0)*Ag-Tg)
curS[m2] = float64(m2)*base2 + (fq+1.0)*As - Ts + (fq*fq+fq)*Ag - (2.0*fq+1.0)*Tg + Ug
}
}
prevG, curG = curG, prevG
prevS, curS = curS, prevS
}
return prevS[b] / prevG[b]
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
var name string
var n, h int
fmt.Fscan(in, &name)
fmt.Fscan(in, &n, &h)
var ans float64
if name == "Alice" {
ans = solveAlice(n, h)
} else {
ans = solveBob(n, h)
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
fmt.Fprintf(out, "%.15f\n", ans)
out.Flush()
}