CF524D Social Network
题目描述
Polycarpus 到某知名社交网络公司实习。他的任务是找出在某天访问网站的不同的人的数量。 Polycarpus 只获得了所有的请求的时间,因为记录请求的用户的数据被他误删了。因此,他现在无法确定两个请求是否是同一个人发出的。
但是,他知道,今天达成了一条记录:在某一时刻,有 $M$ 个人同时在线。除此之外,Polycarpus 相信如果一个用户在第 $s$ 秒发出请求,那么他一定会在线 $T$ 秒(相当是在 $s$ , $s+1$ , $s+2$ , ..., $ s+T-1$ 这段时间在线)。 所以,一个用户的在线时间段可以被表示为若干个集合 $[s,s+T-1]$ 的并集。
被这些思考所引导,Polycarpus 希望给每一条请求分配一个 ID 使得:
- 任意时刻在线的不同的人数不超过 $M$ 个。
- 在某些时刻在线的不同的人数恰好有 $M$ 个。
- 一天内访问网站的不同的人的数量越多越好。
请你帮 Polycarpus 完成这个任务。
输入格式
第一行三个整数 $n$,$M$,$T$ ($1 \le n,M \le 20000, 1 \le T \le 86400$),分别表示请求的数量, 记录中 $M$ 人同时在线和每个用户在一次请求后在线的时间。
接下来 $n$ 行,表示每一个请求,格式如下 : `hh:mm:ss` 。表示 $hh$ 点,$mm$ 分, $ss$ 秒的时候。保证请求按照时间顺序给出。保证所有的 $[s,s+T-1]$ 都是同一天内(在 `00:00:00` 到 `23:59:59` 之间的。)
输出格式
第一行输出 $R$,表示一天内访问网站的不同用户的个数的最大值。
后 $n$ 行,按照输入顺序给出发出请求的 ID。ID 需要在 $1$ 到 $R$ 之间。每一个人有且只能有一个 ID。
如果有多组解,你可以给出任何一个。
如果没有解,输出 `No solution` 。
说明/提示
Consider the first sample. The user who sent the first request was online from 17:05:53 to 17:06:02, the user who sent the second request was online from 17:05:58 to 17:06:07, the user who sent the third request, was online from 17:06:01 to 17:06:10. Thus, these IDs cannot belong to three distinct users, because in that case all these users would be online, for example, at 17:06:01. That is impossible, because $ M=2 $ . That means that some two of these queries belonged to the same user. One of the correct variants is given in the answer to the sample. For it user $ 1 $ was online from 17:05:53 to 17:06:02, user $ 2 $ — from 17:05:58 to 17:06:10 (he sent the second and third queries), user $ 3 $ — from 22:39:47 to 22:39:56.
In the second sample there is only one query. So, only one user visited the network within the 24-hour period and there couldn't be two users online on the network simultaneously. (The time the user spent online is the union of time intervals for requests, so users who didn't send requests could not be online in the network.)