编程题
### 问题描述
你有一个初始大小为 $N$ 的数组,所有元素都是 $0$。你需要通过一系列操作将其转换为目标数组。操作规则如下:
1. 选择数组中的任意一个等于 $0$ 的元素。
2. 如果该元素的相邻元素都不是 $1$,那么该元素变成 $1$。
3. 如果至少有一个相邻元素是 $1$ 且没有相邻元素是 $2$,那么该元素变成 $2$,同时所有相邻的 $1$ 变成 $0$。
4. 如果一个相邻元素是 $1$ 另一个是 $2$,那么该元素变成 $3$,同时相邻的元素都变成 $0$。
给定一个目标数组,找出最少的操作次数,使得初始数组变为目标数组。
### 输入格式
第一行包含一个整数 $N$。
第二行包含 $N$ 个整数,表示目标数组的元素。
### 输出格式
如果没有解决方案输出 `-1`。
否则,第一行输出一个整数 $K$,代表选择操作的最小次数。
第二行输出 $K$ 个整数,代表被选择元素的索引。
### 样例输入
```
3
2 1 2
```
### 样例输出
```
5
2 1 2 3 2
```
### 评测数据规模
- $1 \leq N \leq 10^5$
- 目标数组中的元素为 $0$ 到 $3$ 之间的整数。