#include <bits/stdc++.h>
const int N = 500010;
const long long MOD = 1e9 + 7;
using namespace std;
int n, Q;
int cnt = 0, tot = 0;
long long sum[N], lef[N], rit[N], ans = 0;
int hlp[N], pos[N], val[N], dfn[N], len[N];
struct node {
  int l, r;
  long long b, bc, bcd, cd, d, sz;
} tr[N << 2];
struct nn {
  int num, id;
} a[N];
int cmp(nn A, nn B) {
  if (A.num == B.num) return A.id < B.id;
  return A.num < B.num;
}
void READ() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i].num), a[i].id = i;
  sort(a + 1, a + n + 1, cmp);
  a[0].num = a[1].num - 1;
  cnt = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i].num != a[i - 1].num) cnt++;
    val[a[i].id] = cnt;
  }
}
int lowbit(int x) { return x & (-x); }
void ADD(int x) {
  while (x <= cnt) {
    sum[x]++;
    sum[x] %= MOD;
    x += lowbit(x);
  }
}
long long GET(int x) {
  long long res = 0;
  while (x) {
    res = (res + sum[x]) % MOD;
    x -= lowbit(x);
  }
  return res;
}
void GETS() {
  for (int i = 1; i <= n; i++) {
    lef[i] = GET(val[i]);
    ADD(val[i]);
  }
  for (int i = 0; i <= cnt; i++) sum[i] = 0;
  for (int i = n; i >= 1; i--) {
    rit[i] = GET(val[i]);
    ADD(val[i]);
  }
}
void CHK(int x) {
  int l = tr[x].l, r = tr[x].r;
  tr[x].b = (tr[l].b + tr[r].b) % MOD;
  tr[x].d = (tr[l].d + tr[r].d) % MOD;
  tr[x].bc = ((tr[l].bc + tr[r].bc) % MOD + tr[l].b * tr[r].sz % MOD) % MOD;
  tr[x].cd = ((tr[l].cd + tr[r].cd) % MOD + tr[l].sz * tr[r].d % MOD) % MOD;
  tr[x].bcd = ((tr[l].bcd + tr[r].bcd) % MOD + tr[l].b * tr[r].cd % MOD +
               tr[l].bc * tr[r].d % MOD) %
              MOD;
  tr[x].sz = (tr[l].sz + tr[r].sz) % MOD;
}
void BUILD(int x, int l, int r) {
  if (l == r) {
    tr[x].b = lef[hlp[l]];
    tr[x].d = rit[hlp[l]];
    tr[x].sz = 1;
    pos[x] = hlp[l];
    return;
  }
  int mid = (l + r) >> 1;
  tr[x].l = ++tot;
  BUILD(tr[x].l, l, mid);
  tr[x].r = ++tot;
  BUILD(tr[x].r, mid + 1, r);
  CHK(x);
}
void BUIL() {
  int las = 0, ls = 1;
  tot = cnt;
  for (int i = 1; i <= n; i++) {
    if (i != 1 && a[i].num != a[i - 1].num) {
      len[val[a[i - 1].id]] = i - ls;
      BUILD(val[a[i - 1].id], 1, i - ls);
      ls = i;
      las = 0;
    }
    las++;
    hlp[las] = a[i].id;
    dfn[a[i].id] = las;
  }
  BUILD(val[a[n].id], 1, n - ls + 1);
  len[val[a[n].id]] = n - ls + 1;
}
void CHG(int x, int l, int r, int P, long long num) {
  if (l == r) {
    tr[x].b = lef[pos[x]] * num % MOD;
    tr[x].d = rit[pos[x]] * num % MOD;
    tr[x].sz = num;
    return;
  }
  int mid = (l + r) >> 1;
  if (P > mid)
    CHG(tr[x].r, mid + 1, r, P, num);
  else
    CHG(tr[x].l, l, mid, P, num);
  CHK(x);
}
void SOLVE() {
  int pd, P;
  scanf("%d%d", &pd, &P);
  ans = (ans - tr[val[P]].bcd + MOD) % MOD;
  if (pd == 1)
    CHG(val[P], 1, len[val[P]], dfn[P], 0LL);
  else
    CHG(val[P], 1, len[val[P]], dfn[P], 1LL);
  ans = (ans + tr[val[P]].bcd) % MOD;
  printf("%lld\n", ans);
}
int main() {
  READ();
  GETS();
  BUIL();
  for (int i = 1; i <= cnt; i++) ans = (ans + tr[i].bcd) % MOD;
  scanf("%d", &Q);
  while (Q--) SOLVE();
  return 0;
}
