在幾何學上,一個超立方體 (hypercube) 為一個類似正方形 (2 維) 或者是正方體 (3 維) 的 n 維物體。它由許多群互相平行且等長的線段所組成,群與群之間彼此互相垂直排列著,一個 n 維的超立方體也稱為 n 次方體 (n-cube)。
在平行運算 (parallel computing) 中,頂點代表處理器,而線段 (邊) 代表連接網絡,一個 n 次方體結構有下列特性:
每個節點與其他 n 個不同的處理器相聯接。
每個處理器擁有唯一的識別碼,識別碼介於 $0$ 至 $2^n-1$。
若兩個處理器的識別碼只有一位元的差異,則此二處理器為直接相連。舉例來說,處理器 3 (二進位表示為 011) 和處理器 7 (111) 為直接相連。
處理器的數量為 $2^n$ 個。
新成立的公司 WELAIL 正設計超立方體,但他們總是與一些不知道超立方體特性的人簽約,因此他們時常製作失敗,也就是說每一次的專案中的產品不一定滿足上述的特性。給你任意一張圖,你的任務就是去寫一個程式來確定是否為超立方體。
Input
輸入包含數個測試資料。每組測資包含一張圖,先有一行包含兩個正整數 K 和 M,分別代表節點數 ($0<K\leq{1024}$) 和邊的數量 ($0\leq{M}\leq{5130}$),接下來的 M 行以兩個 32bit 整數代表邊,說明兩個處理器的相連情況。
在輸入的最後以 $K=0$ 做為結束。
Output
對於每組測資,輸出只有單獨一行。如果圖符合超立方體,則輸出「YES」;反之則輸出「NO」 (引號只是強調)。請使用標準輸出。
Sample Input
4 4
0 1
1 3
2 0
3 2
2 1
1 4
3 2
0 1
1 2
0 0
Sample Output
YES
NO
NO