import itertools

def avalua_polinomi1(graus_coefs, x):
    xn = 1
    val = 0
    for g, c in graus_coefs:
        val = val + c * xn
        yield g, val
        xn = xn * x 

def avalua_polinomi2(graus_coefs, x):
    return enumerate(itertools.accumulate(c*x**g for g, c in graus_coefs))

def avalua_polinomi3(graus_coefs, x):
    itxn = itertools.accumulate(itertools.repeat(x), lambda a,b:a*b, initial=1)
    it2 = map(lambda t, xn:t[1]*xn , graus_coefs, itxn)
    it3 = itertools.accumulate(it2)
    return enumerate(it3)
    
# Tria la solució que vols provar
avalua_polinomi = avalua_polinomi3
