Олимпиадный тренинг

Задача . F. Кража бриллиантов


Монокарп — самый известный вор в Берляндии. В этот раз он решил украсть два бриллианта. К несчастью для Монокарпа, за бриллиантами следят \(n\) камер. У каждой из камер есть два параметра \(t_i\) и \(s_i\). Первый параметр определяет, следит ли камера только за первым бриллиантом (\(t_i=1\)), только за вторым (\(t_i=2\)), или за обоими (\(t_i=3\)). Второй параметр определяет количество секунд, которое камера будет отключена после ее взлома.

Монокарп каждую секунду может выполнять одно из трех действий:

  • ничего не делать;
  • выбрать любую камеру и взломать ее; если взломать \(i\)-ю камеру, она будет отключена в следующие \(s_i\) секунд (если номер текущей секунды — \(T\), то камера будет отключена в секунды с \((T+1)\) по \((T+s_i)\), включительно);
  • украсть бриллиант, если все камеры, которые следили за ним, отключены в эту секунду. Второй бриллиант можно красть только после того, как украден первый.

Обратите внимание, что Монокарп может взламывать камеру повторно, даже если она отключена.

Ваша задача — определить минимальное время, за которое Монокарп украдет сначала первый бриллиант, а затем второй, или сообщить, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(n\) (\(0 \le n \le 1500\)) — количество камер.

Далее следует \(n\) строк, \(i\)-я из них содержит два целых числа \(t_i\) и \(s_i\) (\(1 \le t_i \le 3\); \(1 \le s_i \le 2n\)) — параметры \(i\)-й камеры.

Выходные данные

Выведите одно целое число — минимальное время, за которое Монокарп украдет сначала первый бриллиант, а затем второй. Если это невозможно, выведите -1.


Примеры
Входные данныеВыходные данные
1 4
2 6
1 2
1 2
2 1
6
2 4
2 8
3 2
3 2
3 5
9
3 2
3 2
2 3
4
4 1
3 1
4
5 8
2 1
2 2
3 5
3 6
1 2
1 3
1 4
1 5
11

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя