#include <bits/stdc++.h>   using namespace std;   const int maxN = 100010;   int n, m, res, l[3][maxN], r[3][maxN], g[16 * maxN], t[16 * maxN], ans[maxN],       con[maxN];   bool avail[maxN];   stack<int> s[4 * maxN];   struct ioi {     int v, p, t, k;   };   ioi c[4 * maxN];   bool cmp(ioi i, ioi j) {     if (i.v < j.v) return true;     if (i.v > j.v) return false;     if (i.t < j.t) return true;     if (i.t > j.t) return false;     if (i.t == 1)       return (i.k > j.k);     else       return (i.k < j.k);   }   void update(int k, int l, int r, int i, int x) {     if ((i < l) || (i > r)) return;     if (l == r) {       t[k] += x;       if (t[k])         g[k] = l;       else         g[k] = 0;       return;     }     int mid = (l + r) >> 1;     update(k * 2, l, mid, i, x);     update(k * 2 + 1, mid + 1, r, i, x);     t[k] = t[k * 2] + t[k * 2 + 1];     if (g[k * 2] == 0)       g[k] = g[k * 2 + 1];     else if (g[k * 2 + 1] == 0)       g[k] = g[k * 2];     else       g[k] = min(g[k * 2], g[k * 2 + 1]);   }   int get(int k, int l, int r, int i) {     if (r < i) return 0;     if (l >= i) return g[k];     if (l == r) return 0;     int mid = (l + r) >> 1;     int tmp_1 = get(k * 2, l, mid, i);     int tmp_2 = get(k * 2 + 1, mid + 1, r, i);     if (!tmp_1) return tmp_2;     if (!tmp_2) return tmp_1;     return min(tmp_1, tmp_2);   }   int main() {     scanf( %d , &n);     int x, y, z, num = 0;     for (int i = 1; i <= n; ++i) {       scanf( %d%d , &x, &y);       l[1][i] = x;       r[1][i] = y;       c[++num].v = x;       c[num].t = 1;       c[num].k = 1;       c[num].p = i;       c[++num].v = y;       c[num].t = 2;       c[num].k = 1;       c[num].p = i;     }     scanf( %d , &m);     for (int i = 1; i <= m; ++i) {       scanf( %d%d%d , &x, &y, &z);       l[2][i] = x;       r[2][i] = y;       con[i] = z;       c[++num].v = x;       c[num].t = 1;       c[num].k = 2;       c[num].p = i;       c[++num].v = y;       c[num].t = 2;       c[num].k = 2;       c[num].p = i;     }     sort(c + 1, c + num + 1, cmp);     int val = c[1].v;     c[1].v = 1;     for (int i = 2; i <= num; ++i) {       int tmp_val = c[i].v;       if (c[i].v != val)         c[i].v = c[i - 1].v + 1;       else         c[i].v = c[i - 1].v;       if (c[i].t == 1)         l[c[i].k][c[i].p] = c[i].v;       else         r[c[i].k][c[i].p] = c[i].v;       val = tmp_val;     }     for (int i = 1; i <= num; ++i) {       if (c[i].k == 1) {         if (c[i].t == 1) {           int u = get(1, 1, c[num].v, r[1][c[i].p]);           if (u == 0) {             res = -1;             break;           }           while ((!s[u].empty()) && (!avail[s[u].top()])) s[u].pop();           if (u == 0) {             res = -1;             break;           }           u = s[u].top();           ans[c[i].p] = u;           con[u]--;           if (!con[u]) update(1, 1, c[num].v, r[2][u], -1), avail[u] = 0;         }       } else if (c[i].t == 1) {         update(1, 1, c[num].v, r[2][c[i].p], 1);         s[r[2][c[i].p]].push(c[i].p);         avail[c[i].p] = 1;       } else {         update(1, 1, c[num].v, c[i].v, -1);         avail[c[i].p] = 0;       }     }     if (res == -1)       printf( NO );     else {       printf( YES n );       for (int i = 1; i <= n; ++i) printf( %d  , ans[i]);     }     fclose(stdin);     fclose(stdout);   }