#include <bits/stdc++.h>
using namespace std;
int n;
struct BIT {
  int a[200011];
  void clear() { memset(a, 0, sizeof(a)); }
  int lowbit(int x) { return x & -x; }
  void add(int x, int v) {
    for (; x <= n; x += lowbit(x)) a[x] += v;
  }
  int query(int x) {
    int ans = 0;
    for (; x; x -= lowbit(x)) ans += a[x];
    return ans;
  }
} bit;
const int mod = 1000000007;
int Left[200011], Right[200011];
struct segmenttree {
  struct Node {
    int size, A, C, AB, BC, ABC;
    int son[2];
  } a[2000011];
  int size;
  segmenttree() { size = 0; }
  void up(int x) {
    const int &p = a[x].son[0], &q = a[x].son[1];
    a[x].size = a[p].size + a[q].size;
    a[x].A = (a[p].A + a[q].A) % mod;
    a[x].C = (a[p].C + a[q].C) % mod;
    a[x].AB = (a[p].AB + a[q].AB + a[p].A * 1ll * a[q].size) % mod;
    a[x].BC = (a[p].BC + a[q].BC + a[p].size * 1ll * a[q].C) % mod;
    a[x].ABC = (a[p].ABC + a[q].ABC + 1ll * a[p].A * a[q].BC +
                1ll * a[p].AB * a[q].C) %
               mod;
  }
  void modify(int &x, int L, int R, int id, int v) {
    if (!x) x = ++size;
    if (L == R) {
      a[x].size = v * 1;
      a[x].A = v * Left[id];
      a[x].C = v * Right[id];
      a[x].AB = a[x].BC = a[x].ABC = 0;
      a[x].son[0] = a[x].son[1] = 0;
    } else {
      const int mid = (L + R) >> 1;
      if (id <= mid)
        modify(a[x].son[0], L, mid, id, v);
      else
        modify(a[x].son[1], mid + 1, R, id, v);
      up(x);
    }
  }
} seg;
struct Point {
  int v, id;
  bool operator<(const Point &b) const { return v < b.v; }
} b[200011];
int a[200011], cnt = 0;
int root[200011];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &b[b[i].id = i].v);
  sort(b + 1, b + 1 + n);
  a[b[1].id] = cnt = 1;
  for (int i = 2; i <= n; i++) {
    if (b[i].v != b[i - 1].v) cnt++;
    a[b[i].id] = cnt;
  }
  memset(Left, 0, sizeof(Left));
  memset(Right, 0, sizeof(Right));
  bit.clear();
  for (int i = 1; i <= n; i++) {
    Left[i] = bit.query(a[i]);
    bit.add(a[i], 1);
  }
  bit.clear();
  for (int i = n; i >= 1; i--) {
    Right[i] = bit.query(a[i]);
    bit.add(a[i], 1);
  }
  int ans = 0;
  memset(root, 0, sizeof(root));
  for (int i = 1; i <= n; i++) {
    ans = (ans - seg.a[root[a[i]]].ABC + mod) % mod;
    seg.modify(root[a[i]], 1, n, i, 1);
    ans = (ans + seg.a[root[a[i]]].ABC) % mod;
  }
  int m, x, y;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    ans = (ans - seg.a[root[a[y]]].ABC + mod) % mod;
    seg.modify(root[a[y]], 1, n, y, x - 1);
    ans = (ans + seg.a[root[a[y]]].ABC) % mod;
    printf("%d\n", ans);
  }
  return 0;
}
