#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <queue>
#include <algorithm>
#include <map>
#include <cmath>
#include <iomanip>
using namespace std;
const int MAXN=400010;
struct Point
{
int x,y;
bool friend operator <(const Point &x,const Point &y)
{
if(x.x!=y.x)
return x.x<y.x;
return x.y<y.y;
}
};
struct Segment
{
Point a,b;
}a[MAXN];
int n,father[MAXN];
map<Point,int>hashh;
int findd(const int &x)
{
if(father[x]!=x)
{
father[x]=findd(father[x]);
}
return father[x];
}
void input()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].a.x>>a[i].a.y>>a[i].b.x>>a[i].b.y;
}
}
void Solve()
{
for(int i=0;i<2*n;i++)
{
father[i]=i;
}
int cnt=0;
for(int i=1,u,v;i<=n;i++)
{
if(hashh.count(a[i].a))
u=hashh[a[i].a];
else
u=hashh[a[i].a]=cnt++;
if(hashh.count(a[i].b))
v=hashh[a[i].b];
else
v=hashh[a[i].b]=cnt++;
u=findd(u);
v=findd(v);
if(u==v)
{
cout<<i<<endl;
return ;
}
father[u]=v;
}
puts("0");
}
int main()
{
input();
Solve();
return 0;
}