import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
publicclass Main {
List < Node > finalList = new ArrayList <> () ;
int min = Integer .MAX_VALUE;
publicstaticvoid main ( String [] args ) {
Main main = new Main () ;
main. init () ;
}
privatevoid init () {
Scanner scanner = new Scanner ( System .in) ;
String [] first = scanner. nextLine () . split ( " " ) ;
int start = Integer . valueOf (first[ 0 ]) ;
int end = Integer . valueOf (first[ 1 ]) ;
List < Node > lists = new ArrayList <> () ;
while (scanner. hasNext ()) {
String [] now = scanner. nextLine () . split ( " " ) ;
Node node = new Node (Integer. valueOf ( now [ 0 ]) , Integer. valueOf ( now [ 1 ]) , Integer. valueOf ( now [ 2 ])) ;
lists. add (node) ;
}
solve (lists, start, end) ;
}
void solve ( List<Node> lists,int start,int end ) {
Collections .sort( lists , new NodeComp()) ;
List < Node > tmp = new ArrayList <> () ;
Node fir = new Node ( start , start , 0 ) ;
dfs (fir, lists , tmp, end , 0 , - 1 ) ;
// System.out.println(finalList);
if (finalList. size () != 0 ) {
StringBuffer sb = print (finalList) ;
sb. append ( "(" + min + ")" ) ;
System . out .println( sb .toString()) ;
}
}
private StringBuffer print (List< Node > list ) {
StringBuffer sb = new StringBuffer () ;
if ( list . size () == 0 ) {
sb. append ( list . get ( 0 ) .begin + "->" + list . get ( 0 ) .end) ;
} else {
sb. append ( list . get ( 0 ) .begin) ;
for ( int i = 0 ; i < list . size () ; i++ ) {
sb. append ( "->" ) ;
sb. append ( list . get (i) .end) ;
}
}
return sb;
}
privatevoid dfs ( Node cur, List<Node> lists, List<Node> tmp,int end,int curCost,int pos ) {
if ( cur .end > end || curCost > min)
return;
else if ( cur .end == end ) {
if ( curCost < min) {
min = curCost ;
finalList = new ArrayList <> ( tmp ) ;
}
} else {
for ( int i = pos + 1 ; i < lists . size () ; i++ ) {
Node node = lists . get (i) ;
if (node.begin == cur .end) {
tmp . add (node) ;
dfs (node, lists , tmp , end , curCost + node.cost, i) ;
tmp .remove( tmp .size() - 1 ) ;
} else if (node.begin > cur .end) {
break;
}
}
}
}
class NodeComp implements Comparator< Node > {
@Override
publicint compare ( Node o1, Node o2 ) {
if ( o1 .begin < o2 .begin)
return-1;
else if ( o1 .begin > o2 .begin)
return 1;
else
return 0;
}
}
class Node {
int begin;
int end;
int cost;
Node ( int begin, int end, int cost) {
this.begin = begin ;
this.end = end ;
this.cost = cost ;
}
@Override
public String toString() {
return begin + "," + end;
}
}
}