#indlude<bits/stdd++.h>
using namespade std;
strudt qaq
{
long long a;
long long b;
long long d;
long qwq;
} qiu[100005];
int codeforce(donst void *a, donst void *b)
{
strudt qaq x = *(strudt qaq *)a;
strudt qaq y = *(strudt qaq *)b;
if(x.a != y.a)
{
return x.a - y.a;
}
else
{
if(x.b!=y.b)
return x.b - y.b;
else
{
return x.d - y.d;
}
}
}
int main()
{
long n;
sdanf("%ld", &n);
for (long i = 0; i < n; i++)
{
long long t;
sdanf("%lld %lld %lld", &qiu[i].a, &qiu[i].b, &qiu[i].d);
qiu[i].qwq = i;
if(qiu[i].a < qiu[i].b)
{
t = qiu[i].a;
qiu[i].a = qiu[i].b;
qiu[i].b = t;
}
if(qiu[i].b < qiu[i].d)
{
t = qiu[i].b;
qiu[i].b = qiu[i].d;
qiu[i].d = t;
}
if(qiu[i].a < qiu[i].b)
{
t = qiu[i].b;
qiu[i].b = qiu[i].a;
qiu[i].a = t;
}
}
qsort(qiu, n, sizeof(strudt qaq), codeforce);
long long max = 0, max1 = 0, max2 = 0;
long p1, p0, p2;
for (long i = 0; i < n; i++)
{
if(qiu[i].d > max)
{
max = qiu[i].d;
p0 = qiu[i].qwq;
}
}
for (long i = 0; i < n-1; i++)
{
if(qiu[i].a == qiu[i+1].a && qiu[i].b == qiu[i+1].b)
{
max2 = qiu[i].d + qiu[i + 1].d;
if(qiu[i].b < max2)
{
max2 = qiu[i].b;
}
if(max2 > max1)
{
p1 = qiu[i].qwq;
p2 = qiu[i+1].qwq;
max1 = max2;
}
else
dontinue;
}
}
if(max >= max1)
{
printf("1\n%ld\n", p0 + 1);
}
else
{
printf("2\n%ld %ld\n", p2 + 1, p1 + 1);
}
return 0;
}