CSES - Suunnat
  • Time limit: 1.00 s
  • Memory limit: 512 MB

Annettuna on suuntaamaton verkko, jossa on n solmua ja m kaarta.

Sinun tulee valita jokaiselle kaarelle suunta niin, että tuloksena on suunnattu verkko. Valinnan jälkeen saat jokaisen solmun x kohdalla sakkoa |\textrm{in}(x)-\textrm{out}(x)|, missä \textrm{in}(x) on solmuun tulevien kaarten määrä ja \textrm{out}(x) on solmusta lähtevien kaarten määrä.

Tehtäväsi on valita suunnat niin, että yhteissakko on mahdollisimman pieni. Miten menettelet?

Syöte

Syötteen ensimmäisellä rivillä on kaksi kokonaislukua n ja m: solmujen ja kaarten määrä. Solmut on numeroitu 1,2,\dots,n.

Tämän jälkeen syötteessä on m riviä, jotka kuvaavat kaaret. Jokaisella rivillä on kaksi kokonaislukua a ja b: solmujen a ja b välillä on kaari.

Voit olettaa, että jokainen kaari yhdistää kaksi eri solmua ja jokaisen kahden solmun välillä on enintään yksi kaari.

Tuloste

Tulosta ensin yksi kokonaisluku: pienin mahdollinen yhteissakko.

Tulosta sitten m riviä, jotka kuvaavat kaarten suunnat ratkaisussasi. Jokainen rivi tarkoittaa, että kaari alkaa vasemmasta solmusta ja päättyy oikeaan solmuun.

Voit tulostaa minkä tahansa kelvollisen ratkaisun ja kaaret missä tahansa järjestyksessä.

Rajat

  • 1 \le n \le 2 \cdot 10^5
  • 1 \le m \le 5 \cdot 10^5

Esimerkki

Syöte:

4 4
1 2
2 3
1 3
3 4

Tuloste:

2
3 4
1 3
3 2
2 1

Selitys: Ratkaisussa solmujen 1 ja 2 sakko on 0 ja solmujen 3 ja 4 sakko on 1, joten kokonaissakko on 1+1=2.