跳转至

时间管理与多人运动

预估时间限制:4.5 秒。内存限制:512 MB。

实际时限以标准程序在目标环境的最慢用例中位时间乘以 \(2\) ,按 \(0.5\) 秒向上取整。参考环境见评测说明。

背景故事

——众所周知,CCPC/ICPC 是一系列多人运动比赛。

退役后,你来到一所文理学院,担任一支 ACM 队的队长。你需要安排训练时段,让队伍参加一系列比赛。凭借神乎其神的预测能力,你已经知道在每个时段参加每场比赛能有多大收获。不过,每个时段必须恰好参加一场比赛,每场比赛也必须恰好参加一次,因此时段数与比赛数相同。

不同比赛的收获不能简单相加,因此你把收获划分为 0 到 70 共 71 个等级。你希望先让最高等级的收获尽可能多,再依次考虑较低等级。请给出最优安排下各等级收获的次数。

形式化问题描述

有 \(n\) 个时段和 \(n\) 项比赛。每个时段必须安排恰好一项比赛,每项比赛必须恰好安排一次。在时段 \(i\) 安排比赛 \(j\) ,获得的收益等级为 \(a_{ij}\) ,是零到七十之间的整数。

令 \(c_g\) 为等级 \(g\) 的收益出现次数。选择一种安排,使序列

\[ (c_{70},c_{69},\ldots,c_0) \]

字典序最大,并输出这个序列。即先最大化七十级次数,在此基础上最大化六十九级次数,依此类推。若 \(n=0\) ,所有次数均为零。

输入格式

第一行一个整数 \(n\) .接下来 \(n\) 行,每行 \(n\) 个整数;第 \(i\) 行第 \(j\) 个整数是 \(a_{ij}\) .

输出格式

输出一行七十一个整数,依次为最优的 \(c_{70},c_{69},\ldots,c_0\) ,相邻整数用一个空格分隔。

样例

样例 1

输入

5
5 5 5 5 5
5 3 2 1 1
2 2 2 2 2
2 5 2 5 2
4 4 1 1 1

输出

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 1 0 0

样例 2

输入

0

输出

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

样例 3

输入

3
70 69 0
70 0 69
0 70 68

输出

2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

样例解释

样例一可获得三次五级、一次四级、一次二级收益。样例二没有比赛,仍输出七十一个零。样例三可获得两次七十级和一次六十九级收益。

数据范围与保证

\(0\le n\le500\) ,\(0\le a_{ij}\le70\) .

分值比例 额外条件
100% 无额外条件