CF765D Artsem and Saunders

题目描述

令 $ [n] $ 表示整数集 $ \{1,...,n\} $ ,令 $f:[x]\rightarrow[y]$ 表示函数 $f$ 的定义域为整数 $\{1,...,x\}$ 并且它的所有函数值在 $\{1,...,y\}$ 中。 现在,给定一个函数 $f:[x]\to[y]$ ,你的任务是找出一个正整数 $m$ ,和两个函数 $g:[n]\to[m]$、$h:[m]\to[n]$ ,满足对于任意 $x\in[m]$ ,有 $g(h(x))=x$ ;对于任意 $x\in[n]$ ,有 $h(g(x))=f(x)$ 。或者判定无解。

输入格式

第一行一个正整数 $n$ ,第二行 $n$ 个正整数,第 $i$ 个数表示 $f(i)$ 的值。

输出格式

如果无解,输出 $-1$ 。 否则,第一行输出 $m$ ,第二行输出 $n$ 个整数,第 $i$ 个数为 $g(i)$ ,第三行输出 $m$ 个整数,第 $i$ 个数为 $h(i)$ 。 如果有多组可行解,只需输出一组即可。

说明/提示

$1 \le n \le 10^5$,$1 \le m \le 10^6$,$1 \le f(i) \le n$。