def solve( input)
root,* c=input.split ( / \D/ ) .map ( & :to_i)
( f=-> n{
m=[ ]
m[ ( c.index ( n) || 2 ) + 1 ] =- 1
( 2 ..n / 2 ) .each { | e|
next if n% e!=0
t=f[ e+ 1 ]
3 .times { | i| m[ i] =t[ i] if t[ i] && ( !m[ i] || m[ i] > t[ i] ) }
}
m[ 1 ] + =1 if m[ 1 ]
m[ 2 ] + =1 if m[ 2 ]
m[ 0 ] =m[ 1 ] + m[ 2 ] if m[ 1 ] && m[ 2 ] && ( !m[ 0 ] || m[ 0 ] > m[ 1 ] + m[ 2 ] )
m
} ) [ root] [ 0 ]
end
def test( n,input,expected)
actual=solve( input) .to_s
puts "#{n}: " + ( actual==expected ? "ok" :"ng ( #{actual} against #{expected} for #{input} )" )
end
test( 0 , "50:6,3" , "1" )
test( 1 , "98:5,11" , "4" )
test( 2 , "1000:33,20" , "7" )
test( 3 , "514:9,18" , "8" )
test( 4 , "961:5,4" , "3" )
test( 5 , "1369:1369,3" , "2" )
test( 6 , "258:16,12" , "5" )
test( 7 , "235:13,3" , "2" )
test( 8 , "1096:19,17" , "8" )
test( 9 , "847:7,17" , "6" )
test( 10 , "1932:3,5" , "2" )
test( 11 , "2491:4,8" , "3" )
test( 12 , "840:421,36" , "2" )
test( 13 , "1430:37,111" , "3" )
test( 14 , "496:17,9" , "2" )
test( 15 , "891:6,10" , "1" )
test( 16 , "1560:196,21" , "2" )
test( 17 , "516:20,12" , "5" )
test( 18 , "696:30,59" , "2" )
test( 19 , "1760:5,441" , "2" )
test( 20 , "1736:11,26" , "5" )
test( 21 , "1518:17,34" , "4" )
test( 22 , "806:63,16" , "5" )
test( 23 , "1920:3,97" , "2" )
test( 24 , "1150:13,22" , "4" )
test( 25 , "920:116,5" , "1" )
test( 26 , "2016:7,337" , "2" )
test( 27 , "408:9,25" , "2" )
test( 28 , "735:36,8" , "2" )
test( 29 , "470:5,31" , "2" )
test( 30 , "2100:12,351" , "3" )
test( 31 , "870:36,10" , "1" )
test( 32 , "1512:253,13" , "2" )
test( 33 , "697:12,15" , "3" )
test( 34 , "1224:5,14" , "2" )
test( 35 , "986:125,17" , "3" )
test( 36 , "864:12,13" , "3" )
test( 37 , "500:21,51" , "2" )
test( 38 , "819:33,21" , "4" )
test( 39 , "594:55,3" , "2" )
test( 40 , "638:17,24" , "3" )
ZGVmIHNvbHZlKGlucHV0KQogIHJvb3QsKmM9aW5wdXQuc3BsaXQoL1xELykubWFwKCY6dG9faSkKICAoZj0tPm57CiAgICBtPVtdCiAgICBtWyhjLmluZGV4KG4pfHwyKSsxXT0tMQogICAgKDIuLm4vMikuZWFjaHt8ZXwKICAgICAgbmV4dCBpZiBuJWUhPTAKICAgICAgdD1mW2UrMV0KICAgICAgMy50aW1lc3t8aXwgbVtpXT10W2ldIGlmIHRbaV0mJighbVtpXXx8bVtpXT50W2ldKSB9CiAgICB9CiAgICBtWzFdKz0xIGlmIG1bMV0KICAgIG1bMl0rPTEgaWYgbVsyXQogICAgbVswXT1tWzFdK21bMl0gaWYgbVsxXSYmbVsyXSYmKCFtWzBdfHxtWzBdPm1bMV0rbVsyXSkKICAgIG0KICB9KVtyb290XVswXQplbmQKCmRlZiB0ZXN0KG4saW5wdXQsZXhwZWN0ZWQpCiAgYWN0dWFsPXNvbHZlKGlucHV0KS50b19zCiAgcHV0cyAiI3tufTogIisoYWN0dWFsPT1leHBlY3RlZCA/ICJvayI6Im5nICggI3thY3R1YWx9IGFnYWluc3QgI3tleHBlY3RlZH0gZm9yICN7aW5wdXR9ICkiKQplbmQKCnRlc3QoIDAsICI1MDo2LDMiLCAiMSIgKQp0ZXN0KCAxLCAiOTg6NSwxMSIsICI0IiApCnRlc3QoIDIsICIxMDAwOjMzLDIwIiwgIjciICkKdGVzdCggMywgIjUxNDo5LDE4IiwgIjgiICkKdGVzdCggNCwgIjk2MTo1LDQiLCAiMyIgKQp0ZXN0KCA1LCAiMTM2OToxMzY5LDMiLCAiMiIgKQp0ZXN0KCA2LCAiMjU4OjE2LDEyIiwgIjUiICkKdGVzdCggNywgIjIzNToxMywzIiwgIjIiICkKdGVzdCggOCwgIjEwOTY6MTksMTciLCAiOCIgKQp0ZXN0KCA5LCAiODQ3OjcsMTciLCAiNiIgKQp0ZXN0KCAxMCwgIjE5MzI6Myw1IiwgIjIiICkKdGVzdCggMTEsICIyNDkxOjQsOCIsICIzIiApCnRlc3QoIDEyLCAiODQwOjQyMSwzNiIsICIyIiApCnRlc3QoIDEzLCAiMTQzMDozNywxMTEiLCAiMyIgKQp0ZXN0KCAxNCwgIjQ5NjoxNyw5IiwgIjIiICkKdGVzdCggMTUsICI4OTE6NiwxMCIsICIxIiApCnRlc3QoIDE2LCAiMTU2MDoxOTYsMjEiLCAiMiIgKQp0ZXN0KCAxNywgIjUxNjoyMCwxMiIsICI1IiApCnRlc3QoIDE4LCAiNjk2OjMwLDU5IiwgIjIiICkKdGVzdCggMTksICIxNzYwOjUsNDQxIiwgIjIiICkKdGVzdCggMjAsICIxNzM2OjExLDI2IiwgIjUiICkKdGVzdCggMjEsICIxNTE4OjE3LDM0IiwgIjQiICkKdGVzdCggMjIsICI4MDY6NjMsMTYiLCAiNSIgKQp0ZXN0KCAyMywgIjE5MjA6Myw5NyIsICIyIiApCnRlc3QoIDI0LCAiMTE1MDoxMywyMiIsICI0IiApCnRlc3QoIDI1LCAiOTIwOjExNiw1IiwgIjEiICkKdGVzdCggMjYsICIyMDE2OjcsMzM3IiwgIjIiICkKdGVzdCggMjcsICI0MDg6OSwyNSIsICIyIiApCnRlc3QoIDI4LCAiNzM1OjM2LDgiLCAiMiIgKQp0ZXN0KCAyOSwgIjQ3MDo1LDMxIiwgIjIiICkKdGVzdCggMzAsICIyMTAwOjEyLDM1MSIsICIzIiApCnRlc3QoIDMxLCAiODcwOjM2LDEwIiwgIjEiICkKdGVzdCggMzIsICIxNTEyOjI1MywxMyIsICIyIiApCnRlc3QoIDMzLCAiNjk3OjEyLDE1IiwgIjMiICkKdGVzdCggMzQsICIxMjI0OjUsMTQiLCAiMiIgKQp0ZXN0KCAzNSwgIjk4NjoxMjUsMTciLCAiMyIgKQp0ZXN0KCAzNiwgIjg2NDoxMiwxMyIsICIzIiApCnRlc3QoIDM3LCAiNTAwOjIxLDUxIiwgIjIiICkKdGVzdCggMzgsICI4MTk6MzMsMjEiLCAiNCIgKQp0ZXN0KCAzOSwgIjU5NDo1NSwzIiwgIjIiICkKdGVzdCggNDAsICI2Mzg6MTcsMjQiLCAiMyIgKQo=