# Asignar postulantes a carreras

Una universidad ficticia reparte a sus postulantes entre sus carreras. Cada postulante ordena todas las carreras, de la
que más quiere a la que menos quiere. Cada carrera tiene una cantidad de vacantes, y ordena a todos los postulantes
según sus propios criterios. No hay empates en ninguna lista.

Una **asignación** le da a cada postulante una carrera o ninguna, sin pasarse de las vacantes de ninguna carrera.

Un postulante p y una carrera c **tienen un reclamo** si p no está en c, p preferiría estar en c antes que donde está
(estar sin carrera es lo peor para cualquiera), y además se cumple una de estas dos cosas:

- c tiene una vacante libre;
- c prefiere a p antes que a alguno de los que admitió.

Una asignación es **estable** si nadie tiene un reclamo. Puede haber varias asignaciones estables. Para cada postulante,
llamemos **mejor carrera posible** a la que más quiere entre todas las que le tocan en alguna asignación estable (o ninguna, si en ninguna asignación estable le toca carrera).

Calculen la asignación en la que cada postulante recibe su mejor carrera posible. Esa asignación siempre existe, es estable
y es única.

## Entrada

La primera línea tiene A y C: la cantidad de postulantes y de carreras. Los postulantes se numeran desde 0 hasta A − 1,
y las carreras desde 0 hasta C − 1.

La segunda línea tiene C enteros: las vacantes de cada carrera.

Las A líneas siguientes tienen, cada una, las C carreras en el orden del postulante, de la que más quiere a la que
menos quiere.

Las C líneas siguientes tienen, cada una, los A postulantes en el orden de la carrera, del que más quiere al que menos
quiere.

## Salida

A líneas. La línea i tiene la carrera que le toca al postulante i, o -1 si se queda sin carrera.

## Límites

- 1 ≤ A, C
- A · C ≤ 2 000 000
- 0 ≤ vacantes de una carrera ≤ A. Una carrera puede tener 0 vacantes.
- La suma de las vacantes puede ser menor, igual o mayor que A.

La entrada del caso más grande tiene 4 millones de números. Lean con `std::cin` después de
`std::ios::sync_with_stdio(false)`, como en el esqueleto.

## Ejemplo

Entrada:

```text
5 3
2 1 1
0 1 2
0 2 1
1 0 2
0 1 2
2 1 0
3 1 0 4 2
2 3 4 1 0
4 0 1 2 3
```

Salida:

```text
-1
0
1
0
2
```

Comprueben a mano que es estable. El postulante 0 se queda sin carrera y aun así no tiene reclamo: las dos vacantes de la
carrera 0 están ocupadas por los postulantes 3 y 1, y ella prefiere a los dos antes que a él; las carreras 1 y 2 también
prefieren a quienes admitieron. Nadie más tiene reclamo: cada uno de los otros cuatro ya está en su primera opción.

## Tiempo

2 segundos por caso.

## Para pensar

Cuando el juez acepte su programa, respondan esta pregunta por escrito, y justifiquen su respuesta con una demostración
o con una ejecución.

Imaginen que el proceso se hace al revés: en vez de buscar lo mejor para cada postulante, se busca lo mejor para las
carreras, con las carreras ofreciendo sus vacantes. ¿Quién gana y quién pierde con ese cambio? ¿Puede un postulante
quedar mejor que en su respuesta? ¿Puede una carrera quedar peor? Prueben con un caso en el que los dos resultados sean
distintos.
