#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e5 + 10, mod = 1e9 + 7;
int a[maxN], LEFT[maxN], RIGHT[maxN], ptr[maxN], root[maxN], td[maxN];
bool ok[maxN];
vector<int> vc;
int curr = 1, fen[maxN];
long long ans = 0;
inline void __upd(int p, int val) {
  for (p++; p < maxN; p += p & -p) fen[p] += val;
  return;
}
inline int __get(int p) {
  int res = 0;
  for (; p > 0; p -= p & -p) res += fen[p];
  return res;
}
int lc[4 * maxN], rc[4 * maxN];
struct node {
  long long res, sum, lazy;
  int cnt;
  node() { res = sum = lazy = cnt = 0; }
} seg1[4 * maxN], seg2[4 * maxN];
inline void make(int id) {
  if (!lc[id]) lc[id] = curr++;
  if (!rc[id]) rc[id] = curr++;
}
inline void shift(node *seg, int id, int s, int e) {
  if (seg[id].lazy == 0) return;
  int mid = (s + e) / 2, laz = seg[id].lazy;
  seg[lc[id]].sum += (1LL * (mid - s) * laz) % mod;
  seg[lc[id]].sum %= mod;
  seg[lc[id]].res += (1LL * seg[lc[id]].cnt * laz) % mod;
  seg[lc[id]].res %= mod;
  seg[lc[id]].lazy += laz;
  seg[lc[id]].lazy %= mod;
  seg[rc[id]].sum += (1LL * (e - mid) * laz) % mod;
  seg[rc[id]].sum %= mod;
  seg[rc[id]].res += (1LL * seg[rc[id]].cnt * laz) % mod;
  seg[rc[id]].res %= mod;
  seg[rc[id]].lazy += laz;
  seg[rc[id]].lazy %= mod;
  seg[id].lazy = 0;
  return;
}
long long get(node *seg, int id, int p, int s, int e) {
  if (e - s < 2) return seg[id].sum;
  int mid = (s + e) / 2;
  make(id);
  shift(seg, id, s, e);
  if (p < mid)
    return get(seg, lc[id], p, s, mid);
  else
    return get(seg, rc[id], p, mid, e);
}
long long get2(node *seg, int id, int L, int R, int s, int e) {
  if (L <= s && e <= R) return seg[id].res;
  if (L >= e || s >= R) return 0;
  int mid = (s + e) / 2;
  make(id);
  shift(seg, id, s, e);
  return (get2(seg, lc[id], L, R, s, mid) + get2(seg, rc[id], L, R, mid, e)) %
         mod;
}
void add(node *seg, int id, int L, int R, int v, int s, int e) {
  if (L <= s && e <= R) {
    seg[id].sum += (1LL * (e - s) * v) % mod, seg[id].sum %= mod;
    seg[id].res += (1LL * seg[id].cnt * v) % mod;
    seg[id].res %= mod;
    seg[id].lazy += v;
    seg[id].lazy %= mod;
    return;
  }
  if (L >= e || s >= R) return;
  int mid = (s + e) / 2;
  make(id);
  shift(seg, id, s, e);
  add(seg, lc[id], L, R, v, s, mid);
  add(seg, rc[id], L, R, v, mid, e);
}
void upd(node *seg, int id, int p, int tp, int s, int e) {
  if (e - s < 2) {
    if (tp == 0)
      seg[id].res = seg[id].sum, seg[id].cnt = 1;
    else
      seg[id].res = 0, seg[id].cnt = 0;
    return;
  }
  int mid = (s + e) / 2;
  make(id);
  shift(seg, id, s, e);
  if (p < mid)
    upd(seg, lc[id], p, tp, s, mid);
  else
    upd(seg, rc[id], p, tp, mid, e);
  seg[id].sum = (seg[lc[id]].sum + seg[rc[id]].sum) % mod;
  seg[id].res = (seg[lc[id]].res + seg[rc[id]].res) % mod;
  seg[id].cnt = seg[lc[id]].cnt + seg[rc[id]].cnt;
  return;
}
inline void change(int p, int tp) {
  int v = a[p];
  long long rg = get(seg1, root[v], ptr[p], 0, td[v]);
  long long lf = get(seg2, root[v], ptr[p], 0, td[v]);
  long long way = (lf * rg) % mod;
  ans += tp * way + mod, ans %= mod;
  long long sr = get2(seg1, root[v], ptr[p] + 1, td[v], 0, td[v]);
  sr *= LEFT[p];
  sr %= mod;
  ans += tp * sr + mod;
  ans %= mod;
  long long sl = get2(seg2, root[v], 0, ptr[p], 0, td[v]);
  sl *= RIGHT[p], sl %= mod;
  ans += tp * sl + mod;
  ans %= mod;
  add(seg1, root[v], 0, ptr[p], tp * RIGHT[p], 0, td[v]);
  add(seg2, root[v], ptr[p] + 1, td[v], tp * LEFT[p], 0, td[v]);
  upd(seg1, root[v], ptr[p], ok[p], 0, td[v]);
  upd(seg2, root[v], ptr[p], ok[p], 0, td[v]);
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    vc.push_back(a[i]);
  }
  sort(vc.begin(), vc.end());
  vc.resize(unique(vc.begin(), vc.end()) - vc.begin());
  for (int i = 0; i < n; i++)
    a[i] = lower_bound(vc.begin(), vc.end(), a[i]) - vc.begin();
  for (int i = 0; i < n; i++) {
    if (root[a[i]] == 0) root[a[i]] = curr++;
    LEFT[i] = __get(a[i] + 1);
    ptr[i] = __get(a[i] + 1) - __get(a[i]);
    __upd(a[i], +1);
  }
  memset(fen, 0, sizeof fen);
  for (int i = n - 1; i >= 0; i--) {
    RIGHT[i] = __get(a[i] + 1);
    __upd(a[i], +1);
    td[a[i]]++;
  }
  for (int i = 0; i < n; i++) {
    change(i, +1);
    ok[i] = !ok[i];
  }
  int q;
  cin >> q;
  while (q--) {
    int t, p;
    cin >> t >> p;
    p--;
    if (ok[p])
      change(p, -1);
    else
      change(p, +1);
    ok[p] = !ok[p];
    cout << ans << '\n';
  }
}
