CF472F Design Tutorial: Change the Goal

题目描述

有一些题目具有如下结构:你会得到一个模型,并且可以进行一些操作,你应该通过这些操作来实现目标。创建新题目的一个方法是,使用相同的模型和相同的操作,但改变目标。 让我们来试试。我曾经为 Topcoder SRM 557 Div1-Hard 创建了如下任务:你会得到 $n$ 个整数 $x_{1},x_{2},...,x_{n}$。你可以进行如下形式的赋值操作(次数不限):$x_{i}$ ^= $x_{j}$(在原题中要求 $i$ 与 $j$ 必须不同,但在本题中允许 $i$ 等于 $j$)。目标是使所有 $x_{i}$ 的和最大。 现在我们将目标改变一下。你还会得到 $n$ 个整数 $y_{1},y_{2},...,y_{n}$。你需要将 $x_{1},x_{2},...,x_{n}$ 完全变成 $y_{1},y_{2},...,y_{n}$,也就是说,对于每个 $i$,都要有 $x_{i}=y_{i}$。

输入格式

第一行输入一个正整数 $n\ (1 ≤ n ≤ 10000)$。第二行包含 $n$ 个整数,表示 $x_1$ 至 $x_n\ (0 ≤ x_i ≤ 10^9)$。第三行也包含 $n$ 个整数,表示 $y_1$ 至 $y_n (0 ≤ y_i ≤ 10^9)$。

输出格式

如果无解,请输出 `-1`。 如果有解法,请先输出一行一个整数 $m\ (0 ≤ m ≤ 1000000)$,表示你执行的操作数量。接下来输出 $m$ 行,每行两个正整数 $i, j (1 ≤ i, j ≤ n)$,表示你要执行 $x_i$ ^= $x_j$. 如果有多组可行的构造,你可以输出任何一个。可以证明在题目限制下如果有解就必然有小于等于 $10^6$ 次操作的解。

说明/提示

赋值 $a$ ^= $b$ 代表将 $a$ 赋值为 $a$ ^ $b$,其中操作 “^” 表示两个整数的按位异或运算。