ECNU Coder 新生程序设计挑战赛

K. 附加题

单点时限: 2.0 sec

内存限制: 512 MB

ECNU 最近包下了一个拥有地上20层且仅有一个电梯的大楼举办峰会,每一个会场的同学们都在11:30准时下课。每到这个时候,同学们会使用同层瞬移不花费任何时间地到达他们所在楼层的电梯前,并排成一个队列在电梯跟前等待。

在任何一个时刻,只要这一层的队列当中存在想要往上的同学,这一层的向上按钮就会被按下,往下的按钮也是如此。

在11:30时,这个整栋楼唯一的电梯停留在零层(所有的同学都在1~20层),并准备好一次向上的运行进程。电梯向上的运行过程严格满足如下的规则:

1. 电梯会继续向上运行当且仅当以下条件满足至少一个
  • 电梯内部有人的目的地在比当前楼层更高的楼层
  • 电梯外部有人在更高的楼层按了按钮
2. 电梯在向上运行的过程中会在某层停留,当且仅当以下条件满足至少一个
  • 内部有人在该层到达
  • 电梯内部没有人,而该层为电梯外部有人按了按钮的楼层当中最高的一层(就当前而言)
  • 该层电梯外部有人按了向上的按钮

如果电梯不满足向上运行的条件,那么它就会不花费时间地转换到向下运行的过程。(注意,电梯在同一层可能会开启两次。一次是以向上的状态,一次以向下的状态,可参见样例2)。类似地我们有以下的规则:

1. 电梯会继续向下运行当且仅当以下条件满足至少一个
  • 电梯内部有人的目的地在比当前楼层更低的楼层
  • 电梯外部有人在更低的楼层按了按钮
2. 电梯在向下运行的过程中会在某层停留,当且仅当以下条件满足至少一个
  • 内部有人在该层到达
  • 电梯内部没有人,而该层为电梯外部有人按了按钮的楼层当中最低的一层(就当前而言)
  • 该层电梯外部有人按了向下的按钮

当电梯在某层开启了以后,会依次发生如下事件:

  1. 目的地在该层的所有电梯内部的人会依次出电梯。
  2. 在该层电梯外排队的、目的方向与电梯当前运行方向相匹配的人(即在电梯往上运行时,只有想要往上的人才会进入电梯,反之亦然)会按照在队中的顺序一个个进入电梯。
  3. 电梯有一个重量限制,当无法再上下一个人时电梯门关闭。(注意,必须按照在队中的顺序来,不能从队列后拎一个较轻的人进入电梯)。

你需要计算在最后一个人到达目标楼层时的时间,时间的计算方式如下:

  • 电梯每上升/下降一个楼层,需要花费5秒钟
  • 电梯每在一层停留,需要花费5秒钟时间开门,5秒钟时间关门
  • 每有一个人出电梯,需要花费2秒钟
  • 每有一个人进电梯,需要花费2秒钟

输出格式请参考样例。

输入格式

第一行两个数,$n$表示人数,$W$表示电梯重量限制,任意时刻在电梯内的人重量之和不能超过$W$。

接下来$n$行,每行三个数$from_i, to_i, weight_i$,分别代表这个人的所在楼层,目标楼层和重量。在某一楼层当中,同学们在队列里的顺序与输入当中给出的顺序相同。但是楼层可能是打散的。也就是说,在输入的$n$行当中,如果你把某一楼层之外的人所在的行移去所形成的队列,就是他们在该楼层电梯外等待的队列。

输出格式

一行一个字符串表示时间,格式为hh:mm:ss。如开始的时刻,就可以表示为11:30:00

样例

Input
4 5
1 2 5
1 3 5
2 3 5
3 2 5
Output
11:32:11
Input
3 23
11 20 16
17 11 15
10 20 15
Output
11:34:32
Input
3 1000
1 2 5
1 3 5
2 3 5
Output
11:30:57

提示

样例 3 解释

电梯0->1,时间花费5

在1层停留时间内,电梯门会开,第1、2个人进入,时间花费10+2+2 = 14

电梯1->2,时间花费5

在2层第一个人下,第三个人上,时间花费:10+2+2=14

电梯2->3,时间花费5

在第三层两个人都下,时间花费:10+2+2=14

总花费:5+14+5+14+5+14 = 57

数据范围

保证$from_i \neq to_i$,$1\le from_i, to_i \le 20$,$n \le 1000$,$1 \le weight_i \le W \le 10000$。