#include <iostream>
using namespace std;

int par[100000],rnk[100000];

void init(int n){
	for(int i = 0;i < n;i++){
		par[i] = i;
		rnk[i] = 0;
	}
}

int find(int x){
	if(par[x] == x) return x;
	return par[x] = find(par[x]);
}

void unite(int x,int y){
	x = find(x);
	y = find(y);
	if(x == y) return;
	if(rnk[x] < rnk[y]) par[x] = y;
	else{
		par[y] = x;
		if(rnk[x] == rnk[y]) rnk[x]++;
	}
}

bool same(int x,int y){
	return find(x) == find(y);
}

int main(){
	int n,m,k,bukatu[100000];
	cin >> n >> m >> k;
	for(int i = 0;i < n;i++) bukatu[i] = -1;
	init(n);
	for(int i = 0;i < k;i++){
		int t,a,b;
		cin >> t >> a >> b;
		if(t == 1){
			a--;b--;
			a = find(a);
			b = find(b);
			if(bukatu[a] == -1 && bukatu[b] != -1){
				int bu = bukatu[b];
				unite(a,b);
				bukatu[find(a)] = bu;
			}else if(bukatu[a] != -1 && bukatu[b] == -1){
				int bu = bukatu[a];
				unite(a,b);
				bukatu[find(a)] = bu;
			}
			else if(bukatu[a] != bukatu[b]){
				cout << i + 1 << endl;
				return 0;
			}else unite(a,b);
		}else{
			a--;
			a = find(a);
			if(bukatu[a] == -1) bukatu[a] = b;
			else if(bukatu[a] != b){
				cout << i + 1 << endl;
				return 0;
			}
		}
	}
	cout << 0 << endl;
	return 0;
}