#include <bits/stdc++.h>
using namespace std;
const int maxn = 2E5 + 20;
const long long mo = 1000000007;
int n, m, Ans, cur = 1, A[maxn], B[maxn], rt[maxn], ch[maxn][2], fa[maxn],
               siz[maxn], key[maxn], L[maxn], R[maxn], sl0[maxn], sl1[maxn],
               sr0[maxn], sr1[maxn], c[maxn], SL[maxn], SR[maxn], sum[maxn];
vector<int> v[maxn];
inline int Mul(const long long &x, const long long &y) { return x * y % mo; }
inline int Add(const int &x, const int &y) {
  return x + y < mo ? x + y : x + y - mo;
}
inline int Dec(const int &x, const int &y) {
  return x - y >= 0 ? x - y : x - y + mo;
}
inline int getint() {
  char ch = getchar();
  int ret = 0;
  while (ch < '0' || '9' < ch) ch = getchar();
  while ('0' <= ch && ch <= '9') ret = ret * 10 + ch - '0', ch = getchar();
  return ret;
}
inline void maintain(int x) {
  int lc = ch[x][0], rc = ch[x][1], pos = siz[lc] + key[x];
  siz[x] = Add(key[x], Add(siz[lc], siz[rc]));
  sl0[x] = Add(key[x] ? L[x] : 0, Add(sl0[lc], sl0[rc]));
  sr0[x] = Add(key[x] ? R[x] : 0, Add(sr0[lc], sr0[rc]));
  sl1[x] = Add(Mul(key[x] ? L[x] : 0, pos), sl1[lc]);
  sl1[x] = Add(sl1[x], Add(sl1[rc], Mul(pos, sl0[rc])));
  sr1[x] = Add(Mul(key[x] ? R[x] : 0, pos), sr1[lc]);
  sr1[x] = Add(sr1[x], Add(sr1[rc], Mul(pos, sr0[rc])));
}
inline int Build(int col, int l, int r) {
  if (l > r) return 0;
  int mid = l + r >> 1, ret = v[col][mid];
  ch[ret][0] = Build(col, l, mid - 1);
  ch[ret][1] = Build(col, mid + 1, r);
  if (ch[ret][0]) fa[ch[ret][0]] = ret;
  if (ch[ret][1]) fa[ch[ret][1]] = ret;
  maintain(ret);
  return ret;
}
inline void rotate(int x) {
  int y = fa[x], z = fa[y];
  int d = ch[y][0] == x ? 0 : 1;
  ch[y][d] = ch[x][d ^ 1];
  maintain(y);
  ch[x][d ^ 1] = y;
  maintain(x);
  fa[y] = x;
  fa[x] = z;
  if (ch[y][d]) fa[ch[y][d]] = y;
  if (z) ch[z][ch[z][1] == y] = x, maintain(z);
}
inline void splay(int x, int col) {
  for (int y = fa[x]; y; rotate(x), y = fa[x])
    if (fa[y]) rotate((ch[y][0] == x) ^ (ch[fa[y]][0] == y) ? x : y);
  rt[col] = x;
}
void Pre_Work() {
  for (int i = 1; i <= n; i++) A[i] = B[i] = getint();
  sort(B + 1, B + n + 1);
  for (int i = 2; i <= n; i++)
    if (B[i] != B[i - 1]) B[++cur] = B[i];
  for (int i = 1; i <= cur; i++) v[i].push_back(i);
  for (int i = 1; i <= n; i++) {
    A[i + n] = lower_bound(B + 1, B + cur + 1, A[i]) - B;
    v[A[i + n]].push_back(i + n);
    siz[i + n] = 1;
  }
  for (int i = n + 1; i <= 2 * n; i++) {
    for (int j = A[i]; j > 0; j -= j & -j) L[i] += c[j];
    for (int j = A[i]; j <= cur; j += j & -j) ++c[j];
  }
  memset(c, 0, sizeof(c));
  for (int i = 2 * n; i > n; i--) {
    for (int j = A[i]; j > 0; j -= j & -j) R[i] += c[j];
    for (int j = A[i]; j <= cur; j += j & -j) ++c[j];
  }
  for (int i = n + 1; i <= 2 * n; i++) key[i] = 1;
  for (int i = 1; i <= cur; i++) rt[i] = Build(i, 0, v[i].size() - 1);
  for (int i = n + 1; i <= 2 * n; i++) {
    SL[i] = sum[A[i]];
    sum[A[i]] = Add(sum[A[i]], L[i]);
  }
  memset(sum, 0, sizeof(sum));
  for (int i = 2 * n; i > n; i--) {
    SR[i] = sum[A[i]];
    sum[A[i]] = Add(sum[A[i]], R[i]);
  }
  for (int i = n + 1; i <= 2 * n; i++) Ans = Add(Ans, Mul(SL[i], SR[i]));
}
int main() {
  n = getint();
  Pre_Work();
  m = getint();
  while (m--) {
    int typ = getint(), x = getint() + n;
    if (typ == 1) {
      splay(x, A[x]);
      int dl, dr, pos = siz[ch[x][0]] + 1;
      dl = Dec(Mul(pos - 1, sl0[ch[x][0]]), sl1[ch[x][0]]);
      dr = Add(sr1[ch[x][1]], Mul(pos, sr0[ch[x][1]]));
      dr = Dec(dr, Mul(pos + 1, sr0[ch[x][1]]));
      Ans = Dec(Ans, Mul(sl0[ch[x][0]], sr0[ch[x][1]]));
      Ans = Dec(Ans, Mul(dl, R[x]));
      Ans = Dec(Ans, Mul(dr, L[x]));
      key[x] ^= 1;
      maintain(x);
    } else {
      splay(x, A[x]);
      int dl, dr, pos = siz[ch[x][0]] + 1;
      dl = Dec(Mul(pos - 1, sl0[ch[x][0]]), sl1[ch[x][0]]);
      dr = Add(sr1[ch[x][1]], Mul(pos, sr0[ch[x][1]]));
      dr = Dec(dr, Mul(pos + 1, sr0[ch[x][1]]));
      Ans = Add(Ans, Mul(sl0[ch[x][0]], sr0[ch[x][1]]));
      Ans = Add(Ans, Mul(dl, R[x]));
      Ans = Add(Ans, Mul(dr, L[x]));
      key[x] ^= 1;
      maintain(x);
    }
    printf("%d\n", Ans);
  }
  return 0;
}
