36. 部落旅遊

假設總共有 N 條道路,每一條道路皆代表部落間存在道路相連接,並且設定兩部落 X 和 Z, X 代表起始點部落,Z 代表終點部落,以及給定 K 個部落作為休息點,請找出從部落 X 經過哪個休息點部落再到終點部落 Z 的路徑為最短。


【輸入說明】
第一行:輸入路徑個數N,起點部落X和終點部落Z,中間皆用一個空白隔開 (3<=N<=15, 1<=S,E<=20)
第二行:輸入K個部落作為休息點(1<=K<=5),部落之間以一個空白隔開
第三行~第N+2行: 每一行輸入兩正整數 A B,代表 A 部落與 B 部落間有道路相連接 (1<=A,B<=20)

範例輸入說明:
5 1 3 (總共有5條路徑,起點為部落1,終點為部落3)
2 4 (休息點為部落2和部落4)
2 1 (部落2和部落1有路徑相連接)
4 5 (部落4和部落5有路徑相連接)
3 4 (部落3和部落4有路徑相連接)
2 4 (部落2和部落4有路徑相連接)
4 1 (部落4和部落1有路徑相連接)

【輸出說明】
第一行:若找不到符合條件的最短路徑,則直接輸出 NO(不用輸出第二行),否則輸出X部落中途經過哪個休息點部落抵達 Z部落的路徑為最短。
第二行:若存在符合條件的最短路徑(從X部落到Z部落的途中有經過休息點部落),則輸出所經過的部落,部落之間用一個空白隔開,包含起點和終點

範例輸出說明:
4 (部落1到部落3的最短路徑中,經過休息點部落4)
1 4 3 (部落1 → 部落4 → 部落 3)

【測試資料一】
輸入:
4 2 5
4
4 6
4 8
2 4
5 6

輸出:
4
2 4 6 5

【測試資料二】
輸入:
5 1 3
2 4
2 1
4 5
3 4
2 4
4 1

輸出:
4
1 4 3

【測試資料三】
輸入:
10 2 10
3 5 7 8 
1 2
2 3
3 4
4 5
5 6
6 7
7 8
3 9
8 9
9 10

輸出:
3
2 3 9 10

【測試資料四】
輸入:
8 2 9
4 6 8
1 4
4 3
5 2
3 2
1 5
6 9
8 7
6 8

輸出:
NO

【隱藏測試資料一】
輸入:
3 1 3
7
1 5
7 5
7 3

輸出:
7
1 5 7 3

【隱藏測試資料二】
輸入:
6 1 3
5 7 4
1 5
7 5
4 5
3 5
2 3
4 3

輸出:
5
1 5 3

【隱藏測試資料三】
輸入:
7 2 14
4 6 8
2 4
4 6
4 10
6 8
8 10
10 12
12 14

輸出:
4
2 4 10 12 14

【隱藏測試資料四】
輸入:
5 3 6
4 7
3 5
7 1
1 5
4 2
6 4

輸出:
NO