#arc079d. [arc079_d]Namori Grundy

[arc079_d]Namori Grundy

题目描述

给定一个有NN个顶点和NN条边的有向图。顶点编号为1,2,...,N1, 2, ..., N

图中有以下NN条边:(p1,1),(p2,2),...,(pN,N)(p_1, 1), (p_2, 2), ..., (p_N, N),且该图是弱连通的。这里,从顶点uu到顶点vv的边表示为(u,v)(u, v),弱连通图是指如果将每条边变为双向边,则图仍然是连通的。

我们想要为该图中的每个顶点分配一个值,使得满足以下条件。这里,aia_i表示分配给顶点ii的值。

  • 每个aia_i都是非负整数。
  • 对于每条边(i,j)(i, j),满足aineqaja_i \\neq a_j
  • 对于每个ii和每个整数x(0x<ai)x(0 ≤ x < a_i),存在一个顶点jj使得边(i,j)(i, j)存在且满足x=ajx = a_j

判断是否存在这样的分配。

约束条件

  • 2N2002 ≤ N ≤ 200 000000
  • 1piN1 ≤ p_i ≤ N
  • pineqip_i \\neq i
  • 图是弱连通的。

输入格式

输入以以下格式从标准输入给出:

NN

p1p_1 p2p_2 ... pNp_N

输出格式

如果存在这样的分配,输出POSSIBLE;否则输出IMPOSSIBLE

示例输入1

4
2 3 4 1

示例输出1

POSSIBLE

可以进行如下分配:{aia_i} = {0,1,0,10, 1, 0, 1} 或 {aia_i} \= {1,0,1,01, 0, 1, 0}。

示例输入2

3
2 3 1

示例输出2

IMPOSSIBLE

示例输入3

4
2 3 1 1

示例输出3

POSSIBLE

可以进行如下分配:{aia_i} \= {2,0,1,02, 0, 1, 0}。

示例输入4

6
4 5 6 5 6 4

示例输出4

IMPOSSIBLE