#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300005, N = 333333;
const int D = 1e9 + 7, inv2 = 5e8 + 4;
int n, Q, a[MAXN], mul[N + 233], inv[N + 233];
int val[MAXN << 1];
int id[MAXN], w[MAXN];
int tim, len;
struct node {
  int v, id;
  node() {}
  node(int vv, int ii) { v = vv, id = ii; }
} s[MAXN << 1];
bool operator<(const node &aa, const node &bb) {
  if (aa.v != bb.v) return aa.v < bb.v;
  return aa.id < bb.id;
}
int v0[MAXN << 4], v1[MAXN << 4], sum[MAXN << 4], cnt[MAXN << 4];
void up(int p) {
  cnt[p] = cnt[p << 1] + cnt[p << 1 | 1];
  sum[p] = (sum[p << 1] + sum[p << 1 | 1] +
            1ll * v0[p << 1] * v1[p << 1 | 1] % D * inv[cnt[p << 1]]) %
           D;
  v0[p] = (v0[p << 1] + 1ll * v0[p << 1 | 1] * mul[cnt[p << 1]]) % D;
  v1[p] = (v1[p << 1] + 1ll * v1[p << 1 | 1] * inv[cnt[p << 1]]) % D;
}
void insert(int p, int l, int r, int x) {
  if (l == r) {
    cnt[p] = 1, sum[p] = 0;
    v0[p] = val[x];
    v1[p] = 1ll * val[x] * inv[1] % D;
    return;
  }
  int mid = (l + r) >> 1;
  if (x <= mid)
    insert(p << 1, l, mid, x);
  else
    insert(p << 1 | 1, mid + 1, r, x);
  up(p);
}
void remove(int p, int l, int r, int x) {
  if (l == r) return (void)(cnt[p] = sum[p] = v0[p] = v1[p] = 0);
  int mid = (l + r) >> 1;
  if (x <= mid)
    remove(p << 1, l, mid, x);
  else
    remove(p << 1 | 1, mid + 1, r, x);
  up(p);
}
int main() {
  mul[0] = inv[0] = 1;
  for (int i = 1; i <= N; i++) mul[i] = mul[i - 1] * 2 % D;
  for (int i = 1; i <= N; i++) inv[i] = 1ll * inv[i - 1] * inv2 % D;
  scanf("%d", &n);
  tim = -n;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), s[++len] = node(a[i], ++tim);
  scanf("%d", &Q);
  for (int i = 1; i <= Q; i++) {
    scanf("%d%d", &id[i], &w[i]);
    s[++len] = node(w[i], ++tim);
  }
  sort(s + 1, s + len + 1);
  for (int i = 1; i <= len; i++) {
    val[i] = s[i].v;
    if (s[i].id <= 0)
      a[s[i].id + n] = i;
    else
      w[s[i].id] = i;
  }
  for (int i = 1; i <= n; i++) insert(1, 1, len, a[i]);
  printf("%d\n", sum[1]);
  for (int i = 1; i <= Q; i++) {
    remove(1, 1, len, a[id[i]]);
    insert(1, 1, len, w[i]);
    a[id[i]] = w[i];
    printf("%d\n", sum[1]);
  }
  return 0;
}
