#include <bits/stdc++.h>
using namespace std;
const double pi = 3.14159265358979;
long long n, ans = 0;
int anc[100001];
int sz[100001];
void init(int v) {
  anc[v] = v;
  sz[v] = 1;
}
int find(int v) {
  if (v == anc[v])
    return v;
  else
    return anc[v] = find(anc[v]);
}
void Union(int v, int u) {
  v = find(v);
  u = find(u);
  if (v != u) {
    if (sz[v] < sz[u]) swap(v, u);
    sz[v] += sz[u];
    anc[u] = v;
  }
}
void add(int v) {
  v = find(v);
  ans += 1ll * (n - sz[v]) * (n - sz[v] - 1);
}
bool good(int a) {
  do {
    if (a % 10 != 4 && a % 10 != 7) return false;
    a /= 10;
  } while (a);
  return true;
}
int main() {
  scanf("%I64d", &n);
  for (int i = 1; i < n + 1; ++i) {
    init(i);
  }
  for (int i = 0; i < n - 1; ++i) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    if (!good(c)) Union(a, b);
  }
  for (int i = 1; i < n + 1; ++i) {
    add(i);
  }
  printf("%I64d", ans);
  return 0;
}
