#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 9;
const int MX = 100005;
vector<int> t;
void gen() {
  for (int c = (1), _ = (9); c <= _; ++c) {
    for (int s = 0, _ = (1 << c); s < _; ++s) {
      int x = 0;
      for (int i = 0, _ = (c); i < _; ++i) {
        x *= 10;
        if (((1 << i) & s) == 0) {
          x += 4;
        } else {
          x += 7;
        }
      }
      t.push_back(x);
    }
  }
  sort(t.begin(), t.end());
}
bool jest(int x) { return binary_search(t.begin(), t.end(), x); }
vector<int> adj[MX];
pair<int, int> nad[MX], pod[MX];
bool vis[MX];
pair<int, int> dfspod(int x) {
  vis[x] = true;
  pair<int, int> wynik(0, 0);
  for (typeof(adj[x].begin()) yt = adj[x].begin(); yt != adj[x].end(); ++yt) {
    int y = abs(*yt);
    bool ok = *yt > 0;
    if (!vis[y]) {
      pair<int, int> w = dfspod(y);
      wynik.first += w.first + 1;
      if (ok) {
        wynik.second += w.first + 1;
      } else {
        wynik.second += w.second;
      }
    }
  }
  pod[x] = wynik;
  return wynik;
}
void dfsnad(int x, int all, int pas) {
  vis[x] = true;
  nad[x] = pair<int, int>(all, pas);
  for (typeof(adj[x].begin()) yt = adj[x].begin(); yt != adj[x].end(); ++yt) {
    int y = abs(*yt);
    bool ok = *yt > 0;
    if (!vis[y]) {
      if (ok) {
        dfsnad(y, all + pod[x].first - pod[y].first,
               all + pod[x].first - pod[y].first);
      } else {
        dfsnad(y, all + pod[x].first - pod[y].first,
               pas + pod[x].second - pod[y].second);
      }
    }
  }
}
long long zlicz(int x) {
  long long a = pod[x].second + nad[x].second;
  return a * (a - 1);
}
void inline jeden() {
  gen();
  int n;
  cin >> n;
  for (int i = (1), _ = (n); i <= _; ++i) {
    nad[i] = pod[i] = pair<int, int>(0, 0);
  }
  for (int i = 0, _ = (n - 1); i < _; ++i) {
    int a, b, w;
    cin >> a >> b >> w;
    if (jest(w)) {
      adj[a].push_back(b);
      adj[b].push_back(a);
    } else {
      adj[a].push_back(-b);
      adj[b].push_back(-a);
    }
  }
  for (int i = (1), _ = (n); i <= _; ++i) {
    vis[i] = false;
  }
  dfspod(1);
  for (int i = (1), _ = (n); i <= _; ++i) {
    vis[i] = false;
  }
  dfsnad(1, 0, 0);
  long long wynik = 0;
  for (int i = (1), _ = (n); i <= _; ++i) {
    wynik += zlicz(i);
  }
  cout << wynik << "\n";
}
int main() { jeden(); }
