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

import java.util.*;
import java.io.*;



public class Main {
    static OutputWriter out;
    static int[]parent;
    static int[]values;
    static int[]values1;
    static int[]ranks;
    static boolean[]visited;
    static boolean[]visited1;
    static Graph g;
    static int temp;
   static int edge;
    public static void main(String[] args)
    {
        InputReader in = new InputReader(System.in);
        out = new OutputWriter(System.out);
        int n = in.nextInt();
        parent = new int[n];
        values = new int[n];
        values1 = new int[n];
        visited1 = new boolean[n];
        ranks = new int[n];
        g = new Graph(n);
        visited= new boolean[n];
       for (int i =0;i<n;i++)
           parent[i]=i;
       int m =in.nextInt();
       int q = in.nextInt();
       for (int i=0;i<m;i++)
       {
           int x = in.nextInt()-1;
           int y = in.nextInt()-1;
           int p0= getParent(x);
           int p1 = getParent(y);
           g.adjList[x].add(y);
           g.adjList[y].add(x);
           if (p0!=p1)
           {
               if (ranks[p0]>=ranks[p1])
               {
                   ranks[p0]++;
                   parent[p1]=p0;
               }
               else
               {
                   ranks[p1]++;
                   parent[p0]=p1;
               }
           }
       }

       int[]length=new int[n];

       for (int i =0;i<n;i++)
       {
           if (!visited[i])
           {
               temp=0;
               edge =i;
               DFS(i);

               DFS1(edge);
               int p0= getParent(i);
               length[p0]=values1[edge];
           }
       }
       for (int i =0;i<q;i++)
       {
           int c = in.nextInt();
           if (c==1)
           {
               int p0=getParent(in.nextInt()-1);
               out.printLine(length[p0]);
           }
           else
           {
               int x = in.nextInt()-1;
               int y = in.nextInt()-1;
               int p0=getParent(x);
               int p1 = getParent(y);
               if (p1!=p0)
               if (length[p0]>=length[p1])
               {
                   parent[p1]=p0;
                   length[p0]=Math.max(length[p0],(1+length[p0])/2+(1+length[p1])/2+1);
               }
               else
               {
                   parent[p0]=p1;
                   length[p1]=Math.max(length[p1],(1+length[p0])/2+(1+length[p1])/2+1);
               }
           }
       }
        out.flush();
    }
    static void DFS1(int v)
    {

        DFSUtil1(v);
    }
    static  void DFSUtil1(int v)
    {
        visited1[v] = true;

        int i=0;
        int size = g.adjList[v].size();

        while (i<size)
        {
            int index = g.adjList[v].get(i);
            if (!visited1[index]) {
                values1[index]=values1[v]+1;
                if (values1[v]+1>temp)
                {
                    temp=values1[v]+1;
                    edge=index;
                }
                DFSUtil1(index);
            }
            i++;

        }
    }
    static void DFS(int v)
    {

        DFSUtil(v);
    }
    static  void DFSUtil(int v)
    {
        visited[v] = true;

        int i=0;
        int size = g.adjList[v].size();

        while (i<size)
        {
            int index = g.adjList[v].get(i);
            if (!visited[index]) {
                values[index]=values[v]+1;
                if (values[v]+1>temp)
                {
                    temp=values[v]+1;
                    edge=index;
                }
                DFSUtil(index);
            }
            i++;

        }
    }
  static int getParent(int i)
  {
      while (i!=parent[i])
          i=parent[i];
      return i;
  }
}
class MyScanner {

    StringTokenizer st;
    BufferedReader br;

    public MyScanner(InputStream s) {
        br = new BufferedReader(new InputStreamReader(s));
    }

    public MyScanner (FileReader f) {
        br = new BufferedReader(f);
    }

    public String next() throws IOException {
        while (st == null || !st.hasMoreTokens())
            st = new StringTokenizer(br.readLine());
        return st.nextToken();
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    public String nextLine() throws IOException {
        return br.readLine();
    }

    public double nextDouble() throws IOException {
        String x = next();
        StringBuilder sb = new StringBuilder("0");
        double res = 0, f = 1;
        boolean dec = false, neg = false;
        int start = 0;
        if (x.charAt(0) == '-') {
            neg = true;
            start++;
        }
        for (int i = start; i < x.length(); i++)
            if (x.charAt(i) == '.') {
                res = Long.parseLong(sb.toString());
                sb = new StringBuilder("0");
                dec = true;
            } else {
                sb.append(x.charAt(i));
                if (dec)
                    f *= 10;
            }
        res += Long.parseLong(sb.toString()) / f;
        return res * (neg ? -1 : 1);
    }

    public boolean ready() throws IOException {
        return br.ready();
    }

    public boolean nextEmpty() throws IOException {
        String s = nextLine();
        st = new StringTokenizer(s);
        return s.isEmpty();
    }
}


class pair  implements Comparable
{
    int dist;
    int to;
    public pair(int to, int dist)
    {
        this.dist = dist;
        this.to = to;
    }
    @Override
    public int compareTo(Object o) {
        pair temp =(pair)o;
        if (dist<temp.dist)
            return -1;
        else if (dist>temp.dist)
            return 1;
        else
            return 0;
    }
}
class Graph {


    int n;
    ArrayList<Integer>[] adjList;

    public Graph(int n) {
        this.n = n;
        adjList = new ArrayList[n];
        for (int i = 0; i < n; i++)
            adjList[i] = new ArrayList<>();
    }

}



class InputReader {

    private final InputStream stream;
    private final byte[] buf = new byte[8192];
    private int curChar, snumChars;

    public InputReader(InputStream stream) {
        this.stream = stream;
    }

    public int read() {
        if (snumChars == -1)
            throw new InputMismatchException();
        if (curChar >= snumChars) {
            curChar = 0;
            try {
                snumChars = stream.read(buf);
            } catch (IOException e) {
                throw new InputMismatchException();
            }
            if (snumChars <= 0)
                return -1;
        }
        return buf[curChar++];
    }

    public int nextInt() {
        int c = read();
        while (isSpaceChar(c)) {
            c = read();
        }
        int sgn = 1;
        if (c == '-') {
            sgn = -1;
            c = read();
        }
        int res = 0;
        do {
            res *= 10;
            res += c - '0';
            c = read();
        } while (!isSpaceChar(c));
        return res * sgn;
    }

    public long nextLong() {
        int c = read();
        while (isSpaceChar(c)) {
            c = read();
        }
        int sgn = 1;
        if (c == '-') {
            sgn = -1;
            c = read();
        }
        long res = 0;
        do {
            res *= 10;
            res += c - '0';
            c = read();
        } while (!isSpaceChar(c));
        return res * sgn;
    }

    public int[] nextIntArray(int n) {
        int a[] = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = nextInt();
        }
        return a;
    }

    public String readString() {
        int c = read();
        while (isSpaceChar(c)) {
            c = read();
        }
        StringBuilder res = new StringBuilder();
        do {
            res.appendCodePoint(c);
            c = read();
        } while (!isSpaceChar(c));
        return res.toString();
    }

    public String nextLine() {
        int c = read();
        while (isSpaceChar(c))
            c = read();
        StringBuilder res = new StringBuilder();
        do {
            res.appendCodePoint(c);
            c = read();
        } while (!isEndOfLine(c));
        return res.toString();
    }

    public boolean isSpaceChar(int c) {
        return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
    }

    private boolean isEndOfLine(int c) {
        return c == '\n' || c == '\r' || c == -1;
    }

}

class OutputWriter {
    private final PrintWriter writer;

    public OutputWriter(OutputStream outputStream) {
        writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
    }

    public OutputWriter(Writer writer) {
        this.writer = new PrintWriter(writer);
    }

    public void print(Object... objects) {
        for (int i = 0; i < objects.length; i++) {
            if (i != 0)
                writer.print(' ');
            writer.print(objects[i]);
        }
    }


    public void printLine(Object... objects) {
        print(objects);
        writer.println();
    }

    public void close() {
        writer.close();
    }

    public void flush() {
        writer.flush();
    }

}