#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
const long long N = 1 << 20;
struct Node {
  long long result, l, r, size;
};
vector<long long> power2(N + 1, 1);
vector<Node> tree(2 * N, {0, 0, 0, 0});
void update(long long node) {
  tree[node].result =
      (tree[node * 2].l * tree[node * 2 + 1].r +
       tree[node * 2].result * power2[tree[node * 2 + 1].size] +
       tree[node * 2 + 1].result * power2[tree[node * 2].size]) %
      mod;
  tree[node].l =
      (tree[node * 2].l + tree[node * 2 + 1].l * power2[tree[node * 2].size]) %
      mod;
  tree[node].r = (tree[node * 2 + 1].r +
                  tree[node * 2].r * power2[tree[node * 2 + 1].size]) %
                 mod;
  tree[node].size = tree[node * 2].size + tree[node * 2 + 1].size;
  if (node > 1) update(node / 2);
}
void insert(long long index, long long x) {
  tree[N + index].r = tree[N + index].l = x;
  tree[N + index].size = 1;
  update((N + index) / 2);
}
void remove(long long index) {
  tree[N + index].r = tree[N + index].l = 0;
  tree[N + index].size = 0;
  update((N + index) / 2);
}
struct Q {
  long long x, y, z;
};
Q extended_GCD(long long a, long long b) {
  if (b == 0) return {1, 0, a};
  Q q = extended_GCD(b, a % b);
  return {q.y, q.x - a / b * q.y, q.z};
}
long long mod_inverse(long long x, long long mod) {
  return (extended_GCD(x, mod).x + mod) % mod;
}
long long n;
long long reduce(long long top) {
  return (top * mod_inverse(power2[n], mod)) % mod;
}
struct E {
  long long value, remove, order, position;
} xs[N];
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n;
  for (long long i = 1; i <= N; i++) power2[i] = (power2[i - 1] << 1) % mod;
  for (long long i = 0; i < n; i++) {
    cin >> xs[i].value;
    xs[i].order = i;
  }
  long long q;
  cin >> q;
  for (long long i = 0; i < q; i++) {
    cin >> xs[n + i].remove >> xs[n + i].value;
    xs[n + i].remove--;
    xs[n + i].order = n + i;
  }
  sort(xs, xs + n + q, [](E l, E r) { return l.value < r.value; });
  for (long long i = 0; i < n + q; i++) xs[i].position = i;
  sort(xs, xs + n + q, [](E l, E r) { return l.order < r.order; });
  for (long long i = 0; i < n; i++) {
    insert(xs[i].position, xs[i].value);
  }
  cout << reduce(tree[1].result) << endl;
  for (long long i = 0; i < q; i++) {
    remove(xs[xs[n + i].remove].position);
    xs[xs[n + i].remove].position = xs[n + i].position;
    insert(xs[n + i].position, xs[n + i].value);
    cout << reduce(tree[1].result) << endl;
  }
}
