<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def print_clusters(fastas, info, ANI):
 """ choose represenative genome and print cluster information *if ggKbase table is provided, use SCG info to choose best genome """

    header = ['#cluster', 'num. genomes', 'rep.', 'genome', '#SCGs', '#SCG duplicates', \
            'genome size (bp)', 'fragments', 'list']
    yield header
    in_cluster = []
    for cluster_num, cluster in enumerate(connected_components(ANI)):
        cluster = sorted([genome_info(genome, info[genome]) \
                            for genome in cluster], \
                            key = lambda x: x[0:], reverse = True)
        rep = cluster[0][-1]
        cluster = [i[-1] for i in cluster]
        size = len(cluster)
        for genome in cluster:
            in_cluster.append(genome)
            try:
                stats = [size, rep, genome, \
                            info[genome]['#SCGs'], info[genome]['#SCG duplicates'], \
                            info[genome]['genome size (bp)'], info[genome]['# contigs'], cluster]
            except:
                stats = [size, rep, genome, \
                            'n/a', 'n/a', \
                            info[genome]['genome size (bp)'], info[genome]['# contigs'], cluster]
            if rep == genome:
                stats = ['*%s' % (cluster_num)] + stats
            else:
                stats = [cluster_num] + stats
            yield stats
    # print singletons
    try:
        start = cluster_num + 1
    except:
        start = 0
    fastas = set([i.rsplit('.', 1)[0].rsplit('/', 1)[-1].rsplit('.contigs')[0] for i in fastas])
    for cluster_num, genome in \
            enumerate(fastas.difference(set(in_cluster)), start):
        try:
            stats = ['*%s' % (cluster_num), 1, genome, genome, \
                        info[genome]['#SCGs'], info[genome]['#SCG duplicates'], \
                        info[genome]['genome size (bp)'], info[genome]['# contigs'], [genome]]
        except:
            stats = ['*%s' % (cluster_num), 1, genome, genome, \
                        'n/a', 'n/a', \
                        info[genome]['genome size (bp)'], info[genome]['# contigs'], [genome]]
        yield stats