# -*- coding: utf-8 -*-

import sys

N,M,K=list(map(int, sys.stdin.readline().split()))



par=[ i for i in range(N+1) ]

size=[ 1 for i in range(N+1) ]



def root(x):

    while par[x]!=x:

        x=par[x]

    return x



def same(x,y):

	return root(x)==root(y)



def unite(x,y):

    x=root(x)

    y=root(y)

    if x==y: return

    if size[y]<size[x]: x,y=y,x  #yの要素数を大きくする

    size[y]+=size[x]

    par[x]=y #yが親ノード



def getsize(x):

	return size[root(x)]



al_ok=[ 0 for i in range(N+1) ]	#隣接で友達関係のカウント



for _ in range(M):

    a,b=list(map(int, sys.stdin.readline().split()))

    unite(a,b)

    al_ok[a]+=1

    al_ok[b]+=1



al_ng=[ 0 for i in range(N+1) ]	#隣接でブロックしている人のカウント

for _ in range(K):

    c,d=list(map(int, sys.stdin.readline().split()))

    if same(c,d):

        al_ng[c]+=1

        al_ng[d]+=1



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

    print(getsize(i)-1-al_ok[i]-al_ng[i], end=' ')

# -*- coding: utf-8 -*-

import sys

N,M,K=list(map(int, sys.stdin.readline().split()))



par=[ i for i in range(N+1) ]

size=[ 1 for i in range(N+1) ]



def root(x):

    while par[x]!=x:

        x=par[x]

    return x



def same(x,y):

	return root(x)==root(y)



def unite(x,y):

    x=root(x)

    y=root(y)

    if x==y: return

    if size[y]<size[x]: x,y=y,x  #yの要素数を大きくする

    size[y]+=size[x]

    par[x]=y #yが親ノード



def getsize(x):

	return size[root(x)]



IN=[ 0 for _ in range(N+1) ]



for _ in range(M):

    a,b=list(map(int, sys.stdin.readline().split()))

    unite(a,b)

    IN[a]+=1

    IN[b]+=1



for _ in range(K):

    c,d=list(map(int, sys.stdin.readline().split()))

    if same(c,d):

        IN[c]+=1

        IN[d]+=1



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

    print(getsize(i)-1-IN[i], end=' ')
# -*- coding: utf-8 -*-
import sys

N, M, K = list(map(int, sys.stdin.readline().split()))
par = [i for i in range(N + 1)]
size = [1 for i in range(N + 1)]


def root(x):
    while par[x] != x:
        x = par[x]
    return x


def same(x, y):
    return root(x) == root(y)


def unite(x, y):
    x = root(x)
    y = root(y)
    if x == y:
        return
    if size[y] < size[x]:
        x, y = y, x  # yの要素数を大きくする
    size[y] += size[x]
    par[x] = y  # yが親ノード


def getsize(x):
    return size[root(x)]


al_ok = [0 for i in range(N + 1)]  # 隣接で友達関係のカウント
for _ in range(M):
    a, b = list(map(int, sys.stdin.readline().split()))
    unite(a, b)
    al_ok[a] += 1
    al_ok[b] += 1
al_ng = [0 for i in range(N + 1)]  # 隣接でブロックしている人のカウント
for _ in range(K):
    c, d = list(map(int, sys.stdin.readline().split()))
    if same(c, d):
        al_ng[c] += 1
        al_ng[d] += 1
for i in range(1, N + 1):
    print(getsize(i) - 1 - al_ok[i] - al_ng[i], end=" ")

# -*- coding: utf-8 -*-
import sys

N, M, K = list(map(int, sys.stdin.readline().split()))
par = [i for i in range(N + 1)]
size = [1 for i in range(N + 1)]


def root(x):
    while par[x] != x:
        x = par[x]
    return x


def same(x, y):
    return root(x) == root(y)


def unite(x, y):
    x = root(x)
    y = root(y)
    if x == y:
        return
    if size[y] < size[x]:
        x, y = y, x  # yの要素数を大きくする
    size[y] += size[x]
    par[x] = y  # yが親ノード


def getsize(x):
    return size[root(x)]


IN = [0 for _ in range(N + 1)]
for _ in range(M):
    a, b = list(map(int, sys.stdin.readline().split()))
    unite(a, b)
    IN[a] += 1
    IN[b] += 1
for _ in range(K):
    c, d = list(map(int, sys.stdin.readline().split()))
    if same(c, d):
        IN[c] += 1
        IN[d] += 1
for i in range(1, N + 1):
    print(getsize(i) - 1 - IN[i], end=" ")

-al_ok = [0 for i in range(N + 1)]  # 隣接で友達関係のカウント +IN = [0 for _ in range(N + 1)] -    al_ok[a] += 1 -    al_ok[b] += 1 -al_ng = [0 for i in range(N + 1)]  # 隣接でブロックしている人のカウント +    IN[a] += 1 +    IN[b] += 1 -        al_ng[c] += 1 -        al_ng[d] += 1 +        IN[c] += 1 +        IN[d] += 1 -    print(getsize(i) - 1 - al_ok[i] - al_ng[i], end=" ") +    print(getsize(i) - 1 - IN[i], end=" ")