//15-7
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <string>
#include <vector>
#include <map>
#include <list>
#include <set>
#include <stack>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <random>
#include <cassert>
using namespace std;
#define LL long long
#undef INT_MIN
#undef INT_MAX
#define INT_MIN -2147483648
#define INT_MAX 2147483647
#define LL_MIN -9223372036854775808
#define LL_MAX 9223372036854775807
#define segment_size 65536
#define ROOP() while (true)

int club[100005];
vector<int> friends[100005];

bool check(int person){
    bool re = false;
    for(int i=0; i<friends[person].size(); i++){
        int tmp = friends[person][i];
        if(club[tmp] == club[person]){

        }
        else if(club[tmp] == -1){
            club[tmp] = club[person];
            re = (re | check(tmp));
        }
        else{
            re = true;
        }
        if(re) return re;
    }
    return re;
}

int main(){
    int N,M,K;
    cin >> N >> M >> K;
    for(int i=0; i<N+1; i++){
        club[i] = -1;
    }
    
    bool flg = true;
    for(int i=0; i<K; i++){
        if(flg == false){
            int a,b,c;
            cin >> a >> b >> c;
            continue;
        }
        int tmp;
        cin >> tmp;
        if(tmp == 1){
            int a,b;
            cin >> a >> b;
            friends[a].push_back(b);
            friends[b].push_back(a);
            bool state = false;
            if(club[a] != -1) state = (state | check(a));
            if(club[b] != -1) state = (state | check(b));
            if(state){
                cout << i+1 << endl;
                flg = false;
                continue;
            }
        }
        else{
            int c,x;
            cin >> c >> x;
            if(club[c] != -1 && club[c] != x){
                cout << i+1 << endl;
                flg = false;
                continue;
            }
            club[c] = x;
            bool state = check(c);
            if(state){
                cout << i+1 << endl;
                flg = false;
                continue;
            }
        }
    }
    if(flg) cout << 0 << endl;

    return 0;
}

