'Computes greatest factorial factorization of ``f``.
Examples
>>> from sympy import Poly
>>> from sympy.abc import x
>>> f = x**5 + 2*x**4 - x**3 - 2*x**2
>>> Poly(f).gff_list()
[(Poly(x, x, domain=\'ZZ\'), 1), (Poly(x + 2, x, domain=\'ZZ\'), 4)]'

def gff_list(f):

    if hasattr(f.rep, 'gff_list'):
        result = f.rep.gff_list()
    else:
        raise OperationNotSupported(f, 'gff_list')
    return [(f.per(g), k) for (g, k) in result]
