สังเกตว่าเมื่อคอมไพเลอร์ภาษา C คอมไพล์ไฟล์ main.c แล้วไฟล์ lib1.h จะ include ไฟล์ lib2.h ซึ่ง include ไฟล์ lib3.h ซึ่ง include ไฟล์ lib1.h และสามารถวนไปเช่นนีเ้ รื่อยๆ โดยไม่จำากัด
งานของคุณ
กำหนดไฟล์โปรแกรมภาษา C มาให้ N ไฟล์ แต่ละไฟล์จะถูกระบุด้วยตัวเลขตั้ง แต่ 1 ถึง N พร้อมทัง้ ข้อมูลว่าไฟล์ใด include ไฟล์ได้บ้าง จงเขียนโปรแกรมเพื่อตอบคำถามว่าสำหรับไฟล์ทุกๆ ไฟล์ เมื่อคอมไพเลอร์ภาษา C ทำาการคอมไพล์ไฟล์นั้น แล้วจะเกิดปัญหาใดปัญหาหนึ่ง ในสองปัญหาที่กล่าวถึงข้างบนหรือไม่
ข้อมูลนำเข้า บรรทัดแรก มีจำนวนเต็ม N (1 ≤ N ≤ 1,000) บรรทัดที่ i+1 (สำาหรับทุก ๆ 1 ≤ i ≤ N ) บอกว่าไฟล์ i ทำาการ include ไฟล์ใดบ้าง ซึ่ง บรรทัดที่ i + 1 จะระบุในรูปแบบดังนี้
k a1 a2 … ak
โดยที่ k และทุก ๆ aj ที่ 1 ≤ j ≤ k เป็นจำนวนเต็มที่ไม่เป็นลบและมีค่าไม่เกิน N บรรทัดดังกล่าวมีความหมายว่าไฟล์ i ทำาการ include ไฟล์ a1, a2, …, และ ak เรารับประกันว่าเลข ajจะมีค่าไม่ซ้ำกัน (ในไฟล์หนึง่ ๆ จะไม่มีการ include ไฟล์เดียวกันซ้ำสองครั้ง ) และในบรรทัดที่ i + 1 จะไม่มี aj ใดๆ ที่มีค่าเท่ากับ i (ไฟล์แต่ละไฟล์จะไม่ include ตัวเอง) นอกจากนี้รับประกันว่าจำนวนการ include ทั้ง หมดจะไม่เกิน 3,000 ครั้ง
ข้อมูลส่งออก มี N บรรทัด แต่ละบรรทัดมีข้อความ YES หรือ NO ถ้าเมื่อคอมไพเลอร์ภาษา C คอมไพล์ไฟล์ i แล้วเกิดปัญหาใดปัญหาหนึ่ง ในปัญหาสองข้อข้างต้น ให้พิมพ์ YES ในบรรทัดที่ i หากไม่เกิดปัญหาใดขึ้น เลยให้พิมพ์ NO
ที่มา: Young Thai Online Programming Competition 2008