#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int m,n,sum=0;
cin>>m>>n;
int a[20][20];
bool ans = false; // 初始值設為false
for(int k=0;k<20;k++){
for(int q=0;q<20;q++){
a[k][q]=0;
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
// 我把下面土法煉鋼的程式先註解掉
// sum=sum+std::max({a[i][0],a[i][1],a[i][2],a[i][3],a[i][4],a[i][5],a[i][6],a[i][7],a[i][8],a[i][9],a[i][10],a[i][11],a[i][12],a[i][13],a[i][14],a[i][15],a[i][16],a[i][17],a[i][18],a[i][19]});
// 既然你都引用algorithm 函式庫,就來示範另一個函數:max_element怎麼用吧!
sum = sum + *max_element(a[i], a[i]+20); // 從a的第i列開頭取20個元素,找出最大值,跟sum加總
}
cout<<sum<<endl;
for(int x=0;x<m;x++){ // 大括弧記得加,才能包住所有所需程式敘述
if(sum % std::max({a[x][0],a[x][1],a[x][2],a[x][3],a[x][4],a[x][5],a[x][6],a[x][7],a[x][8],a[x][9],a[x][10],a[x][11],a[x][12],a[x][13],a[x][14],a[x][15],a[x][16],a[x][17],a[x][18],a[x][19]})==0){
if(ans) cout << " ";// ans初在遇到第一個可整除的最大值才會變成true,再之後前面才需要輸出空格
ans=true;
// cout<<std::max({a[x][0],a[x][1],a[x][2],a[x][3],a[x][4],a[x][5],a[x][6],a[x][7],a[x][8],a[x][9],a[x][10],a[x][11],a[x][12],a[x][13],a[x][14],a[x][15],a[x][16],a[x][17],a[x][18],a[x][19]});
cout << *max_element(a[x], a[x]+20);// 從a的第i列開頭取20個元素,找出最大值
}
}
if(ans==false)
{
cout<<"-1";
}
return 0;
}