#include <bits/stdc++.h>
using namespace std;
const int MAX = 200 + 5;
vector<int> adj[MAX];
int col[MAX], row[MAX];
int arr[MAX][MAX];
int n, m;
int in[MAX];
int stateR[MAX], stateC[MAX];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      cin >> arr[i][j], row[i] += arr[i][j], col[j] += arr[i][j];
  queue<int> q;
  for (int i = 1; i <= n; i++)
    if (row[i] < 0) in[i] = 1, q.push(i);
  for (int i = 1; i <= m; i++)
    if (col[i] < 0) in[i + n] = 1, q.push(i + n);
  while (q.size()) {
    int cur = q.front();
    q.pop();
    in[cur] = 0;
    if (cur <= n) {
      if (row[cur] >= 0) continue;
      row[cur] *= -1;
      stateR[cur] ^= 1;
      for (int i = 1; i <= m; i++) {
        col[i] -= arr[cur][i];
        arr[cur][i] *= -1;
        col[i] += arr[cur][i];
        if (col[i] < 0 && in[i + n] == 0) in[i + n] = 1, q.push(i + n);
      }
    } else {
      cur -= n;
      if (col[cur] >= 0) continue;
      col[cur] *= -1;
      stateC[cur] ^= 1;
      for (int i = 1; i <= n; i++) {
        row[i] -= arr[i][cur];
        arr[i][cur] *= -1;
        row[i] += arr[i][cur];
        if (row[i] < 0 && in[i] == 0) in[i] = 1, q.push(i);
      }
    }
  }
  vector<int> R, C;
  for (int i = 1; i <= n; i++)
    if (stateR[i]) R.push_back(i);
  for (int i = 1; i <= m; i++)
    if (stateC[i]) C.push_back(i);
  cout << R.size();
  for (int i = 0; i < R.size(); i++) cout << " " << R[i];
  cout << "\n";
  cout << C.size();
  for (int i = 0; i < C.size(); i++) cout << " " << C[i];
  cout << "\n";
  return 0;
}
