自从小 S 频繁独自出入医院解决牙齿问题,他对医院的挂号系统也逐渐熟悉。
这里你只需要模拟一天的挂号系统。
本题中的时刻均为 小时制,用 表示。题中的姓名为长度不少于 、不超过 且仅由小写字母组成的字符串。
病人来到医院前,需要提前挂号,挂号时会预约治疗时间和医生。病人最早可以在治疗时间前 小时(含)进行签到,但若签到时间晚于治疗时间,会被记作迟到。签到成功后,该病人将被加入对应医生的治疗队列。同时,病人的预约会被删除。如果病人签到成功后再次签到,则视为签到失败。
每名医生有一个治疗队列。当一名医生叫号时,队列首的病人将前往治疗,同时该病人从队列中被移除。叫号时,屏幕上会显示病人的名字。
每名医生的队列将按如下规则排序:
- 对于未迟到的病人,按照治疗时间排序;若治疗时间相同,按照挂号时间排序。
- 对于迟到的病人,按照签到时间排序。
- 未迟到的病人总是在迟到的病人前。
在一天中,有 个事件,保证所有事件按照时间顺序发生,同一时刻不会发生多个事件。每个事件形如:
-
挂号:<Now> appointment <Name> <Doctor> <Time>
其中 <Now> 表示该事件的发生时刻,<Name> 表示病人的名字,<Doctor> 表示医生的名字,<Time> 表示治疗时间。保证挂号事件一定合法,一个病人只会预约一次。
-
签到:<Now> register <Name>
其中 <Now> 表示该事件的发生时刻,<Name> 表示病人的名字。
若该病人预约过,且此时已经在治疗时间前 小时(含)之后,认为预约成功。你需要输出 Success 并将病人加入医生的治疗队列。同时,你需要将该病人的预约信息删除。
否则,输出 Fail。此时病人的预约信息不会被删除。
如果病人签到成功后再次签到,则视为签到失败,输出 Fail。
-
叫号:<Now> query <Doctor>
其中 <Now> 表示该事件的发生时刻,<Doctor> 表示医生的名字。
若该医生的治疗队列非空,按照上述规则输出队列首病人加密后的名字。加密方式为,除了第一个字符和最后一个字符,均替换为 *。如 chenzhe 变为 c*****e。
否则输出 No patient。