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

Задача . D. Цветные ботинки


Заданы \(n\) левых и \(n\) правых ботинок. Каждый ботинок имеет цвет, который задан строчной буквой латинского алфавита или знаком вопроса ('?'). Таким образом, вам заданы две строки \(l\) и \(r\), каждая имеет длину \(n\), где буква \(l_i\) обозначает цвет \(i\)-го левого ботинка, а буква \(r_i\) обозначает цвет \(i\)-го правого ботинка.

Строчная буква латинского алфавита обозначает конкретный цвет ботинка, а знак вопроса — неопределенный цвет. Два конкретных цвета совместимы, если они в точности совпадают. Неопределенный цвет совместим с любым цветом (не важно — конкретным или неопределенным).

Например, следующие пары цветов совместимы: ('f', 'f'), ('?', 'z'), ('a', '?') и ('?', '?'). Следующие пары цветов не совместимы: ('f', 'g') и ('a', 'z').

Вычислите максимальное количество пар ботинок, которые можно собрать из заданного набора так, что каждая пара состоит из одного левого и одного правого ботинка и цвета ботинок в паре совместимы.

Выведите максимальное количество пар и сами пары. Конечно, каждый ботинок может входить в состав не более одной пары.

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

В первой строке записано целое число \(n\) (\(1 \le n \le 150000\)) — количество ботинок на каждую ногу (то есть количество левых и правых ботинок).

Вторая строка содержит \(l\), её длина равна \(n\). Она содержит лишь строчные буквы латинского алфавита или знаки вопроса, \(i\)-й символ строки соответствует цвету \(i\)-го левого ботинка.

Третья строка содержит \(r\), её длина равна \(n\). Она содержит лишь строчные буквы латинского алфавита или знаки вопроса, \(i\)-й символ строки соответствует цвету \(i\)-го правого ботинка.

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

Выведите \(k\) — максимальное количество пар ботинок вида «левый и правый ботинок» совместимых цветов, которые можно собрать из заданного набора.

Следующие \(k\) строк должны содержать пары целых чисел \(a_j, b_j\) (\(1 \le a_j, b_j \le n\)), где \(j\)-я из этих строк содержит индекс левого ботинка в \(j\)-й паре (число \(a_j\)) и индекс правого ботинка в \(j\)-й паре (число \(b_j\)). Все значения \(a_j\) должны быть различны, все значения \(b_j\) должны быть различны.

Если существует несколько ответов, выведите любой из них.


Примеры
Входные данныеВыходные данные
1 10
codeforces
dodivthree
5
7 8
4 9
2 2
9 10
3 1
2 7
abaca?b
zabbbcc
5
6 5
2 3
4 6
7 4
1 2
3 9
bambarbia
hellocode
0
4 10
code??????
??????test
10
6 2
1 6
7 3
3 5
4 8
9 7
5 1
2 4
10 9
8 10

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

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