Мосты для сигналов
'О нет, они снова это сделали', закричал главный дизайнер завода по производству чипов Ваферляндии. Опять разработчики маршрутов полностью все запутали, проведя сигналы на чипе между портами двух функциональных блоков так, что они повсюду пересекаются. Идет последняя стадия выпуска продукта, и уже слишком дорого распутывать маршрутизацию. Вместо этого инженерам пришлось создать для сигналов мосты, выйдя в третье измерение, чтобы никакие два сигнала не пересекались. Создание моста - сложная операция, поэтому желательно провести в виде мостов как можно меньше сигналов. Необходима компьютерная программа для нахождения наибольшего количества сигналов, которое можно соединить на кремниевой пластине без самопересечений. Помните, что функциональный блок может иметь тысячи сигнальных портов, так что для решения задачи требуется написание программы. Вы готовы к такому заданию?
Рисунок 1. Слева: порты двух блоков реализуют отображение сигналов (4,2,6,3,1,5). Справа: не более трех сигналов могут передвигаться по силиконовой поверхности, не пересекаясь между собой. Сигналы, отмеченные пунктиром, должны образовывать мосты.
Типичная ситуация изображена на рисунке 1. Порты двух функциональных блоков пронумерованы с 1 до p, сверху вниз. Отображение сигналов задается перестановкой чисел от 1 до p в виде списка из p уникальных чисел в промежутке от 1 до p, где i-ое число указывает на номер порта справа, к которому присоединен i-ый порт слева. Два сигнала пересекаются, если пересекаются отрезки, соединяющие их соответствующие порты.
Входные данные
Первая строка содержит количество тестов n. Каждый тест начинается со строки, содержащей количество портов p (p < 40000) на двух функциональных блоках. Далее следуют p строк, описывающих отображение сигналов: i-ая строка содержит номер порта в правой части блока, соединенного с i-ым портом блока в левой части.
Выходные данные
Для каждого теста вывести в отдельной строке наибольшее количество сигналов, которое может быть передано по кремниевой плоскости без пересечений.