도로 위의 표지판

아직 제출이 없습니다시간 제한2초메모리 제한1024 MB

문제

외판원이 된 우현이는 11번부터 NN번까지 번호가 매겨진 마을을 전부 방문하기 위해, 현재 11번 마을에 도착했다. 이곳에는 서로 다른 두 마을을 잇는 MM개의 도로가 있으며, 두 마을 사이에는 최대 한 개의 도로가 존재한다. 이 도로들에는 몇 가지 특이한 점이 있었는데, 하나는 도로마다 중간에 11 이상 99 이하의 숫자가 하나 적힌 표지판이 있었다는 것이고, 하나는 도로마다 통행료를 지불해야 하는데 도로를 처음 지날 때 한 번만 돈을 지불하면 된다는 것이었다. 즉, 같은 도로를 두 번 이상 지날 때는 처음 한 번만 돈을 지불해도 되는 것이다.

숫자가 적힌 표지판이 흥미로웠던 우현이는 도로를 지날 때마다 그 숫자를 핸드폰에 적어 두려고 한다. 핸드폰에 숫자를 적을 때는 커서를 원하는 곳에 두고 적을 수 있다. 즉, 현재 “321”을 써 두었고 표지판에 ‘4’가 써 있는 도로를 지났다면 “3421”, “3214” 등의 수를 만들 수 있다. 그러나 이미 지난 적이 있는 도로의 표지판 숫자는 다시 적지 않기로 했다.

그리고 돈이 많은 우현이는 통행료를 내지 못하는 경우는 없었지만, 당연히 불필요하게 돈을 더 지불하고 싶지는 않았다. 하지만 우현이는 핸드폰에 적을 수 있는 수의 최솟값이 얼마인지 궁금해졌고, 돈을 조금 더 지불하더라도 최대한 작은 수를 적고 싶었다. 우현이가 NN개의 마을을 전부 방문하는 동안 핸드폰에 적을 수 있는 수의 최솟값을 구하고, 그 수를 만들기 위해서 들어가는 비용의 최솟값을 구하는 프로그램을 작성하자.

입력

첫째 줄에 마을의 수 NN과 도로의 수 MM이 공백으로 구분되어 주어진다. (1N200,000;(1 \le N \le 200\\,000; 1M500,000)1 \le M \le 500\\,000)

다음 MM개의 줄에는 도로의 정보 x,y,z,wx\\, y\\, z\\, w가 공백으로 구분되어 주어진다. 이는 xx번 마을과 yy번 마을이 도로로 연결되어 있고, 그 도로에는 zz가 적힌 표지판이 있으며 통행료가 ww원임을 의미한다. (1x,yN;(1 \le x, y \le N; xy;x \ne y; 1z9;1 \le z \le 9; 0w106)0 \le w \le 10^6)

출력

만약 마을 NN개를 전부 방문하는 것이 불가능하다면 첫째 줄에 -1을 출력한다.

만약 마을 NN개를 전부 방문하는 것이 가능하다면, 첫째 줄에 마을 NN개를 전부 방문할 때 핸드폰에 적을 수 있는 수의 최솟값과, 그때 지불해야 하는 비용의 최솟값을 공백으로 구분하여 출력한다.