Monsters and Potions

题意翻译

**题目描述:** 有 $n$ 个位置排成一排,每个位置上有一个数 $a_i$。有 $m$ 个英雄,分布在所有数为 $0$ 的位置上,每个英雄有一个生命值。每个位置至多有一个英雄,但有可能没有英雄。 你需要选定一个位置作为集合点。并依次指定每个英雄(自己决定顺序)直接走到集合点。当一个英雄走入一个位置 $i$ 时,他的生命值会加上 $a_i$,并把这个位置上的数变为 $0$。特别的,生命值不能为负数(可以为 $0$)。 你需要找到一种方法,使得所有英雄都能够到达集合点。 **输入格式:** 第一行两个数 $n$ 和 $m$。$(1\leq m\leq n\leq 100)$ 接下来 $m$ 行,每行两个数 $s_i$ 和 $h_i$,表示一个英雄的位置和生命值。 $(1\leq s_i\leq n,1\leq h_i\leq 10^6)$ 接下来一行 $n$ 个数,表示 $a_i$。 **输出格式:** 如果有解,第一行一个数,表示集合点的位置。 接下来一行 $m$ 个数,表示依次选取英雄的顺序。(输出编号) 如果无解,输出 `-1`。

题目描述

Polycarp is an introvert person. In fact he is so much of an introvert that he plays "Monsters and Potions" board game alone. The board of the game is a row of $ n $ cells. The cells are numbered from $ 1 $ to $ n $ from left to right. There are three types of cells: a cell containing a single monster, a cell containing a single potion or a blank cell (it contains neither a monster nor a potion). Polycarp has $ m $ tokens representing heroes fighting monsters, which are initially located in the blank cells $ s_1, s_2, \dots, s_m $ . Polycarp's task is to choose a single cell (rally point) and one by one move all the heroes into this cell. A rally point can be a cell of any of three types. After Policarp selects a rally point, he picks a hero and orders him to move directly to the point. Once that hero reaches the point, Polycarp picks another hero and orders him also to go to the point. And so forth, until all the heroes reach the rally point cell. While going to the point, a hero can not deviate from the direct route or take a step back. A hero just moves cell by cell in the direction of the point until he reaches it. It is possible that multiple heroes are simultaneously in the same cell. Initially the $ i $ -th hero has $ h_i $ hit points (HP). Monsters also have HP, different monsters might have different HP. And potions also have HP, different potions might have different HP. If a hero steps into a cell which is blank (i.e. doesn't contain a monster/potion), hero's HP does not change. If a hero steps into a cell containing a monster, then the hero and the monster fight. If monster's HP is strictly higher than hero's HP, then the monster wins and Polycarp loses the whole game. If hero's HP is greater or equal to monster's HP, then the hero wins and monster's HP is subtracted from hero's HP. I.e. the hero survives if his HP drops to zero, but dies (and Polycarp looses) if his HP becomes negative due to a fight. If a hero wins a fight with a monster, then the monster disappears, and the cell becomes blank. If a hero steps into a cell containing a potion, then the hero drinks the potion immediately. As a result, potion's HP is added to hero's HP, the potion disappears, and the cell becomes blank. Obviously, Polycarp wants to win the game. It means that he must choose such rally point and the order in which heroes move, that every hero reaches the rally point and survives. I.e. Polycarp loses if a hero reaches rally point but is killed by a monster at the same time. Polycarp can use any of $ n $ cells as a rally point — initially it can contain a monster, a potion, or be a blank cell with or without a hero in it. Help Polycarp write a program to choose a rally point and the order in which heroes move.

输入输出格式

输入格式


The first line of the input contains two integers $ n $ and $ m $ ( $ 1 \le n \le 100 $ ; $ 1 \le m \le n $ ) — length of the game board and the number of heroes on it. The following $ m $ lines describe heroes. Each line contains two integers $ s_i $ and $ h_i $ ( $ 1 \le s_i \le n $ ; $ 1 \le h_i \le 10^6 $ ), where $ s_i $ is the initial position and $ h_i $ is the initial HP of the $ i $ -th hero. It is guaranteed that each cell $ s_i $ is blank. It is also guaranteed that all $ s_i $ are different. The following line contains $ n $ integers $ a_1, a_2, \dots, a_n $ ( $ -10^6 \le a_j \le 10^6 $ ), where $ a_j $ describes the $ i $ -th cell of the game board: - $ a_j=0 $ means that the $ i $ -th cell is blank, - $ a_j<0 $ means that the $ i $ -th cell contains monster with positive HP of $ -a_j $ , - $ a_j>0 $ means that the $ i $ -th cell contains potion with $ a_j $ HP.

输出格式


On the first line of the output print the index of the rally point cell. On the second line print $ m $ integers — the order in which heroes should move to the rally point. Heroes are numbered from $ 1 $ to $ m $ in the order they are given in the input. If there are multiple solutions, print any of them. If it is impossible to find a rally point which can be reached by all heroes, print a single integer -1 in the output.

输入输出样例

输入样例 #1

8 3
8 2
1 3
4 9
0 3 -5 0 -5 -4 -1 0

输出样例 #1

6
3 1 2 

输入样例 #2

1 1
1 1
0

输出样例 #2

1
1 

输入样例 #3

3 2
1 1
3 1
0 -5000 0

输出样例 #3

-1

输入样例 #4

8 3
1 15
5 10
8 1
0 -5 -5 -5 0 -5 -5 0

输出样例 #4

7
2 1 3 

说明

The picture illustrates the first example: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1070G/628ecd16b9b4942dd0d519c83a77121f25bd471c.png)