Problem:
Score : 400 points

Problem Statement

An SNS has N users - User 1, User 2, \cdots, User N.

Between these N users, there are some relationships - M friendships and K blockships.

For each i = 1, 2, \cdots, M, there is a bidirectional friendship between User A_i and User B_i.

For each i = 1, 2, \cdots, K, there is a bidirectional blockship between User C_i and User D_i.

We define User a to be a friend candidate for User b when all of the following four conditions are satisfied:

a \neq b.

There is not a friendship between User a and User b.

There is not a blockship between User a and User b.

There exists a sequence c_0, c_1, c_2, \cdots, c_L consisting of integers between 1 and N (inclusive) such that c_0 = a, c_L = b, and there is a friendship between User c_i and c_{i+1} for each i = 0, 1, \cdots, L - 1.

For each user i = 1, 2, ... N, how many friend candidates does it have?

Constraints

All values in input are integers.

2 ≤ N ≤ 10^5

0 \leq M \leq 10^5

0 \leq K \leq 10^5

1 \leq A_i, B_i \leq N

A_i \neq B_i

1 \leq C_i, D_i \leq N

C_i \neq D_i

(A_i, B_i) \neq (A_j, B_j) (i \neq j)

(A_i, B_i) \neq (B_j, A_j)

(C_i, D_i) \neq (C_j, D_j) (i \neq j)

(C_i, D_i) \neq (D_j, C_j)

(A_i, B_i) \neq (C_j, D_j)

(A_i, B_i) \neq (D_j, C_j)

Input

Input is given from Standard Input in the following format:

N M K
A_1 B_1
\vdots
A_M B_M
C_1 D_1
\vdots
C_K D_K

Output

Print the answers in order, with space in between.

Sample Input 1

4 4 1
2 1
1 3
3 2
3 4
4 1

Sample Output 1

0 1 0 1

There is a friendship between User 2 and 3, and between 3 and 4. Also, there is no friendship or blockship between User 2 and 4. Thus, User 4 is a friend candidate for User 2.

However, neither User 1 or 3 is a friend candidate for User 2, so User 2 has one friend candidate.

Sample Input 2

5 10 0
1 2
1 3
1 4
1 5
3 2
2 4
2 5
4 3
5 3
4 5

Sample Output 2

0 0 0 0 0

Everyone is a friend of everyone else and has no friend candidate.

Sample Input 3

10 9 3
10 1
6 7
8 2
2 5
8 4
7 3
10 9
6 4
5 8
2 6
7 5
3 1

Sample Output 3

1 3 5 4 3 3 3 3 1 0

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

/********************************
* AUTHOR:  ARNAB SEN             *
* NICK  :  arnab1729             *
* INSTITUTION: IIEST, SHIBPUR    *
********************************/

#include<bits/stdc++.h>

using namespace std;

typedef string                         STR;
typedef long long                      LL;
typedef long double                    LD;
typedef unsigned long long             ULL;
typedef vector<int>                    VI;
typedef priority_queue<int>            PQI;
typedef vector<LL>                     VLL;
typedef vector<ULL>                    VULL;
typedef vector<STR>                    VS;
typedef vector<char>                   VC;
typedef pair<int,int>                  PII;
typedef pair<LL,LL>                    PLL;
typedef pair<STR,int>                  PSI;
typedef pair<int,STR>                  PIS;
typedef vector<PII>                    VPII;
typedef vector<PLL>                    VPLL;
typedef map<int,int>                   MII;
typedef map<LL,LL>                     MLL;
typedef map<STR,int>                   MSI;
typedef map<char,int>                  MCI;
typedef map<int,STR>                   MIS;
typedef set<STR>                       SS;
typedef set<int>                       SI;
typedef set<LL>                        SLL;

#define FF                             first
#define SS                             second
#define PB                             push_back
#define PF                             push_front
#define MP                             make_pair
#define all(a)                         (a).begin(), (a).end()
#define dec(n)                         cout<<fixed<<setprecision(n);
#define f(i, n)                        for(LL i=0; i<(LL)n; i++)
#define fr(i,n)                        for(LL i=(LL)(n-1); i>=0; i--)
#define fa(i, a, n)                     for(LL i=(LL)a; i<(LL)n; i++)
#define fra(i, a, n)                    for(LL i=(LL)(n-1); i>=a; i--)
#define fsort(a)                       sort(a.begin(), a.end())
#define rsort(a)                       sort(a.rbegin(), a.rend())


#define fast ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL))

template<class T>  T maxT(T a, T b){return (a>b?a:b);}
template<class T>  T minT(T a, T b){return (a<b?a:b);}
template<class T>  void setmax(T &a, T b){a=(a>b ?a:b);}
template<class T>  void setmin(T &a, T b){a=(a<b ?a:b);}

void fileio(){
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    freopen("debug.txt", "w", stderr);
}

void ofileio(){
  freopen("input.txt","r", stdin);
  freopen("output.txt", "w", stdout); 
}

void clock_out(){
  cerr<<"\nTime Elapsed : " << 1.0*clock() / CLOCKS_PER_SEC << " s\n";
}


void debug_out() { cerr << endl; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << H;
  debug_out(T...);
}
 
#ifndef ONLINE_JUDGE
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#define fio() fileio()
#define ofio ofileio()
#define clock() clock_out()
#else
#define debug(...) 1
#define fio() 1
#define ofio() ofileio()
#define clock() 1
#endif

const LL MOD     = 1000000007;
const LL SIZE    = 100000;
const int INF    = 0x3f3f3f3f;
const LL LL_INF  = 0x3f3f3f3f3f3f3f3f;
const LD PI      = acos(-1);
const LL MAXN    = numeric_limits<LL>::max();

vector<vector<LL>> adj;
vector<vector<LL>> blk;
vector<LL> comp;
vector<LL> vis;
vector<bool> vis2;



void dfs(LL src, LL &count, LL id){
  for(auto edge: adj[src]){
    if(vis[edge]==-1){
      vis[edge]=id;
      count++;
      dfs(edge, count, id);
    }
  }
}

void dfsAssign(LL src, LL count){
  comp[src]=count;
  for(auto edge: adj[src]){
    if(!vis2[edge]){
      vis2[edge]=true;
      dfsAssign(edge, count);
    }
  }
}

void solve(){
   LL n, m, k;
   cin>>n>>m>>k;
   
   adj.resize(n+1);
   blk.resize(n+1);
   comp.resize(n+1, 1);
   f(i, m){
      LL a, b;
      cin>>a>>b;
      adj[a].PB(b);
      adj[b].PB(a);
   }

   f(i, k){
      LL c, d;
      cin>>c>>d;
      blk[c].PB(d);
      blk[d].PB(c);
   }
   vis.resize(n+1, -1);
   vis2.resize(n+1, false);
   LL id=1;
   for(LL i=1; i<=n; i++){
    if(vis[i]==-1){
        LL count=0;
        dfs(i, count, id);
        dfsAssign(i, count);
        id++;
      }
   }

   for(LL i=1; i<=n; i++){
      if(comp[i]==0) comp[i]=1;
   }

  for(LL i=1; i<=n; i++){
    LL ans=comp[i]-adj[i].size()-1;
    for(auto edge: blk[i]){
      // debug(vis[edge], vis[i]);
      if(vis[edge] == vis[i]) ans--;
    }

    // debug();
    cout<<max(ans, 0LL)<<" ";
  }

}

int main(){
  fast;
  //fio();

  LL t=1;
  //cin>>t;
  while(t--){
      solve();
  }
  clock();
  return 0;
}