10 3 5
1 2
2 3
1 4
2 3 6
1 6
2 1 6
2 8 7
1 10
 10 2 6
1 2
1 3
2 1 8
2 9 2
1 2
1 9
2 3 5
1 8
 10 5 2
1 2
1 3
1 4
2 5
1 6
1 5
1 8
 10 6 64
1 2
2 3
2 4
4 5
3 6
3 7
2 4 4
1 4
1 6
1 5
1 8
2 1 10
2 6 8
2 4 2
1 10
1 6
2 4 3
2 5 9
1 4
2 8 7
2 3 6
2 8 5
2 7 3
2 10 7
2 9 3
1 8
2 7 5
2 6 10
2 5 9
1 10
2 8 9
1 2
2 9 10
2 5 1
2 10 1
2 3 9
2 10 2
2 5 4
1 1
1 5
2 7 5
1 7
2 9 5
2 8 2
1 3
1 10
2 8 8
2 8 2
2 9 8
2 7 10
1 1
1 6
2 1 6
1 2
1 10
2 6 4
1 3
2 6 6
2 10 3
2 3 5
1 2
2 1 7
2 4 4
1 9
1 10
1 5
2 8 3
1 6
1 4
1 8
 10 9 16
1 2
1 3
2 4
2 5
4 6
4 7
6 8
4 9
5 10
2 1 5
2 4 4
1 7
1 8
1 6
1 4
1 10
1 4
2 1 5
2 8 10
2 5 5
2 7 3
2 8 7
2 7 7
2 7 3
2 4 6
 10 5 42
1 2
1 3
2 4
4 5
1 6
1 4
2 9 2
2 10 5
1 4
2 2 7
2 10 5
2 6 10
1 4
1 4
1 2
2 7 8
1 7
2 4 4
2 10 6
2 9 3
1 9
1 2
2 8 1
1 8
2 3 5
1 8
2 5 5
2 2 7
2 8 5
1 9
1 1
2 4 4
2 6 6
2 1 7
1 6
2 8 3
2 7 4
1 8
2 3 6
2 8 6
2 3 6
2 9 3
1 3
1 9
2 3 7
1 2
1 7
 100 22 4
100 24
100 27
100 4
100 60
24 63
63 17
27 89
17 71
63 77
77 43
63 9
100 65
24 14
27 15
60 10
71 16
100 67
10 1
1 40
10 83
43 66
67 18
1 6
1 27
1 6
1 49
 10 7 48
1 2
2 3
2 4
3 5
4 6
6 7
7 8
2 7 4
1 2
2 7 4
1 2
2 5 6
2 3 4
1 8
2 4 4
2 10 3
2 1 3
1 10
1 8
2 2 7
2 2 9
1 10
2 6 7
2 3 6
2 8 1
2 2 6
1 7
2 1 2
1 3
2 4 1
2 5 6
2 7 1
2 4 2
2 1 9
2 6 9
2 6 1
1 1
1 2
1 1
2 2 3
1 4
2 2 2
2 4 7
2 5 5
2 5 7
1 5
2 8 7
1 9
2 10 9
1 9
2 6 6
2 1 1
2 3 3
1 9
2 7 4
 10 4 4
1 2
1 3
3 4
2 5
1 5
1 2
1 3
1 5
 10 7 7
1 2
1 3
2 4
2 5
4 6
5 7
3 8
2 4 7
2 6 4
1 2
2 10 3
1 9
1 8
1 8
 10 5 10
1 2
1 3
3 4
2 5
1 6
2 7 3
1 5
2 3 4
1 3
1 8
1 8
1 8
1 9
2 5 3
2 6 5
 10 1 14
1 2
1 1
1 8
1 9
2 2 5
1 9
1 6
2 10 9
2 4 8
1 4
2 1 10
2 2 4
1 10
2 8 10
2 7 4
 100 10 30
58 81
58 7
58 74
74 97
81 56
81 15
15 49
97 45
97 47
58 34
2 52 44
2 55 79
2 52 5
1 48
2 60 35
2 37 82
2 77 52
2 9 23
2 25 61
2 63 34
1 81
2 47 20
1 79
2 34 19
1 70
1 36
2 27 85
2 52 89
1 25
2 46 46
1 52
1 33
1 70
2 29 56
2 3 73
2 37 46
2 29 83
1 1
1 4
1 45
 10 8 43
1 2
2 3
3 4
2 5
1 6
3 7
7 8
3 9
2 1 6
2 2 8
1 8
2 2 6
1 8
2 1 7
2 9 5
2 9 4
2 7 10
2 10 3
2 1 5
2 6 9
2 6 10
2 3 3
1 1
2 7 5
2 6 2
2 2 5
2 3 9
1 3
2 8 7
1 9
1 3
2 6 9
1 7
1 10
2 10 3
2 10 2
2 5 7
2 10 5
1 10
1 7
1 10
1 2
1 6
2 3 10
1 3
1 5
1 6
1 5
1 8
1 7
2 5 8
 10 3 11
1 2
1 3
2 4
1 2
2 1 1
2 7 9
2 3 2
2 2 7
2 2 5
1 6
2 7 4
1 7
2 9 1
2 9 2
 10 5 6
1 2
2 3
2 4
4 5
1 6
2 3 1
2 6 4
2 1 1
1 5
1 6
1 4
 10 6 7
1 2
2 3
1 4
3 5
1 6
5 7
1 1
2 8 10
1 10
2 9 5
1 7
1 4
2 1 9
 100 16 46
36 42
36 50
42 54
42 74
50 58
42 16
50 81
50 96
42 62
54 2
74 75
74 22
2 48
50 95
74 66
75 5
1 62
1 56
2 6 68
1 47
1 43
1 38
1 75
2 22 82
2 56 77
1 71
2 52 15
2 9 1
2 12 59
1 24
2 41 94
2 18 58
2 22 67
1 45
2 68 70
1 81
1 48
1 71
2 76 28
2 31 73
2 58 80
2 100 57
2 88 79
1 30
2 96 23
2 92 44
1 12
1 66
1 24
2 71 68
2 4 4
2 84 43
2 80 15
2 54 13
1 51
2 99 17
1 63
2 12 41
2 1 2
2 62 96
2 79 9
2 59 79
 10 1 9
1 2
1 5
2 7 4
1 4
1 7
2 2 5
2 6 3
1 3
1 4
1 2
 10 5 77
1 2
1 3
3 4
1 5
5 6
1 2
2 3 10
2 5 1
1 2
1 4
2 7 7
2 7 9
1 7
2 4 9
2 2 4
2 3 2
2 5 2
2 10 1
2 3 8
1 9
1 4
1 2
2 8 3
2 8 2
2 2 3
2 5 9
1 10
2 3 10
2 5 9
1 2
1 7
1 4
1 4
1 3
1 4
1 10
2 8 7
1 2
2 3 1
1 10
2 7 7
1 2
1 5
1 3
1 8
2 7 7
1 10
2 4 2
1 9
2 6 6
1 3
1 2
2 8 10
1 1
1 7
2 10 7
1 8
1 9
2 1 4
2 1 1
2 3 3
1 9
1 8
2 9 4
1 4
2 4 4
1 6
2 9 4
2 5 10
1 4
2 8 9
1 10
1 4
1 4
1 10
1 2
1 4
1 7
2 10 8
1 2
2 6 6
2 8 5
 10 4 46
1 2
2 3
1 4
2 5
1 5
1 9
2 6 8
2 10 8
1 1
1 5
1 1
2 6 6
1 8
2 9 3
1 2
1 5
1 2
2 6 5
1 2
1 6
2 5 3
1 5
2 10 5
1 5
2 6 10
2 2 3
2 7 9
2 8 9
1 8
1 3
2 7 1
2 2 2
1 2
1 1
1 5
2 8 7
1 3
1 4
1 3
2 3 1
2 8 8
1 10
1 9
1 10
2 7 10
2 8 9
1 4
2 8 9
1 5
2 6 9
 10 7 26
1 2
2 3
3 4
3 5
4 6
2 7
5 8
2 7 10
1 3
2 8 5
2 9 4
2 5 1
1 5
1 8
1 10
1 3
1 9
1 6
2 1 9
2 5 7
2 1 4
1 6
2 6 7
1 3
1 1
1 3
1 2
2 8 3
2 2 5
1 1
2 7 7
2 5 1
2 1 8
 10 6 21
1 2
2 3
2 4
2 5
4 6
2 7
2 4 1
1 1
2 5 1
1 5
1 3
1 3
1 10
1 5
1 7
1 4
2 6 3
2 7 4
1 10
2 2 5
1 1
1 5
1 8
2 5 7
1 3
2 2 9
1 7

3
0
 2
2
2
 3
0
 4
4
4
0
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
 5
5
5
5
5
5
 4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
 0
9
0
0
 6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
 4
4
4
4
 5
0
5
5
 4
4
0
0
0
0
 1
0
0
0
0
1
4
 0
6
1
0
0
1
2
0
0
0
0
6
 5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
 3
0
4
 4
4
4
 5
1
5
5
 6
0
0
0
0
6
0
0
0
6
6
0
0
1
6
0
0
0
 0
1
1
1
1
2
 4
4
4
1
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
 3
0
3
3
3
2
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
 4
4
4
4
4
4
4
4
4
4
4
4
4
 3
3
3
3
0
3
3
3
0
3
3
0
3
3

#include <bits/stdc++.h>
using namespace std;
const double pi = 3.141592653689793238460;
const long long inf = 0x3f3f3f3f3f3f;
const int N = 2e5 + 5;
const int pr = 31;
using ld = long double;
int mod = 1e9 + 7;
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return (a / gcd(a, b)) * b; }
int fact(int n) {
  int res = 1;
  for (int i = 2; i <= n; i++) res = res * i % mod;
  return res % mod;
}
int ncr(int n, int r) { return fact(n) / (fact(r) * fact(n - r)); }
long long power(long long x, long long y, long long p) {
  long long res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (1ll * res * x) % p;
    y = y >> 1;
    x = (1ll * x * x) % p;
  }
  return res;
}
unsigned long long modInverse(unsigned long long n, int p) {
  return power(n, p - 2, p);
}
unsigned long long ncrm(unsigned long long n, int r, int p) {
  if (n < r) return 0;
  if (r == 0) return 1;
  unsigned long long fac[2043];
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = (fac[i - 1] * i) % p;
  return (fac[n] * modInverse(fac[r], p) % p * modInverse(fac[n - r], p) % p) %
         p;
}
unsigned int setbit(long long n) {
  unsigned long long count = 0;
  while (n) {
    n &= (n - 1);
    count++;
  }
  return count;
}
int sub(string s1, string s2) {
  int M = s1.length();
  int N = s2.length();
  for (int i = 0; i <= N - M; i++) {
    int j;
    for (j = 0; j < M; j++)
      if (s2[i + j] != s1[j]) break;
    if (j == M) return i;
  }
  return -1;
}
bool subse(string str1, string str2) {
  int j = 0;
  for (int i = 0; i < str2.length() && j < str1.length(); i++)
    if (str1[j] == str2[i]) j++;
  return (j == str1.length());
}
unsigned P2(unsigned x) {
  x |= x >> 1;
  x |= x >> 2;
  x |= x >> 4;
  x |= x >> 8;
  x |= x >> 16;
  return x ^ (x >> 1);
}
void phi_1n(int n) {
  vector<int> phi(n + 1);
  phi[0] = 0;
  phi[1] = 1;
  for (int i = 2; i <= n; i++) phi[i] = i;
  for (int i = 2; i <= n; i++) {
    if (phi[i] == i) {
      for (int j = i; j <= n; j += i) phi[j] -= phi[j] / i;
    }
  }
}
long long largestpower(long long n, long long p) {
  long long x = 0;
  long long curr = n;
  while (curr) {
    curr /= p;
    x += curr;
  }
  return x;
}
struct DSU {
  vector<int> e;
  DSU(int N) { e = vector<int>(N, -1); }
  int get(int x) { return e[x] < 0 ? x : e[x] = get(e[x]); }
  bool same_set(int a, int b) { return get(a) == get(b); }
  int size(int x) { return -e[get(x)]; }
  bool unite(int x, int y) {
    x = get(x), y = get(y);
    if (x == y) return false;
    if (e[x] > e[y]) swap(x, y);
    e[x] += e[y];
    e[y] = x;
    return true;
  }
};
const long long INF = 1e18;
int n, m, q;
bool used[300005];
int p[300005], sz[300005], dia[300005];
int maxi, maxiV;
vector<int> a[1005];
void dfs(int v, int depth, int p) {
  if (depth > maxi) {
    depth = maxi;
    maxiV = v;
  }
  for (auto u : a[v]) {
    if (u != p) {
      dfs(u, depth + 1, v);
    }
  }
}
int finddia(int v) {
  maxi = -1;
  dfs(v, 0, -1);
  maxi = -1;
  dfs(maxiV, 0, -1);
  return maxi;
}
void init() {
  for (int i = (int)1; i <= (int)n; ++i) {
    p[i] = i;
    sz[i] = 1;
    dia[i] = 0;
  }
}
int getset(int v) {
  if (p[v] == v) return v;
  return p[v] = getset(p[v]);
}
void unionset1(int x, int y) {
  x = getset(x);
  y = getset(y);
  if (sz[x] > sz[y]) swap(x, y);
  sz[y] += sz[x];
  p[x] = y;
}
int rad(int v) { return (dia[v] + 1) / 2; }
void unionset2(int x, int y) {
  x = getset(x);
  y = getset(y);
  if (x == y) return;
  if (sz[x] > sz[y]) swap(x, y);
  sz[y] += sz[x];
  p[x] = y;
  dia[y] = max(rad(x) + rad(y) + 1, max(dia[x], dia[y]));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> m >> q;
  init();
  for (int i = 0; i < (int)m; i++) {
    int x, y;
    cin >> x >> y;
    a[x].push_back(y);
    a[y].push_back(x);
    unionset1(x, y);
  }
  for (int i = (int)1; i <= (int)n; ++i) {
    int pp = getset(i);
    if (!used[pp]) {
      used[pp] = 1;
      dia[pp] = finddia(i);
    }
  }
  while (q--) {
    int d;
    cin >> d;
    if (d == 2) {
      int x, y;
      cin >> x >> y;
      unionset2(x, y);
    } else {
      int x;
      cin >> x;
      cout << dia[getset(x)] << '\n';
    }
  }
}
