|
|
Имя входного файла |
стандартный ввод |
Имя выходного файла |
стандартный вывод |
Ограничение по времени |
2 секунды |
Ограничение по памяти |
256 мегабайт |
К Коле на день рождения придут n друзей.
По этому случаю он заготовил n бутылок различных напитков, а каждый из друзей принесет свой стакан.
Коля знает размеры стаканов каждого друга, однако, может случится так, что содержимое конкретной бутылки может не поместиться полностью в конкретный стакан, если объем бутылки больше объема стакана. При этом Коля не хочет, чтобы после угощения что-то осталось, поэтому будет разливать напитки только так, чтобы они полностью поместились в стаканы. Напиток полностью помещается в стакан, если объем, содержащей его бутылки, не превосходит объем стакана.
Коля хочет своеобразно оценить сколько способов есть разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы. Так как число способов может быть довольно большим, Коля хочет знать его по модулю 1000000007. Помогите Коле посчитать это число.
Обратите внимание на ограничения, если написать неэффективное решение, например перебор, вы получите превышение ограничения по времени!
Формат входных данных
В первое строке дано число t - число тестовых наборов (1≤t≤100).
Каждый тестовый набор задается тремя строками.
В первой из них дано число ni - число стаканов и бутылок напитков в i-м наборе (1≤ni≤105).
Во второй строке заданы ni чисел ai,j - объемы стаканов в i-м наборе.
В третьей строке даны ni чисел bi,j - объемы бутылок в i-м наборе (1≤ai,j,bi,j≤100).
Гарантируется, что сумма ni по всем тестовым наборам не превосходит 3⋅105.
Формат выходных данных
Для каждого тестового набора выведите одно число - число способов разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы, взятое по модулю 1000000007.
Пример
Стандартный ввод |
Стандартный вывод |
3
3
1 1 1
1 2 1
5
1 2 3 4 5
1 2 3 4 5
3
2 2 2
2 1 2
|
0 1 6 |
Замечание
В первом тестовом наборе второй напиток не помещается ни в один стакан, поэтому ответ будет ноль. Во втором тестовом наборе, существует лишь один способ разлить напитки. В третьем наборе любой напиток можно налить в любой стакан.
Комментарий
Обратите внимание, что ввод и вывод осуществляется через стандартный ввод и стандартный вывод. В случае отрицательного ответа системы проверки заданий по программированию советуем ознакомиться с "Рекомендациями по решению задач по программированию"
Рекомендации к пояснению решения задачи.
В пояснении к решению задачи раскройте следующие вопросы:
- Кратко опишите алгоритм решения задачи.
- По коду поясните назначение отдельных программных структур (функций, процедур, классов, фрагментов кода, выполняющих определенные операции по считыванию, обработке и записи данных) и структур данных, раскройте их роль в реализованном алгоритме.
- По желанию, можно привести оценку сложности предложенного алгоритма.
Рекомендуемое время пояснения решения 2-4 минуты.