import sys

#from io import StringIO

#import unittest



class UnionFind():

    # 作りたい要素数nで初期化

    # 使用するインスタンス変数の初期化

    def __init__(self, n):

        self.n = n

        # root[x]<0ならそのノードが根かつその値が木の要素数

        # rootノードでその木の要素数を記録する

        self.root = [-1]*(n+1)

        # 木をくっつける時にアンバランスにならないように調整する

        self.rnk = [0]*(n+1)



    # ノードxのrootノードを見つける

    def Find_Root(self, x):

        if(self.root[x] < 0):

            return x

        else:

            # ここで代入しておくことで、後の繰り返しを避ける

            self.root[x] = self.Find_Root(self.root[x])

            return self.root[x]

    # 木の併合、入力は併合したい各ノード

    def Unite(self, x, y):

        # 入力ノードのrootノードを見つける

        x = self.Find_Root(x)

        y = self.Find_Root(y)

        # すでに同じ木に属していた場合

        if(x == y):

            return 

        # 違う木に属していた場合rnkを見てくっつける方を決める

        elif(self.rnk[x] > self.rnk[y]):

            self.root[x] += self.root[y]

            self.root[y] = x



        else:

            self.root[y] += self.root[x]

            self.root[x] = y

            # rnkが同じ（深さに差がない場合）は1増やす

            if(self.rnk[x] == self.rnk[y]):

                self.rnk[y] += 1

    # xとyが同じグループに属するか判断

    def isSameGroup(self, x, y):

        return self.Find_Root(x) == self.Find_Root(y)



    # ノードxが属する木のサイズを返す

    def Count(self, x):

        return -self.root[self.Find_Root(x)]



def resolve():

    int1 = lambda x: int(x) - 1

    readline=sys.stdin.readline



    n,m,k=map(int, readline().strip().split())



    uf = UnionFind(n)



    exc=[0]*n



    for i in range(m):

        a,b=map(int1, readline().strip().split())

        uf.Unite(a,b)

        exc[a]+=1

        exc[b]+=1

    

    for i in range(k):

        a,b=map(int1, readline().strip().split())

        if uf.isSameGroup(a,b):

            exc[a]+=1

            exc[b]+=1

    

    rescnt=[]



    for i in range(n):

        #ri=uf.Count(i)-1-exc[i]

        #rescnt.append(str(ri))

        if i==(n-1):

            print(uf.Count(i)-1-exc[i])

        else:

            print(uf.Count(i)-1-exc[i],end=" ")

    

        #print(" ".join(rescnt),end="")



resolve()

import sys

from io import StringIO

import unittest



class UnionFind():

    # 作りたい要素数nで初期化

    # 使用するインスタンス変数の初期化

    def __init__(self, n):

        self.n = n

        # root[x]<0ならそのノードが根かつその値が木の要素数

        # rootノードでその木の要素数を記録する

        self.root = [-1]*(n+1)

        # 木をくっつける時にアンバランスにならないように調整する

        self.rnk = [0]*(n+1)



    # ノードxのrootノードを見つける

    def Find_Root(self, x):

        if(self.root[x] < 0):

            return x

        else:

            # ここで代入しておくことで、後の繰り返しを避ける

            self.root[x] = self.Find_Root(self.root[x])

            return self.root[x]

    # 木の併合、入力は併合したい各ノード

    def Unite(self, x, y):

        # 入力ノードのrootノードを見つける

        x = self.Find_Root(x)

        y = self.Find_Root(y)

        # すでに同じ木に属していた場合

        if(x == y):

            return 

        # 違う木に属していた場合rnkを見てくっつける方を決める

        elif(self.rnk[x] > self.rnk[y]):

            self.root[x] += self.root[y]

            self.root[y] = x



        else:

            self.root[y] += self.root[x]

            self.root[x] = y

            # rnkが同じ（深さに差がない場合）は1増やす

            if(self.rnk[x] == self.rnk[y]):

                self.rnk[y] += 1

    # xとyが同じグループに属するか判断

    def isSameGroup(self, x, y):

        return self.Find_Root(x) == self.Find_Root(y)



    # ノードxが属する木のサイズを返す

    def Count(self, x):

        return -self.root[self.Find_Root(x)]



def resolve():

    int1 = lambda x: int(x) - 1

    readline=sys.stdin.readline



    n,m,k=list(map(int, readline().strip().split()))



    uf = UnionFind(n)



    exc=[0]*n



    for i in range(m):

        a,b=list(map(int1, readline().strip().split()))

        uf.Unite(a,b)

        exc[a]+=1

        exc[b]+=1

    

    for i in range(k):

        a,b=list(map(int1, readline().strip().split()))

        if uf.isSameGroup(a,b):

            exc[a]+=1

            exc[b]+=1

    

    rescnt=[]



    for i in range(n):

        ri=uf.Count(i)-1-exc[i]

        rescnt.append(str(ri))

    

    print((" ".join(rescnt)))



resolve()
import sys

# from io import StringIO
# import unittest
class UnionFind:
    # 作りたい要素数nで初期化
    # 使用するインスタンス変数の初期化
    def __init__(self, n):
        self.n = n
        # root[x]<0ならそのノードが根かつその値が木の要素数
        # rootノードでその木の要素数を記録する
        self.root = [-1] * (n + 1)
        # 木をくっつける時にアンバランスにならないように調整する
        self.rnk = [0] * (n + 1)

    # ノードxのrootノードを見つける
    def Find_Root(self, x):
        if self.root[x] < 0:
            return x
        else:
            # ここで代入しておくことで、後の繰り返しを避ける
            self.root[x] = self.Find_Root(self.root[x])
            return self.root[x]

    # 木の併合、入力は併合したい各ノード
    def Unite(self, x, y):
        # 入力ノードのrootノードを見つける
        x = self.Find_Root(x)
        y = self.Find_Root(y)
        # すでに同じ木に属していた場合
        if x == y:
            return
        # 違う木に属していた場合rnkを見てくっつける方を決める
        elif self.rnk[x] > self.rnk[y]:
            self.root[x] += self.root[y]
            self.root[y] = x
        else:
            self.root[y] += self.root[x]
            self.root[x] = y
            # rnkが同じ（深さに差がない場合）は1増やす
            if self.rnk[x] == self.rnk[y]:
                self.rnk[y] += 1

    # xとyが同じグループに属するか判断
    def isSameGroup(self, x, y):
        return self.Find_Root(x) == self.Find_Root(y)

    # ノードxが属する木のサイズを返す
    def Count(self, x):
        return -self.root[self.Find_Root(x)]


def resolve():
    int1 = lambda x: int(x) - 1
    readline = sys.stdin.readline
    n, m, k = map(int, readline().strip().split())
    uf = UnionFind(n)
    exc = [0] * n
    for i in range(m):
        a, b = map(int1, readline().strip().split())
        uf.Unite(a, b)
        exc[a] += 1
        exc[b] += 1
    for i in range(k):
        a, b = map(int1, readline().strip().split())
        if uf.isSameGroup(a, b):
            exc[a] += 1
            exc[b] += 1
    rescnt = []
    for i in range(n):
        # ri=uf.Count(i)-1-exc[i]
        # rescnt.append(str(ri))
        if i == (n - 1):
            print(uf.Count(i) - 1 - exc[i])
        else:
            print(uf.Count(i) - 1 - exc[i], end=" ")
        # print(" ".join(rescnt),end="")


resolve()

import sys
from io import StringIO
import unittest


class UnionFind:
    # 作りたい要素数nで初期化
    # 使用するインスタンス変数の初期化
    def __init__(self, n):
        self.n = n
        # root[x]<0ならそのノードが根かつその値が木の要素数
        # rootノードでその木の要素数を記録する
        self.root = [-1] * (n + 1)
        # 木をくっつける時にアンバランスにならないように調整する
        self.rnk = [0] * (n + 1)

    # ノードxのrootノードを見つける
    def Find_Root(self, x):
        if self.root[x] < 0:
            return x
        else:
            # ここで代入しておくことで、後の繰り返しを避ける
            self.root[x] = self.Find_Root(self.root[x])
            return self.root[x]

    # 木の併合、入力は併合したい各ノード
    def Unite(self, x, y):
        # 入力ノードのrootノードを見つける
        x = self.Find_Root(x)
        y = self.Find_Root(y)
        # すでに同じ木に属していた場合
        if x == y:
            return
        # 違う木に属していた場合rnkを見てくっつける方を決める
        elif self.rnk[x] > self.rnk[y]:
            self.root[x] += self.root[y]
            self.root[y] = x
        else:
            self.root[y] += self.root[x]
            self.root[x] = y
            # rnkが同じ（深さに差がない場合）は1増やす
            if self.rnk[x] == self.rnk[y]:
                self.rnk[y] += 1

    # xとyが同じグループに属するか判断
    def isSameGroup(self, x, y):
        return self.Find_Root(x) == self.Find_Root(y)

    # ノードxが属する木のサイズを返す
    def Count(self, x):
        return -self.root[self.Find_Root(x)]


def resolve():
    int1 = lambda x: int(x) - 1
    readline = sys.stdin.readline
    n, m, k = list(map(int, readline().strip().split()))
    uf = UnionFind(n)
    exc = [0] * n
    for i in range(m):
        a, b = list(map(int1, readline().strip().split()))
        uf.Unite(a, b)
        exc[a] += 1
        exc[b] += 1
    for i in range(k):
        a, b = list(map(int1, readline().strip().split()))
        if uf.isSameGroup(a, b):
            exc[a] += 1
            exc[b] += 1
    rescnt = []
    for i in range(n):
        ri = uf.Count(i) - 1 - exc[i]
        rescnt.append(str(ri))
    print((" ".join(rescnt)))


resolve()

+from io import StringIO +import unittest -# from io import StringIO -# import unittest + -    n, m, k = map(int, readline().strip().split()) +    n, m, k = list(map(int, readline().strip().split())) -        a, b = map(int1, readline().strip().split()) +        a, b = list(map(int1, readline().strip().split())) -        a, b = map(int1, readline().strip().split()) +        a, b = list(map(int1, readline().strip().split())) -        # ri=uf.Count(i)-1-exc[i] -        # rescnt.append(str(ri)) -        if i == (n - 1): -            print(uf.Count(i) - 1 - exc[i]) -        else: -            print(uf.Count(i) - 1 - exc[i], end=" ") -        # print(" ".join(rescnt),end="") +        ri = uf.Count(i) - 1 - exc[i] +        rescnt.append(str(ri)) +    print((" ".join(rescnt)))