#include <bits/stdc++.h>
using namespace std;
int Plus(long long x, long long y) {
  return (x += y) >= 1000000007 ? x % 1000000007 : x;
}
int Minus(long long x, long long y) {
  return (x += 1000000007 - y) >= 1000000007 ? x % 1000000007 : x;
}
int mul(long long x, long long y) {
  return (x *= y) >= 1000000007 ? x % 1000000007 : x;
}
int n, a[200003], mp[200003], cntmp, pre[200003], nxt[200003];
namespace BIT {
int t[200003];
void clear() {
  for (int i = 1; i <= n; i++) t[i] = 0;
}
void add(int pos, int k) {
  while (pos <= n) {
    t[pos] += k;
    pos += pos & -pos;
  }
}
int query(int pos) {
  int ret = 0;
  while (pos) {
    ret += t[pos];
    pos -= pos & -pos;
  }
  return ret;
}
}  // namespace BIT
namespace SEG {
struct node {
  int _2, _3, _4, _23, _34, _234, son[2];
  node() : _2(0), _3(0), _4(0), _23(0), _34(0), _234(0) { son[0] = son[1] = 0; }
} t[200003 * 20];
int cnt, root[200003];
void pushup(int p) {
  int son0 = t[p].son[0], son1 = t[p].son[1];
  t[p]._2 = Plus(t[son0]._2, t[son1]._2);
  t[p]._3 = Plus(t[son0]._3, t[son1]._3);
  t[p]._4 = Plus(t[son0]._4, t[son1]._4);
  t[p]._23 = Plus(mul(t[son0]._2, t[son1]._3), Plus(t[son0]._23, t[son1]._23));
  t[p]._34 = Plus(mul(t[son0]._3, t[son1]._4), Plus(t[son0]._34, t[son1]._34));
  t[p]._234 = Plus(
      Plus(Plus(mul(t[son0]._2, t[son1]._34), mul(t[son0]._23, t[son1]._4)),
           t[son0]._234),
      t[son1]._234);
}
void change(int& p, int l, int r, int pos, bool k) {
  if (p == 0) p = ++cnt;
  if (l == r) {
    t[p]._2 = k * pre[pos];
    t[p]._3 = k;
    t[p]._4 = k * nxt[pos];
    return;
  }
  int mid = (l + r) >> 1;
  if (pos <= mid)
    change(t[p].son[0], l, mid, pos, k);
  else
    change(t[p].son[1], mid + 1, r, pos, k);
  pushup(p);
}
int query(int p) { return t[p]._234; }
}  // namespace SEG
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
    mp[++cntmp] = a[i];
  }
  sort(mp + 1, mp + cntmp + 1);
  cntmp = unique(mp + 1, mp + cntmp + 1) - mp - 1;
  for (int i = 1; i <= n; i++)
    a[i] = lower_bound(mp + 1, mp + cntmp + 1, a[i]) - mp;
  for (int i = 1; i <= n; i++) {
    pre[i] = BIT::query(a[i]);
    BIT::add(a[i], 1);
  }
  BIT::clear();
  for (int i = n; i >= 1; i--) {
    nxt[i] = BIT::query(a[i]);
    BIT::add(a[i], 1);
  }
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    ans = Minus(ans, SEG::query(SEG::root[a[i]]));
    SEG::change(SEG::root[a[i]], 1, n, i, 1);
    ans = Plus(ans, SEG::query(SEG::root[a[i]]));
  }
  int Q;
  scanf("%d", &Q);
  while (Q--) {
    int mo, x;
    scanf("%d%d", &mo, &x);
    ans = Minus(ans, SEG::query(SEG::root[a[x]]));
    if (mo == 1)
      SEG::change(SEG::root[a[x]], 1, n, x, 0);
    else
      SEG::change(SEG::root[a[x]], 1, n, x, 1);
    ans = Plus(ans, SEG::query(SEG::root[a[x]]));
    printf("%d\n", ans);
  }
  return 0;
}
