#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define INF 0x1f1f1f1f
#define LL long long
LL dp[15][333];
LL matrix[15][333];
int path[15][333];
#define min(a,b) (a) > (b)? (b):(a)
int row, clo;
int main()
{
while(scanf("%d %d",&row, &clo) != EOF)
{
for( int i = 0; i < row; i++)
for( int j = clo-1; j>=0; j--)
scanf("%lld",&matrix[i][j]);
memset(dp, 0, sizeof(dp));
for( int i = 0; i < row; i++)
dp[i][0] = matrix[i][0];
for( int j = 1; j <= clo; j++)
{
for( int i = 0; i <= row; i++)
{
dp[i][j] = INF;
int x1 = ( i - 1 + row)%row;
int x2 = (x1 + 1)%row;
int x3 = (x2 + 1)%row;
if(x1 > x2)
swap(x1, x2);
if(x1 > x3)
swap(x1, x3);
if(x2 > x3)
swap(x2, x3);
int tmp = x1;
path[i][j] = x1;
if(dp[x1][j-1] > dp[x2][j-1])
{
path[i][j] = x2;
tmp = x2;
}
if(dp[tmp][j-1] > dp[x3][j-1])
{
path[i][j] = x3;
tmp = x3;
}
dp[i][j] = dp[tmp][j-1] + matrix[i][j];
}
}
LL minn = INF;
int x;
for( int i = 0; i < row; i++)
{
if(minn > dp[i][clo-1])
{
minn = dp[i][clo-1];
x = i;
}
}
printf("%d",x+1);
for( int i = clo - 1; i > 0 ; i--)
{
printf(" %d",path[x][i]+1);
x = path[x][i];
}
printf("\n");
printf("%d\n",minn);
}
}
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define INF 0x1f1f1f1f
#define LL long long
LL dp[15][333];
LL matrix[15][333];
int path[15][333];
#define min(a,b) (a) > (b)? (b):(a)
int row, clo;
int main()
{
while(scanf("%d %d",&row, &clo) != EOF)
{
for( int i = 0; i < row; i++)
for( int j = clo-1; j>=0; j--)
scanf("%lld",&matrix[i][j]);
memset(dp, 0, sizeof(dp));
for( int i = 0; i < row; i++)
dp[i][0] = matrix[i][0];
for( int j = 1; j <= clo; j++)
{
for( int i = 0; i <= row; i++)
{
dp[i][j] = INF;
int x1 = ( i - 1 + row)%row;
int x2 = (x1 + 1)%row;
int x3 = (x2 + 1)%row;
if(x1 > x2)
swap(x1, x2);
if(x1 > x3)
swap(x1, x3);
if(x2 > x3)
swap(x2, x3);
int tmp = x1;
path[i][j] = x1;
if(dp[x1][j-1] > dp[x2][j-1])
{
path[i][j] = x2;
tmp = x2;
}
if(dp[tmp][j-1] > dp[x3][j-1])
{
path[i][j] = x3;
tmp = x3;
}
dp[i][j] = dp[tmp][j-1] + matrix[i][j];
}
}
LL minn = INF;
int x;
for( int i = 0; i < row; i++)
{
if(minn > dp[i][clo-1])
{
minn = dp[i][clo-1];
x = i;
}
}
printf("%d",x+1);
for( int i = clo - 1; i > 0 ; i--)
{
printf(" %d",path[x][i]+1);
x = path[x][i];
}
printf("\n");
printf("%d\n",minn);
}
}