def AICs(Surfs, Surfs_star, target='collocation', Project=True):
    """
    Given a list of bound (Surfs) and wake (Surfs_star) instances of
    surface.AeroGridSurface, returns the list of AIC matrices in the format:
        - AIC_list[ii][jj] contains the AIC from the bound surface Surfs[jj] to
        Surfs[ii].
        - AIC_star_list[ii][jj] contains the AIC from the wake surface Surfs[jj]
        to Surfs[ii].
    """

    AIC_list = []
    AIC_star_list = []

    n_surf = len(Surfs)
    assert len(Surfs_star) == n_surf, \
        'Number of bound and wake surfaces much be equal'

    for ss_out in range(n_surf):
        AIC_list_here = []
        AIC_star_list_here = []
        Surf_out = Surfs[ss_out]

        for ss_in in range(n_surf):
            # Bound surface
            Surf_in = Surfs[ss_in]
            AIC_list_here.append(Surf_in.get_aic_over_surface(
                Surf_out, target=target, Project=Project))
            # Wakes
            Surf_in = Surfs_star[ss_in]
            AIC_star_list_here.append(Surf_in.get_aic_over_surface(
                Surf_out, target=target, Project=Project))
        AIC_list.append(AIC_list_here)
        AIC_star_list.append(AIC_star_list_here)

    return AIC_list, AIC_star_list