#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  double mx_one = 0;
  int ans_one = -1, m;
  vector<int> a, b, c, d;
  for (int i = 0; i < n; ++i) {
    int a1, b1, c1;
    cin >> a1 >> b1 >> c1;
    m = min(a1, min(b1, c1));
    if ((double)m > mx_one) {
      mx_one = (double)m;
      ans_one = i;
    }
    a.push_back(a1);
    b.push_back(b1);
    c.push_back(c1);
    a.push_back(a1);
    b.push_back(c1);
    c.push_back(b1);
    a.push_back(b1);
    b.push_back(a1);
    c.push_back(c1);
    a.push_back(b1);
    b.push_back(c1);
    c.push_back(a1);
    a.push_back(c1);
    b.push_back(a1);
    c.push_back(b1);
    a.push_back(c1);
    b.push_back(b1);
    c.push_back(a1);
    for (int q = 0; q < 6; ++q) d.push_back(i);
  }
  n = a.size();
  double mx_two = 0;
  int ans_two_a = -1, ans_two_b = -1;
  int mxp, mxr, mxp_pos, mxr_pos;
  vector<pair<int, int>> v;
  vector<pair<pair<int, int>, pair<int, int>>> p1(n);
  for (int i = 0; i < n; ++i) {
    p1[i].first.first = a[i];
    p1[i].first.second = b[i];
    p1[i].second.first = c[i];
    p1[i].second.second = d[i];
  }
  sort(p1.begin(), p1.end());
  pair<int, int> cur_p1 = p1[0].first;
  for (int i = 0; i < n; ++i) {
    if (p1[i].first == cur_p1)
      v.push_back(p1[i].second);
    else {
      mxr = 0, mxp = 0, mxr_pos = -1, mxp_pos = -1;
      for (int j = 0; j < v.size(); ++j) {
        if (v[j].first >= mxr && v[j].second != mxr_pos &&
            v[j].second != mxp_pos) {
          mxp = mxr;
          mxp_pos = mxr_pos;
          mxr = v[j].first;
          mxr_pos = v[j].second;
        } else if (v[j].first >= mxp && v[j].second != mxr_pos &&
                   v[j].second != mxp_pos) {
          mxp = v[j].first;
          mxp_pos = v[j].second;
        }
      }
      m = min(cur_p1.first, min(cur_p1.second, mxr + mxp));
      if (m > mx_two && mxr_pos != -1 && mxp_pos != -1) {
        mx_two = m;
        ans_two_a = mxr_pos;
        ans_two_b = mxp_pos;
      }
      cur_p1 = p1[i].first;
      v.clear();
      v.push_back(p1[i].second);
    }
  }
  mxr = 0, mxp = 0, mxr_pos = -1, mxp_pos = -1;
  for (int j = 0; j < v.size(); ++j) {
    if (v[j].first >= mxr && v[j].second != mxr_pos && v[j].second != mxp_pos) {
      mxp = mxr;
      mxp_pos = mxr_pos;
      mxr = v[j].first;
      mxr_pos = v[j].second;
    } else if (v[j].first >= mxp && v[j].second != mxr_pos &&
               v[j].second != mxp_pos) {
      mxp = v[j].first;
      mxp_pos = v[j].second;
    }
  }
  m = min(cur_p1.first, min(cur_p1.second, mxr + mxp));
  if (m > mx_two && mxr_pos != -1 && mxp_pos != -1) {
    mx_two = m;
    ans_two_a = mxr_pos;
    ans_two_b = mxp_pos;
  }
  v.clear();
  vector<pair<pair<int, int>, pair<int, int>>> p2(n);
  for (int i = 0; i < n; ++i) {
    p2[i].first.first = b[i];
    p2[i].first.second = c[i];
    p2[i].second.first = a[i];
    p2[i].second.second = d[i];
  }
  sort(p2.begin(), p2.end());
  pair<int, int> cur_p2 = p2[0].first;
  for (int i = 0; i < n; ++i) {
    if (p2[i].first == cur_p2)
      v.push_back(p2[i].second);
    else {
      mxr = 0, mxp = 0, mxr_pos = -1, mxp_pos = -1;
      for (int j = 0; j < v.size(); ++j) {
        if (v[j].first >= mxr && v[j].second != mxr_pos &&
            v[j].second != mxp_pos) {
          mxp = mxr;
          mxp_pos = mxr_pos;
          mxr = v[j].first;
          mxr_pos = v[j].second;
        } else if (v[j].first >= mxp && v[j].second != mxr_pos &&
                   v[j].second != mxp_pos) {
          mxp = v[j].first;
          mxp_pos = v[j].second;
        }
      }
      m = min(cur_p2.first, min(cur_p2.second, mxr + mxp));
      if (m > mx_two && mxr_pos != -1 && mxp_pos != -1) {
        mx_two = m;
        ans_two_a = mxr_pos;
        ans_two_b = mxp_pos;
      }
      cur_p2 = p2[i].first;
      v.clear();
      v.push_back(p2[i].second);
    }
  }
  mxr = 0, mxp = 0, mxr_pos = -1, mxp_pos = -1;
  for (int j = 0; j < v.size(); ++j) {
    if (v[j].first >= mxr && v[j].second != mxr_pos && v[j].second != mxp_pos) {
      mxp = mxr;
      mxp_pos = mxr_pos;
      mxr = v[j].first;
      mxr_pos = v[j].second;
    } else if (v[j].first >= mxp && v[j].second != mxr_pos &&
               v[j].second != mxp_pos) {
      mxp = v[j].first;
      mxp_pos = v[j].second;
    }
  }
  m = min(cur_p2.first, min(cur_p2.second, mxr + mxp));
  if (m > mx_two && mxr_pos != -1 && mxp_pos != -1) {
    mx_two = m;
    ans_two_a = mxr_pos;
    ans_two_b = mxp_pos;
  }
  v.clear();
  vector<pair<pair<int, int>, pair<int, int>>> p3(n);
  for (int i = 0; i < n; ++i) {
    p3[i].first.first = a[i];
    p3[i].first.second = c[i];
    p3[i].second.first = b[i];
    p3[i].second.second = d[i];
  }
  sort(p3.begin(), p3.end());
  pair<int, int> cur_p3 = p3[0].first;
  for (int i = 0; i < n; ++i) {
    if (p3[i].first == cur_p3)
      v.push_back(p3[i].second);
    else {
      mxr = 0, mxp = 0, mxr_pos = -1, mxp_pos = -1;
      for (int j = 0; j < v.size(); ++j) {
        if (v[j].first >= mxr && v[j].second != mxr_pos &&
            v[j].second != mxp_pos) {
          mxp = mxr;
          mxp_pos = mxr_pos;
          mxr = v[j].first;
          mxr_pos = v[j].second;
        } else if (v[j].first >= mxp && v[j].second != mxr_pos &&
                   v[j].second != mxp_pos) {
          mxp = v[j].first;
          mxp_pos = v[j].second;
        }
      }
      m = min(cur_p3.first, min(cur_p3.second, mxr + mxp));
      if (m > mx_two && mxr_pos != -1 && mxp_pos != -1) {
        mx_two = m;
        ans_two_a = mxr_pos;
        ans_two_b = mxp_pos;
      }
      cur_p3 = p3[i].first;
      v.clear();
      v.push_back(p3[i].second);
    }
  }
  mxr = 0, mxp = 0, mxr_pos = -1, mxp_pos = -1;
  for (int j = 0; j < v.size(); ++j) {
    if (v[j].first >= mxr && v[j].second != mxr_pos && v[j].second != mxp_pos) {
      mxp = mxr;
      mxp_pos = mxr_pos;
      mxr = v[j].first;
      mxr_pos = v[j].second;
    } else if (v[j].first >= mxp && v[j].second != mxr_pos &&
               v[j].second != mxp_pos) {
      mxp = v[j].first;
      mxp_pos = v[j].second;
    }
  }
  m = min(cur_p3.first, min(cur_p3.second, mxr + mxp));
  if (m > mx_two && mxr_pos != -1 && mxp_pos != -1) {
    mx_two = m;
    ans_two_a = mxr_pos;
    ans_two_b = mxp_pos;
  }
  v.clear();
  if (mx_one > mx_two || ans_two_a == -1 || ans_two_b == -1) {
    cout << 1 << "\n";
    cout << ans_one + 1;
  } else {
    cout << 2 << "\n";
    cout << ans_two_a + 1 << " " << ans_two_b + 1;
  }
  return 0;
}
