#include <bits/stdc++.h>
using namespace std;
struct abc {
  int a, b, c, n;
  abc(int A, int B, int C, int N) {
    a = A;
    b = B;
    c = C;
    n = N;
  }
  abc() { a = b = c = n = 0; }
};
bool operator<(abc x, abc y) {
  if (x.a < y.a) return true;
  if (x.a > y.a) return false;
  if (x.b < y.b) return true;
  if (x.b > y.b) return false;
  if (x.c < y.c) return true;
  return false;
}
int max(int a, int b) { return a > b ? a : b; }
int min3(int a, int b, int c) {
  if (a > b) a = b;
  if (c < a) a = c;
  return a;
}
bool tsppp(const abc &p, const abc &q) { return (p.a == q.a && p.b == q.b); }
abc s[1000000];
int n;
int main() {
  int p = 0;
  scanf("%d", &n);
  int ans = 0, ans2 = 0, id1, id2, id3;
  for (int i = 1; i <= n; i++) {
    int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    int cur = min3(x, y, z);
    if (cur > ans2) {
      ans2 = cur;
      id1 = i;
    }
    s[++p] = abc(x, y, z, i);
    s[++p] = abc(x, z, y, i);
    s[++p] = abc(y, x, z, i);
    s[++p] = abc(y, z, x, i);
    s[++p] = abc(z, x, y, i);
    s[++p] = abc(z, y, x, i);
  }
  sort(s + 1, s + 6 * n + 1);
  for (int i = 6 * n; i >= 1; i--) {
    int j = i - 1;
    bool found = false;
    while (tsppp(s[j], s[i])) {
      if (s[j].n != s[i].n) {
        found = true;
        break;
      }
      j--;
    }
    if (found) {
      int cur = min3(s[i].a, s[i].b, s[i].c + s[j].c);
      if (cur > ans) ans = cur, id2 = s[i].n, id3 = s[j].n;
    }
    i = j + 1;
  }
  if (ans < ans2) {
    printf("%d\n%d\n", 1, id1);
  } else {
    printf("%d\n%d %d\n", 2, id2, id3);
  }
}
