小红出对
题号:NC310883
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小红定义一个「对」为两张牌面数字相同的牌。
\hspace{15pt}小红有 n 张牌,她每次能打出一个「对」,但为了不让小紫发现她作弊,在所有打出的牌中不能有两张花色与牌面数字都相同的牌。
\hspace{15pt}小红想知道,她最多可以打出多少张牌,请你帮他找出一种出牌方案。

输入描述:

\hspace{15pt}第一行输入一个整数 n \left(1 \leqq n \leqq 2\times 10^5 \right)
\hspace{15pt}之后的 n 行,每行输入一个整数与一个字母 a_i, c_i \left(1 \leqq a_i \leqq 2 \times 10^5, c_i \in \{A,B,C,D \} \right),代表第 i 张牌的牌面数字与花色。

输出描述:

\hspace{15pt}第一行输出一个整数 k,代表最多可以打出的牌数。
\hspace{15pt}之后的 \tfrac{k}{2} 行,每行输出两个整数 x_i, y_i,代表作为一个「对」打出第 x_i 张牌与第 y_i 张牌。

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
5
1 A
1 B
3 A
2 A
3 B

输出

复制
4
1 2
3 5
示例2

输入

复制
4
1 A
1 A
2 B
2 B

输出

复制
0

说明

没有任何一个「对」的花色不同,小红无法出牌。
示例3

输入

复制
4
1 A
1 B
1 A
1 C

输出

复制
2
1 2

说明

打出前两张牌后,由于第三张牌与第一张牌相同,小红无法再打出一个「对」。