package main import . "fmt" import . "os" import bf "bufio" import . "sort" type T struct { id, value int } func main() { rd := bf.NewReader(Stdin) wr := bf.NewWriter(Stdout) defer wr.Flush() var n,m int Fscan(rd,&n,&m) a := make([]int, n) for i := range a { Fscan(rd, &a[i]) } graph := make([][]int, n) for i := 0; i < m; i++ { var u,v int Fscan(rd,&u,&v) u-- v-- if a[u] < a[v] { graph[u] = append(graph[u], v) } if a[u] > a[v] { graph[v] = append(graph[v], u) } } light := make([]bool, n) var k int Fscan(rd, &k) for i := 0; i < k; i++ { var b int Fscan(rd,&b) light[b-1] = true } ts := make([]*T, n) for i := range ts { ts[i] = &T{ id: i, value: a[i], } } Slice(ts, func(i, j int) bool { return ts[i].value < ts[j].value }) ans := []int{} for _, t := range ts { if !light[t.id] { continue } ans = append(ans, t.id) for _, e := range graph[t.id] { light[e] = !light[e] } } Println(len(ans)) for _, id := range ans { Println(id+1) } } /* 考察 因果的に A[i]の小さい順に消灯していくだけだと思われる グラフはA[u]