#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, mod = 1e9 + 7;
inline int zrb(int a, int b) { return (1LL * a * b % mod); }
inline int jm(int a, int b) {
  int tmp = (a + b) % mod;
  while (tmp < 0) tmp += mod;
  return (tmp);
}
inline void jmm(int& a, int b) { a = jm(a, b); }
inline void zrbb(int& a, int b) { a = zrb(a, b); }
vector<int> IND[N], D[2][N], SM[2][N], LZ[2][N], T[2][N], v;
int A[N], LOC[N], F[N], dp[2][N], PS[2][N], SIT[N], n, q, rt, sz;
inline void add(int ind, int d) {
  for (ind++; ind < N; ind += (ind & (-ind))) F[ind] += d;
}
inline int get(int ind) {
  int sm = 0;
  for (ind++; ind; ind -= (ind & (-ind))) sm += F[ind];
  return (sm);
}
void build(int i, int j, int id = 1, int l = 0, int r = sz) {
  if (r - l < 2) {
    T[i][j][id]++;
    SM[i][j][id] = D[i][j][id] = PS[i][IND[j][l]];
    return;
  }
  int mid = ((l + r) >> 1);
  build(i, j, (id << 1), l, mid);
  build(i, j, (id << 1 | 1), mid, r);
  T[i][j][id] = r - l;
  SM[i][j][id] = jm(SM[i][j][(id << 1)], SM[i][j][(id << 1 | 1)]);
}
void shift(int i, int j, int id, int l, int r) {
  int mid = ((l + r) >> 1), d = LZ[i][j][id];
  jmm(D[i][j][(id << 1)], zrb(mid - l, d));
  jmm(SM[i][j][(id << 1)], zrb(T[i][j][(id << 1)], d));
  jmm(LZ[i][j][(id << 1)], d);
  jmm(D[i][j][(id << 1 | 1)], zrb(r - mid, d));
  jmm(SM[i][j][(id << 1 | 1)], zrb(T[i][j][(id << 1 | 1)], d));
  jmm(LZ[i][j][(id << 1 | 1)], d);
  LZ[i][j][id] = 0;
}
void add(int i, int j, int s, int e, int d, int id = 1, int l = 0, int r = sz) {
  if (l >= e || r <= s) return;
  if (l >= s && r <= e) {
    jmm(LZ[i][j][id], d);
    jmm(D[i][j][id], zrb(r - l, d));
    jmm(SM[i][j][id], zrb(T[i][j][id], d));
    return;
  }
  int mid = ((l + r) >> 1);
  shift(i, j, id, l, r);
  add(i, j, s, e, d, (id << 1), l, mid);
  add(i, j, s, e, d, (id << 1 | 1), mid, r);
  D[i][j][id] = jm(D[i][j][(id << 1)], D[i][j][(id << 1 | 1)]);
  SM[i][j][id] = jm(SM[i][j][(id << 1)], SM[i][j][(id << 1 | 1)]);
}
void force(int i, int j, int ind, int d, int id = 1, int l = 0, int r = sz) {
  if (r - l < 2) {
    if (d) {
      SM[i][j][id] = D[i][j][id];
      T[i][j][id] = 1;
    } else {
      SM[i][j][id] = T[i][j][id] = 0;
    }
    return;
  }
  int mid = ((l + r) >> 1);
  shift(i, j, id, l, r);
  if (ind < mid)
    force(i, j, ind, d, (id << 1), l, mid);
  else
    force(i, j, ind, d, (id << 1 | 1), mid, r);
  T[i][j][id] = T[i][j][(id << 1)] + T[i][j][(id << 1 | 1)];
  SM[i][j][id] = jm(SM[i][j][(id << 1)], SM[i][j][(id << 1 | 1)]);
}
int get(int i, int j, int s, int e, int id = 1, int l = 0, int r = sz) {
  if (l >= e || r <= s) return (0);
  if (l >= s && r <= e) return (SM[i][j][id]);
  int mid = ((l + r) >> 1);
  shift(i, j, id, l, r);
  return (jm(get(i, j, s, e, (id << 1), l, mid),
             get(i, j, s, e, (id << 1 | 1), mid, r)));
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &A[i]);
    v.push_back(A[i]);
  }
  sort(v.begin(), v.end());
  v.resize(unique(v.begin(), v.end()) - v.begin());
  for (int i = 0; i < n; i++)
    A[i] = lower_bound(v.begin(), v.end(), A[i]) - v.begin();
  for (int i = 0; i < n; i++) {
    LOC[i] = (int)IND[A[i]].size();
    IND[A[i]].push_back(i);
  }
  for (int i = 0; i < n; i++) {
    dp[0][i] = get(A[i]);
    add(A[i], 1);
  }
  memset(F, 0, sizeof(F));
  for (int i = n - 1; ~i; i--) {
    dp[1][i] = get(A[i]);
    add(A[i], 1);
  }
  for (int i = 0; i < n; i++) {
    sz = (int)IND[i].size();
    sz <<= 2;
    for (int t = 0; t < 2; t++) {
      D[t][i].resize(sz);
      LZ[t][i].resize(sz);
      SM[t][i].resize(sz);
      T[t][i].resize(sz);
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 1; j < (int)IND[i].size() - 1; j++) {
      PS[0][IND[i][j]] = jm(PS[0][IND[i][j - 1]], dp[0][IND[i][j - 1]]);
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = (int)IND[i].size() - 2; j > 0; j--) {
      PS[1][IND[i][j]] = jm(PS[1][IND[i][j + 1]], dp[1][IND[i][j + 1]]);
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 1; j < (int)IND[i].size() - 1; j++) {
      jmm(rt, zrb(PS[0][IND[i][j]], PS[1][IND[i][j]]));
    }
  }
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < n; j++)
      if ((int)IND[j].size() > 2) {
        sz = (int)IND[j].size();
        build(i, j);
      }
  fill(SIT, SIT + N, 2);
  scanf("%d", &q);
  for (int Q = 0; Q < q; Q++) {
    int t, ind;
    scanf("%d %d", &t, &ind);
    ind--;
    if (SIT[ind] == t) {
      printf("%d\n", rt);
      continue;
    }
    SIT[ind] = t;
    sz = (int)IND[A[ind]].size();
    if (sz < 3) {
      printf("%d\n", rt);
      continue;
    }
    int l = get(0, A[ind], 0, LOC[ind]);
    int r = get(1, A[ind], LOC[ind] + 1, sz);
    int dd = (t == 1 ? -1 : 1);
    jmm(rt, zrb(dd, jm(zrb(l, dp[1][ind]), zrb(r, dp[0][ind]))));
    if (t == 2) {
      force(0, A[ind], LOC[ind], t - 1);
      force(1, A[ind], LOC[ind], t - 1);
    }
    add(1, A[ind], 1, min(sz - 1, LOC[ind]), zrb(dd, dp[1][ind]));
    add(0, A[ind], max(1, LOC[ind] + 1), sz - 1, zrb(dd, dp[0][ind]));
    l = get(0, A[ind], LOC[ind], LOC[ind] + 1);
    r = get(1, A[ind], LOC[ind], LOC[ind] + 1);
    rt = jm(rt, zrb(dd, zrb(l, r)));
    if (t == 1) {
      force(0, A[ind], LOC[ind], t - 1);
      force(1, A[ind], LOC[ind], t - 1);
    }
    printf("%d\n", rt);
  }
}
