using
System;
using
System.Collections.Generic;
public
class
GFG {
static
int
getmin(
long
[] dist,
bool
[] visited,
int
n)
{
long
x =
long
.MaxValue;
int
pos = 0;
for
(
int
i = 0; i < n; i++) {
if
(!visited[i] && dist[i] < x) {
x = dist[i];
pos = i;
}
}
return
pos;
}
static
int
countPaths(
int
n, List<List<
int
> > roads)
{
int
mod = (
int
)1e7;
long
MMAX = (
long
)1e17;
int
[, ] adj =
new
int
[n, n];
foreach
(List<
int
> road
in
roads)
{
int
u = road[0];
int
v = road[1];
int
t = road[2];
adj[u, v] = t;
adj[v, u] = t;
}
bool
[] visited =
new
bool
[n];
long
[] time =
new
long
[n];
Array.Fill(time, MMAX);
long
[] ways =
new
long
[n];
time[0] = 0;
ways[0] = 1;
for
(
int
i = 0; i < n - 1; i++) {
int
u = getmin(time, visited, n);
visited[u] =
true
;
for
(
int
v = 0; v < n; v++) {
if
(!visited[v] && adj[u, v] != 0
&& time[u] != MMAX) {
if
(time[u] + adj[u, v] < time[v]) {
time[v] = time[u] + adj[u, v];
ways[v] = ways[u];
}
else
if
(time[u] + adj[u, v]
== time[v]) {
ways[v] = ways[v] + ways[u];
ways[v] %= mod;
}
}
}
}
return
(
int
)ways[n - 1];
}
static
public
void
Main()
{
int
N = 7, M = 10;
List<List<
int
> > edges =
new
List<List<
int
> >();
edges.Add(
new
List<
int
>() { 0, 6, 7 });
edges.Add(
new
List<
int
>() { 0, 1, 2 });
edges.Add(
new
List<
int
>() { 1, 2, 3 });
edges.Add(
new
List<
int
>() { 1, 3, 3 });
edges.Add(
new
List<
int
>() { 6, 3, 3 });
edges.Add(
new
List<
int
>() { 3, 5, 1 });
edges.Add(
new
List<
int
>() { 6, 5, 1 });
edges.Add(
new
List<
int
>() { 2, 5, 1 });
edges.Add(
new
List<
int
>() { 0, 4, 5 });
edges.Add(
new
List<
int
>() { 4, 6, 2 });
Console.WriteLine(countPaths(N, edges));
}
}