func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 100 + 10;   const int maxe = maxn * 2;   int fir[maxn];   struct Edge {     int v, c, nxt;     Edge(int v = 0, int c = 0, int nxt = 0) : v(v), c(c), nxt(nxt) {}   } edge[maxe];   int cnt;   bool cir[maxn];   void init() {     memset(fir, -1, sizeof(fir));     cnt = 0;   }   void add_edge(int u, int v, int c) {     edge[cnt] = Edge(v, c, fir[u]);     fir[u] = cnt++;   }   bool dfs(int from, int to, int c) {     cir[from] = true;     if (from == to) return true;     for (int e = fir[from]; e != -1; e = edge[e].nxt)       if (!cir[edge[e].v]) {         if (edge[e].c != c) continue;         if (dfs(edge[e].v, to, c)) {           return true;         }       }     return false;   }   int solve(int from, int to) {     int ans = 0;     bool vis[maxn];     memset(vis, false, sizeof(vis));     for (int e = fir[from]; e != -1; e = edge[e].nxt)       if (!vis[edge[e].c]) {         memset(cir, false, sizeof(cir));         if (dfs(from, to, edge[e].c)) {           ans++;         }         vis[edge[e].c] = true;       }     return ans;   }   int main() {     int n, m;     scanf( %d%d , &n, &m);     init();     for (int i = 0; i < m; i++) {       int u, v, c;       scanf( %d%d%d , &u, &v, &c);       add_edge(u, v, c);       add_edge(v, u, c);     }     int q;     scanf( %d , &q);     while (q--) {       int u, v;       scanf( %d%d , &u, &v);       printf( %d n , solve(u, v));     }     return 0;   }   