#include<bits/stdc++.h>
#define rank AAAAAA
#define MAX 114514
using namespace std;
int par[MAX];
int rank[MAX];
  
void init(int n){
  for(int i=0;i<n;i++){
    par[i]=i;
    rank[i]=0;
  }
}
int find(int x){
  if(par[x]==x)return x;
  else return par[x]=find(par[x]);
}
void unit(int x,int y){
  x=find(x);
  y=find(y);
  if(x==y)return;
  
  if(rank[x]<rank[y]){
    par[x]=y;
  }
  else{
    par[y]=x;
    if(rank[x]==rank[y])rank[x]++;
  }
}
  
unordered_map<int,int> mm;
  
int main(){
  int n,m,k,a,b,c;
  cin>>n>>m>>k;
  init(n+1);
  for(int i=1;i<=k;i++){
    cin>>c>>a>>b;
    if(c==1){
      int p1=find(a),p2=find(b);
      if(mm[p1]&&mm[p2]&&mm[p2]!=mm[p1]){
        cout<<i<<endl;
        break;
      }
      unit(a,b);
      if(mm[p1])mm[p2]=mm[p1];
      if(mm[p2])mm[p1]=mm[p2];
    }
    else{
      int p=find(a);
      if(mm[p]&&mm[p]!=b){
    cout<<i<<endl;
    break;
      }
      mm[p]=b;
    }
    if(i==k)cout<<0<<endl;
  }
}