#include <bits/stdc++.h>
using namespace std;
const int N = 6e5 + 10, mod = 1e9 + 7;
int n, a[N], q, cnt, pos[N], c[N];
long long lo[N], inv[N];
map<int, int> mp;
struct node {
  int x, pos, id;
  node(int a = 0, int b = 0, int c = 0) { x = a, pos = b, id = c; }
} b[N];
bool cmp1(node x, node y) { return x.x < y.x; }
bool cmp2(node x, node y) { return x.id < y.id; }
long long pw(long long x, long long k) {
  long long num = 1;
  while (k) {
    if (k & 1) num = num * x % mod;
    x = x * x % mod;
    k >>= 1;
  }
  return num;
}
long long sum[N << 2], suml[N << 2], sumr[N << 2], siz[N << 2];
void pushup(int p) {
  sum[p] = sum[p << 1] + sum[p << 1 | 1], sum[p] -= (sum[p] >= mod ? mod : 0);
  sum[p] =
      sum[p] + suml[p << 1] * sumr[p << 1 | 1] % mod * inv[siz[p << 1]] % mod,
  sum[p] -= (sum[p] >= mod ? mod : 0);
  suml[p] = suml[p << 1] + suml[p << 1 | 1] * lo[siz[p << 1]] % mod,
  suml[p] -= (suml[p] >= mod ? mod : 0);
  sumr[p] = sumr[p << 1] + sumr[p << 1 | 1] * inv[siz[p << 1]] % mod,
  sumr[p] -= (sumr[p] >= mod ? mod : 0);
  siz[p] = siz[p << 1] + siz[p << 1 | 1];
}
void change(int p, int l, int r, int pos, int val) {
  if (l == r) {
    if (!val) {
      siz[p] = sum[p] = suml[p] = sumr[p] = 0;
    } else {
      siz[p] = 1;
      sum[p] = 0;
      suml[p] = val, sumr[p] = inv[1] * val % mod;
    }
    return;
  }
  int mid = (l + r) >> 1;
  if (pos <= mid)
    change(p << 1, l, mid, pos, val);
  else
    change(p << 1 | 1, mid + 1, r, pos, val);
  pushup(p);
}
void pre(int x) {
  lo[0] = inv[0] = 1;
  for (int i = 1; i <= x; i++) lo[i] = lo[i - 1] * 2 % mod;
  inv[x] = pw(lo[x], mod - 2);
  for (int i = x - 1; i >= 1; i--) inv[i] = inv[i + 1] * 2 % mod;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), b[i] = node(a[i], 0, i);
  scanf("%d", &q);
  pre(n + q);
  for (int i = 1, x, y; i <= q; i++) {
    scanf("%d%d", &pos[i], &y);
    b[n + i] = node(y, 0, n + i);
  }
  sort(b + 1, b + n + q + 1, cmp1);
  for (int i = 1; i <= n + q; i++) {
    b[i].pos = i;
  }
  sort(b + 1, b + n + q + 1, cmp2);
  for (int i = 1; i <= n; i++) {
    change(1, 1, n + q, b[i].pos, b[i].x);
    mp[i] = i;
  }
  printf("%lld\n", sum[1]);
  for (int i = n + 1; i <= n + q; i++) {
    change(1, 1, n + q, b[mp[pos[i - n]]].pos, 0);
    mp[pos[i - n]] = i;
    change(1, 1, n + q, b[i].pos, b[i].x);
    printf("%lld\n", sum[1]);
  }
  return 0;
}
