小红的01串取反
题号:NC275293
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

小红拿到了两个长度相等的01串。她每次操作可以选择第一个字符串的相邻两个字符进行取反。小红想知道需要能否使得两个字符串相同?
请给出一个操作方案。

输入描述:

第一行输入一个正整数n,代表字符串的长度。
第二行输入一个长度为n的、仅由'0'和'1'组成的字符串。
第三行输入一个长度为n的、仅由'0'和'1'组成的字符串。
1\leq n \leq 50000

输出描述:

如果无解,请输出-1。
否则第一行输出一个整数k,代表操作次数。
接下来的k行,每行输出两个正整数l,l+1,代表将第l和字符和第l+1个字符同时取反(1\leq l < n)
请务必保证0\leq k \leq n。可以证明,若有解,则必然存在一种操作方案可以达成要求。你不需要最小化k的值。
示例1

输入

复制
3
010
111

输出

复制
2
1 2
2 3
示例2

输入

复制
1
0
1

输出

复制
-1