#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 101
int grid[MAX][MAX], f[MAX][MAX], tree[MAX][MAX], path[MAX];
int m, n;
int findmin(int i, int j)
{
// compare f[i][j + 1], f[i - 1][j + 1], f[i + 1][j + 1]
if (f[i][j + 1] < f[i - 1][j + 1]) {
if (f[i][j + 1] < f[i + 1][j + 1])
return i;
if (f[i][j + 1] == f[i + 1][j + 1])
return i + 1 == m + 1 ? 1 : i;
return i + 1 == m + 1 ? 1 : i + 1;
}
if (f[i][j + 1] == f[i - 1][j + 1]) {
if (f[i + 1][j + 1] < f[i][j + 1])
return i + 1 == m + 1 ? 1 : i + 1;
if (f[i + 1][j + 1] == f[i][j + 1]) {
return (i + 1 == m + 1 ? 1 : i - 1 == 0 ? i : i - 1);
}
return i - 1 == 0 ? i : i - 1;
}
if (f[i][j + 1] > f[i - 1][j + 1]) {
if (f[i + 1][j + 1] < f[i - 1][j + 1])
return i + 1 == m + 1 ? 1 : i + 1;
if (f[i + 1][j + 1] == f[i - 1][j + 1]) {
return (i + 1 == m + 1 ? 1 : i - 1 == 0 ? i + 1 : i - 1);
}
return i - 1 == 0 ? m : i - 1;
}
return -1;
}
// sequecct from len - 1... 0
int main(void)
{
int i, j, min;
while (scanf("%d %d", &m, &n) == 2) {
for (i = 1; i <= m; i++) {
for (j = 0; j < n; j++)
scanf("%d", &grid[i][j]);
}
for (j = 0; j < n; j++) {
grid[m + 1][j] = grid[1][j];
grid[0][j] = grid[m][j];
}
for (i = 1; i <= m; i++) {
f[i][n - 1] = grid[i][n - 1];
tree[i][n - 1] = i;
}
f[0][n - 1] = f[m][n - 1];
f[m + 1][n - 1] = f[1][n - 1];
tree[0][n - 1] = tree[m][n - 1];
tree[m + 1][n - 1] = tree[1][n - 1];
for (j = n - 2; j >= 0; j--) {
for (i = 1; i <= m; i++) {
min = findmin(i, j);
f[i][j] = f[min][j + 1] + grid[i][j];
tree[i][j] = min;
}
f[0][j] = f[m][j];
f[m + 1][j] = f[1][j];
}
min = 1;
for (i = 2; i <= m; i++) {
if (f[i][0] < f[min][0]) {
min = i;
}
}
i = min;
for (j = 0; j < n - 1; j++) {
printf("%d ", min);
min = tree[min][j];
}
printf("%d\n%d\n", min, f[i][0]);
}
return 0;
}
