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

题目描述

\hspace{15pt}小红拿到了一个长度为 n(保证 n4 的倍数)的排列,她希望你将 \tfrac{n}{4} 个元素染成红色,另外 \tfrac{n}{4} 个元素染成蓝色,使得红色元素的乘积恰好等于蓝色元素的乘积。你能帮帮她吗?

\hspace{15pt}长度为 n排列是由 1 \sim nn 个整数、按任意顺序组成的数组,其中每个整数恰好出现一次。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\}\{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

\hspace{15pt}第一行输入一个正整数 n\left(4 \leq n \leq 10^5\right) 代表排列的长度。保证 n4 的倍数。
\hspace{15pt}第二行输入 n 个两两不同的正整数 a_1,a_2,\dots,a_n\left(1 \leq a_i \leq n\right) 代表排列的元素。

输出描述:

\hspace{15pt}如果不存在合法的染色方案,直接输出 -1
\hspace{15pt}否则,输出一个长度为 n,由字符 \texttt{`0'}\texttt{`1'}\texttt{`2'} 组成的字符串 s_1s_2\cdots s_n,代表染色方案。其中,s_i = \texttt{`0'} 代表 a_i 染成红色,s_i = \texttt{`0'} 代表 a_i 不染色,s_i = \texttt{`1'} 代表将 a_i 染成红色;s_i = \texttt{`2'} 代表将 a_i 染成蓝色。

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

输入

复制
8
8 5 2 3 1 6 4 7

输出

复制
00112200

说明

\hspace{15pt}染色方案不唯一,染成 \texttt{ 也是一个合法方案。
示例2

输入

复制
4
1 2 3 4

输出

复制
-1