#include <bits/stdc++.h>
using namespace std;
int n, k, x, y, flag;
struct node {
  int a, b, c;
  int id;
} sum[100005];
int vis[3];
int cmp(node s, node ss) {
  if (s.a == ss.a) {
    if (s.b == ss.b) return s.c < ss.c;
    return s.b < ss.b;
  }
  return s.a < ss.a;
}
int main() {
  int maxone = 0, maxtwo = 0;
  while (cin >> n) {
    flag = 0;
    int one = 0;
    maxone = 0, maxtwo = 0;
    for (int i = 0; i < n; i++) {
      double A, B, C;
      scanf("%d%d%d", &vis[0], &vis[1], &vis[2]);
      sort(vis, vis + 3);
      sum[i].a = vis[2];
      sum[i].b = vis[1];
      sum[i].c = vis[0];
      sum[i].id = i + 1;
      if (vis[0] > maxone) {
        maxone = vis[0];
        one = i + 1;
      }
    }
    sort(sum, sum + n, cmp);
    int maxn = 0;
    for (int i = 1; i < n; i++) {
      if (sum[i].a == sum[i - 1].a && sum[i].b == sum[i - 1].b) {
        if (min(min(sum[i].a, sum[i].b), sum[i].c + sum[i - 1].c) > maxtwo) {
          maxtwo = min(min(sum[i].a, sum[i].b), sum[i].c + sum[i - 1].c);
          x = min(sum[i].id, sum[i - 1].id);
          y = max(sum[i].id, sum[i - 1].id);
        }
      }
    }
    if (maxone > maxtwo) {
      printf("1\n%d\n", one);
    } else
      printf("2\n%d %d\n", x, y);
  }
  return 0;
}
