G - Revenge of Traveling Salesman Problem Editorial /

Time Limit: 5 sec / Memory Limit: 256 MB

問題文

E869120は, セールスマンである。だから, すべての建物を1度ずつ通って店に戻ってこなければならない。

E869120の住む街には, 建物がN個あり, 道路がM本ある。建物の番号は1-indexedでつけられており, 店は建物1とする。

また, 道路 i は建物s_iと建物t_iを結んでいて, 距離はd_iである。

しかし, その街は不審者対策として一定の時間を過ぎると道路を閉鎖する。

道路 iは, E869120が出発してから時間 time_i 経つと道路が閉鎖される。

だから, その道路を通る際, 時間 time_i 以内に道路を通り終えなければならない。

そのとき, E869120は次のようなことを考えた。

「最短時間で戻ってくる方法の総数はどのくらいあるのだろう?」

そこで, 優秀なプログラマーであるあなたにプログラムを作ってもらうことになりました。

最短経路と, 最短時間で戻ってくる方法の総数を求めなさい。ただし, E869120は時間 1 につき距離 1 進む。また, 道路は双方向に移動可能である。


入力

入力は以下の形式で標準入力から与えられる。

N M
s_1 t_1 d_1 time_1
s_2 t_2 d_2 time_2
:: :  :
s_M t_M d_M time_M

・1行目には、整数N , M が与えられる。

・次のM行には、整数s_i , t_i , d_i , time_i

が空白区切りで与えられる。

出力

出力は以下の形式で標準出力に行うこと。

最短経路と, 最短時間で戻ってくる方法の総数を空白で区切って出力しなさい。

ただし, そのような経路が存在しない場合 "IMPOSSIBLE"と出力しなさい。

また,出力の末尾には改行を入れること。

制約

  • 1≦N≦16
  • 1≦s_i<t_i≦N ※入力例ではそうとは限りません
  • 1≦d_i≦1,000,000,000,000
  • 1≦time_i≦1,000,000,000,000
  • 任意のi,jに対し, (s_i,t_i)≠(s_j,t_j)

部分点

2≦N≦8を満たすデータセットすべてに正解した場合は、15点が与えられる。

残りのデータセットすべてに正解した場合は、85点が与えられる。


入力例1

3 3
1 2 1 6
2 3 2 6
3 1 3 6

出力例1

6 2

1->2->3->1 または 1->3->2->1 と行くと, 時間6で行くことができる。これが最短経路である。


入力例2

3 3
1 2 1 1
2 3 1 3
3 1 1 3

出力例2

3 1

道路1が時間1経つと閉鎖されるため, 1->3->2->1と行くことができない。


入力例3

3 3
1 2 1 1
2 3 1 1
3 1 1 1

出力例3

IMPOSSIBLE

1->2->3->1 , 1->3->2->1と行くことはできないため, E869120は役目を果たすことができない。


入力例4

3 2
1 2 3 20
2 3 2 20

出力例4

IMPOSSIBLE