from collections import deque

N, M, K = map(int, input().split())

f = [set() for _ in range(N + 1)]
b = [set() for _ in range(N + 1)]

for _ in range(M):
    f1, f2 = map(int, input().split())
    f[f1].add(f2)
    f[f2].add(f1)

for _ in range(K):
    b1, b2 = map(int, input().split())
    b[b1].add(b2)
    b[b2].add(b1)


dq = deque()
ans = [0] * (N + 1)
visited = [False] * (N + 1)

for i in range(1, N + 1):

    # iを含む連結リストが既に作られている場合はスキップ
    if visited[i]:
        continue

    # setは{}で書く、後で積集合が楽に取れる
    link = {i}
    dq.append(i)
    visited[i] = True

    # DFS
    while dq:
        n = dq.pop()
        # nのフレンド全員について
        for j in f[n]:
            # まだ訪れていないノードの場合
            if not visited[j]:
                link.add(j)
                dq.append(j)
                visited[j] = True

    for user in link:
        # 全体-既にフレンドの人数-ブロックした人数-自分自身
        # set同士で積集合をとる
        ans[user] = len(link) - len(link & f[user]) - len(link & b[user]) - 1

print(*ans[1:]) from collections import deque N, M, K = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split M K set() for _ in range(N + 1) for _ in range(N + 1) _ range(N + 1) range N + 1 N 1 for _ in range(N + 1) set() set f = [set() for _ in range(N + 1)] f [set() for _ in range(N + 1)] set() for _ in range(N + 1) for _ in range(N + 1) _ range(N + 1) range N + 1 N 1 for _ in range(N + 1) set() set b = [set() for _ in range(N + 1)] b [set() for _ in range(N + 1)] for _ in range(M):
    f1, f2 = map(int, input().split())
    f[f1].add(f2)
    f[f2].add(f1) _ range(M) range M f1, f2 = map(int, input().split()) f1 map(int, input().split()) map int input().split() ().split () input split f2 f[f1].add(f2) [f1].add [f1] f f1 add f2 f[f2].add(f1) [f2].add [f2] f f2 add f1 for _ in range(K):
    b1, b2 = map(int, input().split())
    b[b1].add(b2)
    b[b2].add(b1) _ range(K) range K b1, b2 = map(int, input().split()) b1 map(int, input().split()) map int input().split() ().split () input split b2 b[b1].add(b2) [b1].add [b1] b b1 add b2 b[b2].add(b1) [b2].add [b2] b b2 add b1 dq = deque() dq deque() deque ans = [0] * (N + 1) ans [0] * (N + 1) [0] 0 N + 1 N 1 visited = [False] * (N + 1) visited [False] * (N + 1) [False] False N + 1 N 1 for i in range(1, N + 1):

    # iを含む連結リストが既に作られている場合はスキップ
    if visited[i]:
        continue

    # setは{}で書く、後で積集合が楽に取れる
    link = {i}
    dq.append(i)
    visited[i] = True

    # DFS
    while dq:
        n = dq.pop()
        # nのフレンド全員について
        for j in f[n]:
            # まだ訪れていないノードの場合
            if not visited[j]:
                link.add(j)
                dq.append(j)
                visited[j] = True

    for user in link:
        # 全体-既にフレンドの人数-ブロックした人数-自分自身
        # set同士で積集合をとる
        ans[user] = len(link) - len(link & f[user]) - len(link & b[user]) - 1 i range(1, N + 1) range 1 N + 1 N 1 if visited[i]:
        continue

    # setは{}で書く、後で積集合が楽に取れる
     visited[i] visited i continue link = {i} link {i} dq.append(i) dq.append dq append i visited[i] = True visited[i] visited i True while dq:
        n = dq.pop()
        # nのフレンド全員について
        for j in f[n]:
            # まだ訪れていないノードの場合
            if not visited[j]:
                link.add(j)
                dq.append(j)
                visited[j] = True

     dq n = dq.pop() n dq.pop() dq.pop dq pop for j in f[n]:
            # まだ訪れていないノードの場合
            if not visited[j]:
                link.add(j)
                dq.append(j)
                visited[j] = True

     j f[n] f n if not visited[j]:
                link.add(j)
                dq.append(j)
                visited[j] = True

     not visited[j] visited[j] visited j link.add(j) link.add link add j dq.append(j) dq.append dq append j visited[j] = True visited[j] visited j True for user in link:
        # 全体-既にフレンドの人数-ブロックした人数-自分自身
        # set同士で積集合をとる
        ans[user] = len(link) - len(link & f[user]) - len(link & b[user]) - 1 user link ans[user] = len(link) - len(link & f[user]) - len(link & b[user]) - 1 ans[user] ans user len(link) - len(link & f[user]) - len(link & b[user]) - 1 len(link) - len(link & f[user]) - len(link & b[user]) len(link) - len(link & f[user]) len(link) len link len(link & f[user]) len link & f[user] link f[user] f user len(link & b[user]) len link & b[user] link b[user] b user 1 print(*ans[1:]) print *ans[1:] ans[1:] ans 1: 1 b2 = map(int, input().split()) map(int, input().split()) b2 N, M, K = map(int, input().split()) map(int, input().split()) N M, K = map(int, input().split()) map(int, input().split()) M K = map(int, input().split()) map(int, input().split()) K f2 = map(int, input().split()) map(int, input().split()) f2 ans = [0] * (N + 1) [0] * (N + 1) ans f = [set() for _ in range(N + 1)] [set() for _ in range(N + 1)] f b1, b2 = map(int, input().split()) map(int, input().split()) b1 link = {i} {i} link n = dq.pop() dq.pop() n b = [set() for _ in range(N + 1)] [set() for _ in range(N + 1)] b dq = deque() deque() dq visited = [False] * (N + 1) [False] * (N + 1) visited f1, f2 = map(int, input().split()) map(int, input().split()) f1
from collections import deque

N, M, K = map(int, input().split())

f = [set() for _ in range(N + 1)]
b = [set() for _ in range(N + 1)]

for _ in range(M):
    f1, f2 = map(int, input().split())
    f[f1].add(f2)
    f[f2].add(f1)

for _ in range(K):
    b1, b2 = map(int, input().split())
    b[b1].add(b2)
    b[b2].add(b1)


dq = deque()
ans = [0] * (N + 1)
visited = [False] * (N + 1)

for i in range(1, N + 1):

    # iを含む連結リストが既に作られている場合はスキップ
    if visited[i]:
        continue

    # setは{}で書く、後で積集合が楽に取れる
    link = {i}
    dq.append(i)
    visited[i] = True

    # DFS
    while dq:
        n = dq.pop()
        # nのフレンド全員について
        for j in f[n]:
            # まだ訪れていないノードの場合
            if not visited[j]:
                link.add(j)
                dq.append(j)
                visited[j] = True

    for user in link:
        # 全体-既にフレンドの人数-ブロックした人数-自分自身
        # set同士で積集合をとる
        ans[user] = len(link) - len(link & f[user]) - len(link & b[user]) - 1

print(*ans[1:])
