#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 233, mxnode = maxn << 1, modd = 1e9 + 7;
struct zsa {
  int v, p;
} a[maxn];
int bel[maxn], belp[maxn], A[maxn], A0[maxn], B0[maxn], tma[maxn], tmb[maxn];
int rt[maxn], len[maxn];
int lc[mxnode], rc[mxnode], sz[mxnode], tot;
int sma[mxnode], smb[mxnode], sm[mxnode], adda[mxnode], addb[mxnode];
int L, R, ADDA, ADDB, P, FH, ANS, PP;
int t[maxn], zt[maxn];
int i, j, k, n, m;
int ra;
char rx;
inline int read() {
  rx = getchar(), ra = 0;
  while (rx < '0') rx = getchar();
  while (rx >= '0') ra = ra * 10 + rx - 48, rx = getchar();
  return ra;
}
inline void M(int &x) { x -= (x >= modd) * modd; }
inline void dealadd(int x, int a, int b) {
  M(adda[x] += a), M(addb[x] += b), M(sma[x] += 1ll * sz[x] * a % modd),
      M(sm[x] += (1ll * sma[x] * b + 1ll * smb[x] * a) % modd),
      M(smb[x] += 1ll * sz[x] * b % modd);
}
inline void upd(int x) {
  int l = lc[x], r = rc[x];
  M(sm[x] = sm[l] + sm[r]), M(sma[x] = sma[l] + sma[r]),
      M(smb[x] = smb[l] + smb[r]);
}
void build(int a, int b) {
  int x = ++tot;
  sz[x] = b - a + 1;
  if (a == b) {
    sma[x] = tma[a], smb[x] = tmb[b], sm[x] = 1ll * sma[x] * smb[x] % modd;
    return;
  }
  int mid = (a + b) >> 1;
  lc[x] = tot + 1, build(a, mid), rc[x] = tot + 1, build(mid + 1, b), upd(x);
}
void insert(int x, int a, int b) {
  if (L <= a && R >= b) {
    dealadd(x, ADDA, ADDB);
    return;
  }
  if (adda[x] || addb[x])
    dealadd(lc[x], adda[x], addb[x]), dealadd(rc[x], adda[x], addb[x]),
        adda[x] = addb[x] = 0;
  int mid = (a + b) >> 1;
  if (L <= mid) insert(lc[x], a, mid);
  if (R > mid) insert(rc[x], mid + 1, b);
  upd(x);
}
void specrun(int x, int a, int b) {
  sz[x] += FH;
  if (a == b) {
    if (FH == 1)
      M(sma[x] = tma[PP] + adda[x]), M(smb[x] = tmb[PP] + addb[x]),
          sm[x] = 1ll * sma[x] * smb[x] % modd;
    else
      tma[PP] = sma[x], tmb[PP] = smb[x],
      sma[x] = smb[x] = adda[x] = addb[x] = sm[x] = 0;
    return;
  }
  if (adda[x] || addb[x])
    dealadd(lc[x], adda[x], addb[x]), dealadd(rc[x], adda[x], addb[x]),
        adda[x] = addb[x] = 0;
  int mid = (a + b) >> 1;
  if (P <= mid)
    specrun(lc[x], a, mid);
  else
    specrun(rc[x], mid + 1, b);
  upd(x);
}
inline void tadd(int x) {
  while (x <= n) t[x]++, x += x & -x;
}
inline int tque(int x) {
  int sm = 0;
  while (x) sm += t[x], x -= x & -x;
  return sm;
}
bool operator<(zsa a, zsa b) { return a.v < b.v || (a.v == b.v && a.p < b.p); }
int main() {
  n = read();
  for (i = 1; i <= n; i++) a[i].v = read(), a[i].p = i, zt[i] = 2;
  sort(a + 1, a + 1 + n);
  int cnt = 0, top, np, tmp;
  for (i = 1; i <= n; i++) {
    for (k = i + 1; k <= n && a[k].v == a[i].v; k++)
      ;
    k--;
    cnt++, len[cnt] = k - i + 1;
    for (tmp = 0, j = i; j <= k; j++)
      np = a[j].p, bel[np] = cnt, belp[np] = j - i + 1, A0[np] = tque(np),
      B0[np] = k - 1 - tque(np), tadd(np), A[np] = tmp, M(tmp += A0[np]);
    for (top = k - i + 1, tmp = 0, j = k; j >= i; j--)
      np = a[j].p, tma[top] = A[np], tmb[top--] = tmp, M(tmp += B0[np]);
    rt[cnt] = tot + 1, build(1, k - i + 1), M(ANS += sm[rt[cnt]]);
    i = k;
  }
  int r, p, fh;
  for (m = read(); m; m--) {
    i = read(), j = read();
    if (i == zt[j]) {
      printf("%d\n", ANS);
      continue;
    } else
      zt[j] = i;
    fh = i == 1 ? -1 : 1;
    r = bel[j], p = belp[j], M(ANS += modd - sm[rt[r]]);
    ADDA = 0, M(ADDB = modd + fh * B0[j]), L = 1, R = p - 1;
    if (L <= R) insert(rt[r], 1, len[r]);
    M(ADDA = modd + fh * A0[j]), ADDB = 0, L = p + 1, R = len[r];
    if (L <= R) insert(rt[r], 1, len[r]);
    P = p, FH = fh, PP = j, specrun(rt[r], 1, len[r]);
    M(ANS += sm[rt[r]]);
    printf("%d\n", ANS);
  }
}
