#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; int a[1000][1000]; int n; struct Item { int jx,sum; bool operator < (const Item& a)const{ return sum>a.sum; } }; void solve(int x) { priority_queue<Item>q; Item item; for(int i=0;i<n;i++) { item.jx=0,item.sum=a[x][0]+a[0][i]; q.push(item); } for(int i=0;i<n;i++) { Item tem,cur; tem=q.top(); q.pop(); a[0][i]=tem.sum; cur.jx=tem.jx+1; cur.sum=tem.sum-a[x][tem.jx]+a[x][cur.jx]; q.push(cur); } } int main() { while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); for(int i=0; i<n; i++) { for(int j=0; j<n; j++) scanf("%d",&a[i][j]); sort(a[i],a[i]+n); } for(int i=1;i<n;i++) solve(i); cout<<a[0][0]; for(int i=1;i<n;i++) cout<<" "<<a[0][i]; cout<<endl; } return 0; }