#include <bits/stdc++.h>

#define fto(i, x, y) for(int i = (x); i <= (y); ++i)
#define fdto(i, x, y) for(int i = (x); i >= (y); --i)
#define ftoa(i, x, y, a) for(int i = (x); i <= (y); i += a)
#define ftoit(it, var) for (__typeof(var.begin()) it = var.begin(); it != var.end(); ++it)

#define ii pair<ll, ll>
#define mp make_pair
#define FF first
#define SS second

#define vi vector<int>
#define vii vector<ii>
#define ll long long
#define vll vector<ll>

#define eb emplace_back
#define ef emplace_front
#define lb lower_bound
#define ub upper_bound

#define oo 1000000007
#define OO 1000000000000000007LL

using namespace std;

#define Pro "tmp"
#define maxN 100007

inline int readChar();
template <class T = int> inline T readInt();
template <class T> inline void writeInt( T x, char end = 0 );

inline void writeChar( int x );
inline void writeWord( const char *s );

static const int buf_size = 4096;

inline int getChar() {
	static char buf[buf_size];
	static int len = 0, pos = 0;
	if (pos == len)
		pos = 0, len = fread(buf, 1, buf_size, stdin);
	if (pos == len)
		return -1;
	return buf[pos++];
}

inline int readChar() {
	int c = getChar();
	while (c <= 32)
		c = getChar();
	return c;
}

template <class T>
inline T readInt() {
	int s = 1, c = readChar();
	T x = 0;
	if (c == '-')
		s = -1, c = getChar();
	while ('0' <= c && c <= '9')
		x = x * 10 + c - '0', c = getChar();
	return s == 1 ? x : -x;
}

static int write_pos = 0;
static char write_buf[buf_size];

inline void writeChar( int x ) {
	if (write_pos == buf_size)
		fwrite(write_buf, 1, buf_size, stdout), write_pos = 0;
	write_buf[write_pos++] = x;
}

template <class T>

inline void writeInt( T x, char end ) {
	if (x < 0)
		writeChar('-'), x = -x;

	char s[24];
	int n = 0;
	while (x || !n)
		s[n++] = '0' + x % 10, x /= 10;
	while (n--)
		writeChar(s[n]);
	if (end)
		writeChar(end);
}

inline void writeWord( const char *s ) {
	while (*s)
		writeChar(*s++);
}

struct Flusher {
	~Flusher() {
		if (write_pos)
			fwrite(write_buf, 1, write_pos, stdout), write_pos = 0;
	}
} flusher;

int u[maxN], c[maxN], d[maxN];
vi adj[maxN];

bool f[maxN][11];
int color[maxN], parent[maxN];

inline void BFS(int &u, int &d, int &c) {
    if (f[u][d]) return;
    memset(parent, 0, sizeof parent);

    queue <ii> q;
    q.emplace(u, d);

    while (!q.empty()) {
        int u = q.front().FF;
        int d = q.front().SS;

        q.pop();

        if (!color[u]) color[u] = c;
        if (!d) continue;

        fto (i, 0, (int)adj[u].size()-1) {
            int v = adj[u][i];
            if (v == parent[u] || f[v][d-1]) continue;

            f[v][d-1] = 1;
            parent[v] = u;

            q.emplace(v, d-1);
        }
    }

    return;
}

int main() {
//    #ifndef ONLINE_JUDGE
//        freopen(Pro".inp", "r", stdin);
//        freopen(Pro".out", "w", stdout);
//    #endif // ONLINE_JUDGE

    int n, m;
    n = readInt();
    m = readInt();

    fto (i, 1, m) {
        int u, v;
        u = readInt();
        v = readInt();
        adj[u].eb(v);
        adj[v].eb(u);
    }

    int q;
    q = readInt();

    fto (i, 1, q) {
        u[i] = readInt();
        d[i] = readInt();
        c[i] = readInt();
    }
    fdto (i, q, 1) BFS(u[i], d[i], c[i]);

    fto (i, 1, n) writeInt(color[i], '\n');
    return 0;
}



Measured memory_bytes: 10824