#include <bits/stdc++.h>
using namespace std;
const int inf = 0x7fffffff;
struct Nod {
  int a[3];
  int id;
  Nod() {}
  Nod(int _a, int _b, int _c) {
    a[0] = _a;
    a[1] = _b;
    a[2] = _c;
  }
  bool operator<(const Nod &cmp) const {
    if (a[2] != cmp.a[2]) return a[2] < cmp.a[2];
    if (a[1] != cmp.a[1]) return a[1] < cmp.a[1];
    return a[0] < cmp.a[0];
  }
} p[100005];
set<Nod> st;
bool isMax(Nod a, Nod b) {
  int x = min(min(a.a[0], a.a[1]), a.a[2]);
  int y = min(min(b.a[0], b.a[1]), b.a[2]);
  if (x < y) return true;
  return false;
}
int main() {
  int n;
  scanf("%d", &n);
  int id = 1, xd = -1;
  for (int i = 0; i < n; i++) {
    scanf("%d%d%d", &p[i].a[0], &p[i].a[1], &p[i].a[2]);
    p[i].id = i + 1;
    sort(p[i].a, p[i].a + 3);
  }
  Nod mx = p[0];
  for (int i = 1; i < n; i++) {
    if (isMax(mx, p[i])) mx = p[i], id = i + 1;
  }
  sort(p, p + n);
  for (int i = n - 1; i >= 0; i--) {
    set<Nod>::iterator it = st.upper_bound(Nod(inf, p[i].a[1], p[i].a[2]));
    if (it != st.begin()) {
      it--;
      if (it->a[1] == p[i].a[1] && it->a[2] == p[i].a[2]) {
        Nod t = Nod(it->a[0] + p[i].a[0], p[i].a[1], p[i].a[2]);
        if (isMax(mx, t)) {
          mx = t;
          id = it->id;
          xd = p[i].id;
          if (id > xd) swap(id, xd);
        }
      }
    }
    it = st.upper_bound(Nod(inf, p[i].a[0], p[i].a[2]));
    if (it != st.begin()) {
      it--;
      if (it->a[1] == p[i].a[0] && it->a[2] == p[i].a[2]) {
        Nod t = Nod(it->a[0] + p[i].a[1], p[i].a[0], p[i].a[2]);
        if (isMax(mx, t)) {
          mx = t;
          id = it->id;
          xd = p[i].id;
          if (id > xd) swap(id, xd);
        }
      }
    }
    it = st.upper_bound(Nod(inf, p[i].a[0], p[i].a[1]));
    if (it != st.begin()) {
      it--;
      if (it->a[1] == p[i].a[0] && it->a[2] == p[i].a[1]) {
        Nod t = Nod(it->a[0] + p[i].a[2], p[i].a[0], p[i].a[1]);
        if (isMax(mx, t)) {
          mx = t;
          id = it->id;
          xd = p[i].id;
          if (id > xd) swap(id, xd);
        }
      }
    }
    st.insert(p[i]);
    Nod t = p[i];
    swap(t.a[1], t.a[0]);
    st.insert(t);
    t = p[i];
    swap(t.a[1], t.a[2]);
    swap(t.a[1], t.a[0]);
    st.insert(t);
  }
  if (xd != -1) {
    printf("2\n");
    printf("%d %d\n", id, xd);
  } else {
    printf("1\n");
    printf("%d\n", id);
  }
  return 0;
}
