#include <bits/stdc++.h>
using namespace std;
const int p = 1e9 + 7, inv2 = 500000004;
int sum[600086], inv[600086];
int a[600086], c[600086][2], pos[600086];
pair<int, int> b[600086];
struct Node {
  int val, siz, lval, rval;
} t[600086 << 2];
inline void up(int x) {
  t[x].val = (t[(x << 1)].val + t[(x << 1 | 1)].val +
              1ll * t[(x << 1)].lval * t[(x << 1 | 1)].rval % p *
                  inv[t[(x << 1)].siz]) %
             p;
  t[x].siz = t[(x << 1)].siz + t[(x << 1 | 1)].siz;
  t[x].lval =
      (t[(x << 1)].lval + 1ll * t[(x << 1 | 1)].lval * sum[t[(x << 1)].siz]) %
      p;
  t[x].rval =
      (t[(x << 1)].rval + 1ll * t[(x << 1 | 1)].rval * inv[t[(x << 1)].siz]) %
      p;
}
void modify(int x, int l, int r, int pos, int d) {
  if (l == r) {
    if (d == 1) {
      t[x].val = 0, t[x].siz = 1, t[x].lval = b[l].first,
      t[x].rval = 1ll * b[l].first * inv[1] % p;
    } else {
      t[x].val = t[x].siz = t[x].lval = t[x].rval = 0;
    }
    return;
  }
  int mid = l + r >> 1;
  if (mid >= pos)
    modify((x << 1), l, mid, pos, d);
  else
    modify((x << 1 | 1), mid + 1, r, pos, d);
  up(x);
}
int n, q, n0;
int main() {
  scanf("%d", &n), n0 = n;
  sum[0] = inv[0] = 1;
  for (int i = 1; i <= n; i++)
    sum[i] = (sum[i - 1] << 1) % p, inv[i] = 1ll * inv[i - 1] * inv2 % p;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), b[i] = {a[i], i};
  scanf("%d", &q);
  for (int i = 1; i <= q; i++)
    scanf("%d%d", &c[i][0], &c[i][1]), ++n0, b[n0] = {c[i][1], n0};
  sort(b + 1, b + 1 + n0);
  for (int i = 1; i <= n0; i++) {
    pos[b[i].second] = i;
  }
  for (int i = 1; i <= n; i++) modify(1, 1, n0, a[i] = pos[i], 1);
  printf("%d\n", t[1].val);
  for (int i = 1; i <= q; i++) {
    modify(1, 1, n0, a[c[i][0]], -1);
    modify(1, 1, n0, a[c[i][0]] = pos[i + n], 1);
    printf("%d\n", t[1].val);
  }
}
