#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300010;
int n, m, q;
int tata[MAXN], najdulji[MAXN], bio[MAXN];
vector<int> graf[MAXN];
int union_find(int x) {
  if (x == tata[x]) return x;
  return tata[x] = union_find(tata[x]);
}
void spoji(int a, int b, int nova_duljina = -1) {
  int r = rand() % 2;
  if (r) {
    tata[a] = b;
    if (nova_duljina != -1) najdulji[b] = nova_duljina;
  } else {
    tata[b] = a;
    if (nova_duljina != -1) najdulji[a] = nova_duljina;
  }
}
int najdalji_cvor, udaljenost;
void dfs(int x, int roditelj = -1, int dubina = 0) {
  if (dubina > udaljenost) {
    najdalji_cvor = x;
    udaljenost = dubina;
  }
  for (int i = 0; i < graf[x].size(); i++) {
    int dalje = graf[x][i];
    if (dalje == roditelj) continue;
    dfs(dalje, x, dubina + 1);
  }
}
void postavi(int x) {
  int skupina = union_find(x);
  bio[skupina] = 1;
  najdalji_cvor = udaljenost = -1;
  dfs(x);
  int novi = najdalji_cvor;
  najdalji_cvor = udaljenost = -1;
  dfs(novi);
  najdulji[skupina] = udaljenost;
}
int main() {
  srand(time(0));
  scanf("%d %d %d", &n, &m, &q);
  for (int i = 0; i < n; i++) tata[i] = i;
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    a--;
    b--;
    graf[a].push_back(b);
    graf[b].push_back(a);
    spoji(union_find(a), union_find(b));
  }
  for (int i = 0; i < n; i++)
    if (!bio[union_find(i)]) postavi(i);
  for (int i = 0; i < q; i++) {
    int tip;
    scanf("%d", &tip);
    if (tip == 1) {
      int x;
      scanf("%d", &x);
      x--;
      printf("%d\n", najdulji[union_find(x)]);
    } else {
      int x, y;
      scanf("%d %d", &x, &y);
      x--;
      y--;
      int a = union_find(x);
      int b = union_find(y);
      if (a == b) continue;
      int l1, l2;
      if (najdulji[a] % 2 == 0)
        l1 = najdulji[a] / 2;
      else
        l1 = najdulji[a] / 2 + 1;
      if (najdulji[b] % 2 == 0)
        l2 = najdulji[b] / 2;
      else
        l2 = najdulji[b] / 2 + 1;
      spoji(a, b, max(max(l1 + l2 + 1, najdulji[a]), najdulji[b]));
    }
  }
  return 0;
}
