#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 35;
const int M = 6e5 + 65;
const long long mod = 1e9 + 7;
struct Node {
  int t, i, x;
  bool operator<(const Node &a) const {
    if (x != a.x) return x < a.x;
    if (i != a.i) return i < a.i;
    return t < a.t;
  }
};
struct Tzuyu {
  long long psum, ssum;
  int cnt;
  Tzuyu() { psum = ssum = cnt = 0; }
};
int n, q, posp[N], posa[N], pos[N];
long long pw[M], ipw[M], tot;
Tzuyu tr[M << 2];
Node nd[M];
void pre() {
  pw[0] = ipw[0] = 1;
  for (int i = 1; i < M; i++) {
    pw[i] = pw[i - 1] * 2 % mod;
    ipw[i] = (ipw[i - 1] * (mod + 1) / 2) % mod;
  }
}
inline long long compute(Tzuyu &a, Tzuyu &b) { return a.ssum * b.psum % mod; }
inline Tzuyu combine(Tzuyu &a, Tzuyu &b) {
  Tzuyu ret;
  ret.cnt = a.cnt + b.cnt;
  ret.psum = (a.psum + b.psum * ipw[a.cnt]) % mod;
  ret.ssum = (b.ssum + a.ssum * ipw[b.cnt]) % mod;
  return ret;
}
void build(int v, int l, int r) {
  if (l == r) {
    if (nd[l].t == 0) {
      tr[v].psum = tr[v].ssum = nd[l].x;
      tr[v].cnt = 1;
    }
    return;
  }
  int m = (l + r) / 2;
  build(v + v, l, m);
  build(v + v + 1, m + 1, r);
  tot += compute(tr[v + v], tr[v + v + 1]);
  if (tot >= mod) tot -= mod;
  tr[v] = combine(tr[v + v], tr[v + v + 1]);
}
void remove(int v, int l, int r, int ind) {
  if (l == r) {
    tr[v].psum = tr[v].ssum = tr[v].cnt = 0;
    return;
  }
  int m = (l + r) / 2;
  tot += mod - compute(tr[v + v], tr[v + v + 1]);
  if (tot >= mod) tot -= mod;
  if (ind <= m)
    remove(v + v, l, m, ind);
  else
    remove(v + v + 1, m + 1, r, ind);
  tot += compute(tr[v + v], tr[v + v + 1]);
  if (tot >= mod) tot -= mod;
  tr[v] = combine(tr[v + v], tr[v + v + 1]);
}
void add(int v, int l, int r, int ind) {
  if (l == r) {
    tr[v].psum = tr[v].ssum = nd[l].x;
    tr[v].cnt = 1;
    return;
  }
  int m = (l + r) / 2;
  tot += mod - compute(tr[v + v], tr[v + v + 1]);
  if (tot >= mod) tot -= mod;
  if (ind <= m)
    add(v + v, l, m, ind);
  else
    add(v + v + 1, m + 1, r, ind);
  tot += compute(tr[v + v], tr[v + v + 1]);
  if (tot >= mod) tot -= mod;
  tr[v] = combine(tr[v + v], tr[v + v + 1]);
}
inline long long getAns() { return tot * ipw[2] % mod; }
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cout << setprecision(32);
  pre();
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    nd[i].x = x;
    nd[i].i = i;
    nd[i].t = 0;
  }
  cin >> q;
  for (int i = 1; i <= q; i++) {
    int ind, a;
    cin >> ind >> a;
    nd[n + i].x = a;
    nd[n + i].i = ind;
    nd[n + i].t = i;
  }
  int nq = n + q;
  sort(nd + 1, nd + nq + 1);
  for (int i = 1; i <= nq; i++) {
    if (nd[i].t)
      posa[nd[i].t] = i;
    else
      posp[nd[i].i] = i;
  }
  tot = 0;
  build(1, 1, nq);
  for (int i = 1; i <= n; i++) {
    pos[i] = posp[i];
  }
  cout << getAns() << '\n';
  for (int i = 1; i <= q; i++) {
    int ind = nd[posa[i]].i;
    remove(1, 1, nq, pos[ind]);
    pos[ind] = posa[i];
    add(1, 1, nq, pos[ind]);
    cout << getAns() << '\n';
  }
  return 0;
}
