from collections import defaultdict
def fnc(b, r, w):
n = b+r+w
mp = defaultdict(int)
mp[(0, 0, 0, 9)] = 1 #(黒の数,赤の数,白の数,最後の色) := 通り数
for _i in range(n):
nmp = defaultdict(int)
for (kb,kr,kw,kc), v in mp.items():
if kc != 0 and kb < b:
nmp[(kb+1, kr, kw, 0)] += v
if kc != 1 and kr < r:
nmp[(kb, kr+1, kw, 1)] += v
if kw < w:
nmp[(kb, kr, kw+1, 2)] += v
mp = nmp
return sum((v for v in mp.values()))
indt = ((1,2,2), (1,2,3), (3,4,5), (12,34,56) )
for dt in indt:
print(*dt, "-->", fnc(*dt))
CmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CmRlZiBmbmMoYiwgciwgdyk6CiAgbiA9IGIrcit3CiAgbXAgPSBkZWZhdWx0ZGljdChpbnQpCiAgbXBbKDAsIDAsIDAsIDkpXSA9IDEgIyjpu5Ljga7mlbAs6LWk44Gu5pWwLOeZveOBruaVsCzmnIDlvozjga7oibIpIDo9IOmAmuOCiuaVsAogIGZvciBfaSBpbiByYW5nZShuKToKICAgIG5tcCA9IGRlZmF1bHRkaWN0KGludCkKICAgIGZvciAoa2Isa3Isa3csa2MpLCB2IGluIG1wLml0ZW1zKCk6CiAgICAgIGlmIGtjICE9IDAgYW5kIGtiIDwgYjoKICAgICAgICBubXBbKGtiKzEsIGtyLCBrdywgMCldICs9IHYKICAgICAgaWYga2MgIT0gMSBhbmQga3IgPCByOgogICAgICAgIG5tcFsoa2IsIGtyKzEsIGt3LCAxKV0gKz0gdgogICAgICBpZiBrdyA8IHc6CiAgICAgICAgbm1wWyhrYiwga3IsIGt3KzEsIDIpXSArPSB2CiAgICBtcCA9IG5tcAogIHJldHVybiAgc3VtKCh2IGZvciB2IGluIG1wLnZhbHVlcygpKSkKCmluZHQgPSAoKDEsMiwyKSwgKDEsMiwzKSwgKDMsNCw1KSwgKDEyLDM0LDU2KSApCmZvciBkdCBpbiBpbmR0OgogIHByaW50KCpkdCwgIi0tPiIsIGZuYygqZHQpKQo=