10 #define MAX 60 // pre-inspect input
11 typedef struct pair pair
;
22 visit (int depth
, int sum
, int current
, unsigned long long remaining
)
25 printf ("%d, %d, %d, %llx\n", depth
, sum
, current
, remaining
);
26 for (int i
= 0; i
< 64; i
++)
27 if (remaining
& (1ULL << i
)) {
28 if (pairs
[i
].a
== current
) {
30 visit (depth
+ 1, sum
+ pairs
[i
].a
+ pairs
[i
].b
, pairs
[i
].b
,
31 remaining
& ~(1ULL << i
));
32 } else if (pairs
[i
].b
== current
) {
34 visit (depth
+ 1, sum
+ pairs
[i
].a
+ pairs
[i
].b
, pairs
[i
].a
,
35 remaining
& ~(1ULL << i
));
44 if (depth
== max_d
&& sum
> max
)
49 int main(int argc
, char **argv
)
51 while (scanf ("%d/%d\n", &pairs
[npairs
].a
, &pairs
[npairs
].b
) == 2)
54 visit (0, 0, 0, (1ULL << npairs
) - 1);
55 printf ("found %d chains, max %d\n", chains
, max
);