Загрузка данных


import sys


def main():
    data = sys.stdin.read().split()
    n, m = int(data[0]), int(data[1])
    parent = list(range(n + 1))

    def find(x):
        while parent[x] != x:
            parent[x] = parent[parent[x]]
            x = parent[x]
        return x

    edges = []
    idx = 2
    for _ in range(m):
        if idx + 1 >= len(data):
            break
        u, v = int(data[idx]), int(data[idx + 1])
        idx += 2
        edges.append(u)
        ru, rv = find(u), find(v)
        if ru != rv:
            parent[ru] = rv

    verts = {}
    ecount = {}
    for v in range(1, n + 1):
        r = find(v)
        verts[r] = verts.get(r, 0) + 1
    for u in edges:
        r = find(u)
        ecount[r] = ecount.get(r, 0) + 1

    a = len(verts)
    b = sum(1 for r, cnt in verts.items() if ecount.get(r, 0) == cnt - 1)
    print(a, b)


main()