#include <bits/stdc++.h>
using namespace std;
int i, n, mx, mn, p1, p2, poz, poz1, poz2, k, mx1, mx2, m, mij, u, x, y, z, q;
struct para {
  int x, y, z, ind;
} a[100007];
int cmp(para k1, para k2) {
  if (k1.x > k2.x)
    return 0;
  else if (k1.x == k2.x) {
    if (k1.y > k2.y)
      return 0;
    else if (k1.y == k2.y) {
      if (k1.z > k2.z)
        return 0;
      else if (k1.z == k2.z) {
        return 0;
      }
      return 1;
    }
    return 1;
  }
  return 1;
}
int main() {
  scanf("%d", &n);
  mx = -1;
  for (i = 1; i <= n; i++) {
    scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].z);
    a[i].ind = i;
    mn = a[i].x;
    if (mn > a[i].y) mn = a[i].y;
    if (mn > a[i].z) mn = a[i].z;
    if (mx < mn) {
      mx = mn;
      k = 1;
      poz = a[i].ind;
    }
    m = max(max(a[i].x, a[i].y), a[i].z);
    mij = a[i].x + a[i].y + a[i].z - m - mn;
    a[i].x = mn;
    a[i].y = mij;
    a[i].z = m;
  }
  sort(a + 1, a + n + 1, cmp);
  for (i = 1; i <= n; i++) {
    mx1 = -1;
    mx2 = -1;
    u = 0;
    while (a[i].x == a[i + 1].x && a[i].y == a[i + 1].y) {
      u = 1;
      if (mx1 < a[i].z) {
        mx2 = mx1;
        poz2 = poz1;
        mx1 = a[i].z;
        poz1 = a[i].ind;
      } else if (mx2 < a[i].z) {
        mx2 = a[i].z;
        poz2 = a[i].ind;
      }
      i++;
    }
    if (u == 1) {
      if (mx1 < a[i].z) {
        mx2 = mx1;
        poz2 = poz1;
        mx1 = a[i].z;
        poz1 = a[i].ind;
      } else if (mx2 < a[i].z) {
        mx2 = a[i].z;
        poz2 = a[i].ind;
      }
    }
    q = min(min(a[i].x, a[i].y), mx1 + mx2);
    if (mx < q) {
      mx = q;
      k = 2;
      p1 = poz1;
      p2 = poz2;
    }
  }
  for (i = 1; i <= n; i++) {
    x = a[i].x;
    y = a[i].y;
    z = a[i].z;
    a[i].x = y;
    a[i].y = z;
    a[i].z = x;
  }
  sort(a + 1, a + n + 1, cmp);
  for (i = 1; i <= n; i++) {
    mx1 = -1;
    mx2 = -1;
    u = 0;
    while (a[i].x == a[i + 1].x && a[i].y == a[i + 1].y) {
      u = 1;
      if (mx1 < a[i].z) {
        mx2 = mx1;
        poz2 = poz1;
        mx1 = a[i].z;
        poz1 = a[i].ind;
      } else if (mx2 < a[i].z) {
        mx2 = a[i].z;
        poz2 = a[i].ind;
      }
      i++;
    }
    if (u == 1) {
      if (mx1 < a[i].z) {
        mx2 = mx1;
        poz2 = poz1;
        mx1 = a[i].z;
        poz1 = a[i].ind;
      } else if (mx2 < a[i].z) {
        mx2 = a[i].z;
        poz2 = a[i].ind;
      }
    }
    q = min(min(a[i].x, a[i].y), mx1 + mx2);
    if (mx < q) {
      mx = q;
      k = 2;
      p1 = poz1;
      p2 = poz2;
    }
  }
  for (i = 1; i <= n; i++) {
    x = a[i].x;
    y = a[i].y;
    z = a[i].z;
    a[i].x = y;
    a[i].y = z;
    a[i].z = x;
  }
  sort(a + 1, a + n + 1, cmp);
  for (i = 1; i <= n; i++) {
    mx1 = -1;
    mx2 = -1;
    u = 0;
    while (a[i].x == a[i + 1].x && a[i].y == a[i + 1].y) {
      u = 1;
      if (mx1 < a[i].z) {
        mx2 = mx1;
        poz2 = poz1;
        mx1 = a[i].z;
        poz1 = a[i].ind;
      } else if (mx2 < a[i].z) {
        mx2 = a[i].z;
        poz2 = a[i].ind;
      }
      i++;
    }
    if (u == 1) {
      if (mx1 < a[i].z) {
        mx2 = mx1;
        poz2 = poz1;
        mx1 = a[i].z;
        poz1 = a[i].ind;
      } else if (mx2 < a[i].z) {
        mx2 = a[i].z;
        poz2 = a[i].ind;
      }
    }
    q = min(min(a[i].x, a[i].y), mx1 + mx2);
    if (mx < q) {
      mx = q;
      k = 2;
      p1 = poz1;
      p2 = poz2;
    }
  }
  printf("%d\n", k);
  if (k == 1)
    printf("%d\n", poz);
  else {
    printf("%d %d\n", p1, p2);
  }
  return 0;
}
