#include <bits/stdc++.h>
using namespace std;
void setIO(const string &name = "") {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  if (name.length()) {
    freopen((name + ".in").c_str(), "r", stdin);
    freopen((name + ".out").c_str(), "w", stdout);
  }
}
template <typename T>
void read(vector<T> &a) {
  for (auto &x : a) cin >> x;
}
template <typename T>
void read(vector<T> &a, int n) {
  a.resize(n);
  for (auto &x : a) cin >> x;
}
template <class T, class U>
ostream &operator<<(ostream &out, const pair<T, U> &v) {
  out << "(";
  out << v.first << "," << v.second;
  return out << ")";
}
template <class T>
ostream &operator<<(ostream &out, const vector<T> &v) {
  out << "[";
  for (auto(i) = 0; (i) < ((int)(v).size()); (i)++) {
    if (i) out << ", ";
    out << v[i];
  }
  return out << "]";
}
template <typename T>
void print(vector<T> &a) {
  for (const auto &x : a) cout << x << ' ';
  cout << '\n';
}
void MOD(int &x, int m = 1000000007) {
  x %= m;
  if (x < 0) x += m;
}
template <typename T>
void dbg(const char *name, T &&arg1) {
  cout << name << " : " << arg1 << '\n';
}
template <typename T, typename... U>
void dbg(const char *names, T &&arg1, U &&...args) {
  const char *comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " : " << arg1 << " | ";
  dbg(comma + 1, args...);
}
template <class T>
void read(T &x) {
  cin >> x;
}
template <class T, class... U>
void read(T &t, U &...u) {
  read(t);
  read(u...);
}
template <class T>
void tell(T &x) {
  cout << x;
}
template <class T, class... U>
void tell(T &t, U &...u) {
  tell(t);
  if (sizeof...(u)) tell(" ");
  tell(u...);
}
int gcd(int a, int b) { return !a ? b : gcd(b % a, a); }
int n, m;
vector<vector<int> > board;
int dp[101][int(5e4) + 10 + int(5e4) + 10];
int32_t main() {
  setIO();
  read(m, n);
  board.resize(n);
  for (auto &(c) : (board)) {
    read(c, m);
  }
  int ans = int(2e9) + 15;
  vector<int> ans_ar;
  for (int diff = -int(5e4) + 10 + 1; diff < int(5e4) + 10; diff++) {
    if (diff >= 0) {
      dp[n][diff + int(5e4) + 10] = 0;
    } else {
      dp[n][diff + int(5e4) + 10] = int(2e9) + 15;
    }
  }
  for (auto(i) = 0; (i) < (m - 1); (i)++) {
    for (int idx = n - 1; idx >= 0; idx--) {
      for (int diff = -int(5e4) + 10 + 1; diff < int(5e4) + 10; diff++) {
        int &res = dp[idx][diff + int(5e4) + 10];
        res = int(2e9) + 15;
        res = min(res, dp[idx + 1][diff + int(5e4) + 10] + 1);
        if (diff + (board[idx][i] - board[idx][m - 1]) >= int(5e4) + 10) {
          res = 0;
        } else if (diff + (board[idx][i] - board[idx][m - 1]) <=
                   -int(5e4) + 10) {
          res = int(2e9) + 15;
        } else {
          res =
              min(res, dp[idx + 1][diff + (board[idx][i] - board[idx][m - 1]) +
                                   int(5e4) + 10]);
        }
      }
    }
    if (ans > dp[0][int(5e4) + 10]) {
      ans = dp[0][int(5e4) + 10];
      int cur_diff = 0;
      ans_ar.clear();
      for (int idx = 0; idx < n; idx++) {
        const int &res = dp[idx][cur_diff + int(5e4) + 10];
        if (res == dp[idx + 1][cur_diff + int(5e4) + 10] + 1) {
          ans_ar.emplace_back(idx + 1);
          continue;
        } else {
          if (cur_diff + (board[idx][i] - board[idx][m - 1]) >= int(5e4) + 10) {
            break;
          } else if (cur_diff + (board[idx][i] - board[idx][m - 1]) <=
                     -int(5e4) + 10) {
            break;
          } else {
            cur_diff += (board[idx][i] - board[idx][m - 1]);
          }
        }
      }
    }
  }
  cout << ans << '\n';
  print(ans_ar);
  return 0;
}
