#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;   }