class UnionFind:

    """

    parents: 各要素の親要素

             要素がrootの場合には　-(そのグループに属する要素数) を格納

    """

    def __init__(self, n):

        self.n = n

        self.parents = [-1] * n



    def find(self, x):

        # xが属するグループのrootを取得

        if self.parents[x] < 0:

            return x

        else:

            self.parents[x] = self.find(self.parents[x])

            return self.parents[x]



    def union(self, x, y):

        x = self.find(x)

        y = self.find(y)



        if x == y:

            return



        # 高い方の木の根に低い方の木の根を結合

        if self.parents[x] > self.parents[y]:

            x, y = y, x



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

        self.parents[y] = x



    def size(self, x):

        return - self.parents[self.find(x)]



    def same(self, x, y):

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



    def members(self, x):

        root = self.find(x)

        return [i for i in range(self.n) if self.find(i) == root]



    def roots(self):

        return [i for i, x in enumerate(self.parents) if x < 0]



    def group_count(self):

        return len(self.roots())



    def all_group_members(self):

        return {r: self.members(r) for r in self.roots()}



    def __str__(self):

        return '\n'.join('{}: {}'.format(r, self.members(r)) for r in self.roots())



      

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



union_find = UnionFind(n)

friends_counter = {i: 0 for i in range(n)}

blocks_counter = {i: 0 for i in range(n)}



for _ in range(m):

    a, b = list(map(int, input().split()))

    union_find.union(a-1, b-1)

    friends_counter[a-1] += 1

    friends_counter[b-1] += 1



for _ in range(k):

    c, d = list(map(int, input().split()))

    if union_find.same(c-1, d-1):

        blocks_counter[c-1] += 1

        blocks_counter[d-1] += 1



result = []

for i in range(n):

    result.append(str(union_find.size(i) - friends_counter[i] - blocks_counter[i] - 1))



print((" ".join(result)))
class UnionFind():

    def __init__(self, n):

        self.n = n

        self.parents = [-1] * n



    def find(self, x):

        if self.parents[x] < 0:

            return x

        else:

            self.parents[x] = self.find(self.parents[x])

            return self.parents[x]



    def union(self, x, y):

        x = self.find(x)

        y = self.find(y)



        if x == y:

            return



        if self.parents[x] > self.parents[y]:

            x, y = y, x



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

        self.parents[y] = x



    def size(self, x):

        return -self.parents[self.find(x)]



    def same(self, x, y):

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



def main():

    import sys

    input = sys.stdin.readline

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

    union_find = UnionFind(N)

    friends = [[] for _ in range(N)]

    for _ in range(M):

        a, b = list(map(int, input().split()))

        a -= 1

        b -= 1

        friends[a].append(b)

        friends[b].append(a)

        union_find.union(a, b)

    blacks = [[] for _ in range(N)]

    for _ in range(K):

        c, d = list(map(int, input().split()))

        c -= 1

        d -= 1

        blacks[c].append(d)

        blacks[d].append(c)

    ans = []

    for i in range(N):

        a = union_find.size(i) - len(friends[i])

        for black in blacks[i]:

            if union_find.same(i, black):

                a -= 1

        ans.append(a-1)

    print((" ".join(map(str, ans))))



if __name__ == '__main__':

    main()
class UnionFind:
    """
    parents: 各要素の親要素
             要素がrootの場合には　-(そのグループに属する要素数) を格納
    """

    def __init__(self, n):
        self.n = n
        self.parents = [-1] * n

    def find(self, x):
        # xが属するグループのrootを取得
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x] = self.find(self.parents[x])
            return self.parents[x]

    def union(self, x, y):
        x = self.find(x)
        y = self.find(y)
        if x == y:
            return
        # 高い方の木の根に低い方の木の根を結合
        if self.parents[x] > self.parents[y]:
            x, y = y, x
        self.parents[x] += self.parents[y]
        self.parents[y] = x

    def size(self, x):
        return -self.parents[self.find(x)]

    def same(self, x, y):
        return self.find(x) == self.find(y)

    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i) == root]

    def roots(self):
        return [i for i, x in enumerate(self.parents) if x < 0]

    def group_count(self):
        return len(self.roots())

    def all_group_members(self):
        return {r: self.members(r) for r in self.roots()}

    def __str__(self):
        return "\n".join("{}: {}".format(r, self.members(r)) for r in self.roots())


n, m, k = list(map(int, input().split()))
union_find = UnionFind(n)
friends_counter = {i: 0 for i in range(n)}
blocks_counter = {i: 0 for i in range(n)}
for _ in range(m):
    a, b = list(map(int, input().split()))
    union_find.union(a - 1, b - 1)
    friends_counter[a - 1] += 1
    friends_counter[b - 1] += 1
for _ in range(k):
    c, d = list(map(int, input().split()))
    if union_find.same(c - 1, d - 1):
        blocks_counter[c - 1] += 1
        blocks_counter[d - 1] += 1
result = []
for i in range(n):
    result.append(str(union_find.size(i) - friends_counter[i] - blocks_counter[i] - 1))
print((" ".join(result)))

class UnionFind:
    def __init__(self, n):
        self.n = n
        self.parents = [-1] * n

    def find(self, x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x] = self.find(self.parents[x])
            return self.parents[x]

    def union(self, x, y):
        x = self.find(x)
        y = self.find(y)
        if x == y:
            return
        if self.parents[x] > self.parents[y]:
            x, y = y, x
        self.parents[x] += self.parents[y]
        self.parents[y] = x

    def size(self, x):
        return -self.parents[self.find(x)]

    def same(self, x, y):
        return self.find(x) == self.find(y)


def main():
    import sys

    input = sys.stdin.readline
    N, M, K = list(map(int, input().split()))
    union_find = UnionFind(N)
    friends = [[] for _ in range(N)]
    for _ in range(M):
        a, b = list(map(int, input().split()))
        a -= 1
        b -= 1
        friends[a].append(b)
        friends[b].append(a)
        union_find.union(a, b)
    blacks = [[] for _ in range(N)]
    for _ in range(K):
        c, d = list(map(int, input().split()))
        c -= 1
        d -= 1
        blacks[c].append(d)
        blacks[d].append(c)
    ans = []
    for i in range(N):
        a = union_find.size(i) - len(friends[i])
        for black in blacks[i]:
            if union_find.same(i, black):
                a -= 1
        ans.append(a - 1)
    print((" ".join(map(str, ans))))


if __name__ == "__main__":
    main()

-    """ -    parents: 各要素の親要素 -             要素がrootの場合には　-(そのグループに属する要素数) を格納 -    """ - -        # xが属するグループのrootを取得 -        # 高い方の木の根に低い方の木の根を結合 -    def members(self, x): -        root = self.find(x) -        return [i for i in range(self.n) if self.find(i) == root] -    def roots(self): -        return [i for i, x in enumerate(self.parents) if x < 0] +def main(): +    import sys -    def group_count(self): -        return len(self.roots()) - -    def all_group_members(self): -        return {r: self.members(r) for r in self.roots()} - -    def __str__(self): -        return "\n".join("{}: {}".format(r, self.members(r)) for r in self.roots()) +    input = sys.stdin.readline +    N, M, K = list(map(int, input().split())) +    union_find = UnionFind(N) +    friends = [[] for _ in range(N)] +    for _ in range(M): +        a, b = list(map(int, input().split())) +        a -= 1 +        b -= 1 +        friends[a].append(b) +        friends[b].append(a) +        union_find.union(a, b) +    blacks = [[] for _ in range(N)] +    for _ in range(K): +        c, d = list(map(int, input().split())) +        c -= 1 +        d -= 1 +        blacks[c].append(d) +        blacks[d].append(c) +    ans = [] +    for i in range(N): +        a = union_find.size(i) - len(friends[i]) +        for black in blacks[i]: +            if union_find.same(i, black): +                a -= 1 +        ans.append(a - 1) +    print((" ".join(map(str, ans)))) -n, m, k = list(map(int, input().split())) -union_find = UnionFind(n) -friends_counter = {i: 0 for i in range(n)} -blocks_counter = {i: 0 for i in range(n)} -for _ in range(m): -    a, b = list(map(int, input().split())) -    union_find.union(a - 1, b - 1) -    friends_counter[a - 1] += 1 -    friends_counter[b - 1] += 1 -for _ in range(k): -    c, d = list(map(int, input().split())) -    if union_find.same(c - 1, d - 1): -        blocks_counter[c - 1] += 1 -        blocks_counter[d - 1] += 1 -result = [] -for i in range(n): -    result.append(str(union_find.size(i) - friends_counter[i] - blocks_counter[i] - 1)) -print((" ".join(result))) +if __name__ == "__main__": +    main()