图森未来的员工阿伟最新研发了一款快递机器人,他投放了一台机器人在自己的小区中进行试运营。
这个小区中共有n幢楼,每幢都有一个编号;同时每幢楼都有k层,每层有一个层号。房间号则是层号加上包含前导0的两位数字拼接而成,例如:第3层的2号房间,房间号为302;第15层的58号房间,房间号为1558;第123层的4号房间,房间号为12304。
同时,因为业主的要求,小区每幢楼的层号都会跳过包含"4"和"13"的数字,因为它们不吉利。例如,4、13、49、133和134都是不吉利的数字,而123则不是不吉利的数字,因为里面没有包含连续的"13"。被跳过的数字不会有对应的层数,例如第3层的上一层是第5层,而第12层的上一层是第15层。
机器人每天会为m个住户寄送快递,住户的房间由楼号b和一个房间号r表示。快递机器人只能通过一些特定的路线在某些楼的1层之间移动,或者通过电梯在同一幢楼的不同楼层之间移动。m个住户的送货顺序是确定的并会提前给出,快递机器人只会按照顺序依次为这m个住户送货。
为了了解快递机器人的工作效率,阿伟希望知道快递机器人每天送货的预计时间。为了简化问题,他认为只有在同一幢楼的不同楼层之间移动以及不同楼的1层之间移动才会花时间。等待电梯、在同一楼层之间送货以及出发前装货的时间都可以忽略,且快递机器人的容量足以装下所有快递,而机器人和电梯的移动速度也不会因为快递的数量发生改变。
简而言之,我们只需要计算如下两种时间花费:
- 从某幢楼的1层移动到另一幢楼的1层:某些楼之间是可以直接移动的,阿伟会提前给出这些楼之间移动的时间花费。注意因为一些交通规则的原因,从a到b花费的时间和从b到a花费的时间不一定是一样的,也可能出现a可以移动到b但是b不能移动到a的情况。另外,从a移动到c花费的时间也不一定等于从a移动到b再从b移动到c的时间。
- 从某幢楼的x层移动到同一幢楼的y层:假设x层和y层之间相隔k层,那么这次移动的时间花费就是k。但是注意因为有一些层号是不存在的,所以k不一定等于|y-x|(||代表绝对值)。例如,3层和5层之间因为不存在4层所以只相隔1层,从3层移动到5层的时间花费是1而不是2。同理,因为39层和50层之间都是包含4的楼层,所以从50层移动到39层的时间花费也是1。
请注意,按照以上规则,如果当前在a楼的x层,要移动到b楼的y层,且a!=b,x!=1,y!=1,那么要经历三个步骤:
- 从a楼x层移动到a楼1层;
- 从a楼1层移动到b楼1层(有可能会经过其它楼的1层);
- 从b楼1层移动到b楼y层。
现在阿伟会按照顺序给出某天需要送货的所有住户的楼号和房间号,以及全部可以移动的楼号和在它们之间移动分别所花费的时间。机器人每天会从1号楼的1层出发,并在所有货物送完之后回到1号楼的1层结束。阿伟希望你可以写一个程序帮他计算一下这一天送货(包括回到1号楼的1层)最少所需要花费的总时间。如果无法依次到达需要送货的所有住户,输出-1。