#include <bits/stdc++.h>
using namespace std;
const int N = 600010;
const int MOD = 1e9 + 7;
struct Node {
  int s1, s2, s3, cnt;
  Node() { s1 = s2 = s3 = cnt = 0; }
  Node(int x, int y, int c) {
    s1 = x;
    s2 = y;
    cnt = c;
    s3 = 0;
  }
  void print() { cout << s1 << " " << s2 << " " << s3 << " " << cnt << endl; }
};
void add(int &a, int b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
void substract(int &a, int b) {
  a -= b;
  if (a < 0) a += MOD;
}
void mult(int &a, int b) { a = (1ll * a * b) % MOD; }
int product(int a, int b) { return (1ll * a * b) % MOD; }
int sum(int a, int b) {
  int res = a + b;
  if (res >= MOD) res -= MOD;
  return res;
}
int power(int b, int p) {
  int res = 1;
  while (p) {
    if (p & 1) mult(res, b);
    mult(b, b);
    p /= 2;
  }
  return res;
}
int n, m, q, a[N];
int as[N];
int twoinv;
int pos[N], b[N];
int curpos[N], newpos[N];
pair<int, pair<int, int> > p[N];
Node t[4 * N];
int tp[N], tpinv[N];
Node merge(Node &l, Node &r) {
  Node res = Node();
  res.s1 = sum(l.s1, product(r.s1, tp[l.cnt]));
  res.s2 = sum(l.s2, product(r.s2, tpinv[l.cnt]));
  res.s3 = sum(sum(l.s3, r.s3), product(product(l.s1, r.s2), tpinv[l.cnt]));
  res.cnt = l.cnt + r.cnt;
  return res;
}
void build(int v, int tl, int tr) {
  if (tl == tr) {
    if (as[tl] != 0)
      t[v] = Node(as[tl], product(as[tl], twoinv), 1);
    else
      t[v] = Node();
    return;
  }
  int tm = (tl + tr) / 2;
  build(v * 2, tl, tm);
  build(v * 2 + 1, tm + 1, tr);
  t[v] = merge(t[v * 2], t[v * 2 + 1]);
}
void update(int v, int tl, int tr, int pos, int val1, int val2, int c) {
  if (tl == tr) {
    t[v] = Node(val1, val2, c);
    return;
  }
  int tm = (tl + tr) / 2;
  if (pos <= tm)
    update(v * 2, tl, tm, pos, val1, val2, c);
  else
    update(v * 2 + 1, tm + 1, tr, pos, val1, val2, c);
  t[v] = merge(t[v * 2], t[v * 2 + 1]);
}
int getans() { return t[1].s3; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  scanf("%d", &q);
  for (int i = 1; i <= q; i++) scanf("%d%d", &pos[i], &b[i]);
  for (int i = 1; i <= n; i++) p[i] = make_pair(a[i], make_pair(i, 0));
  for (int i = 1; i <= q; i++) p[i + n] = make_pair(b[i], make_pair(i, 1));
  m = n + q;
  sort(p + 1, p + m + 1);
  for (int i = 1; i <= m; i++) {
    if (p[i].second.second == 0)
      curpos[p[i].second.first] = i;
    else
      newpos[p[i].second.first] = i;
  }
  for (int i = 1; i <= n; i++) as[curpos[i]] = a[i];
  twoinv = power(2, MOD - 2);
  tp[0] = 1;
  for (int i = 1; i <= m; i++) tp[i] = product(tp[i - 1], 2);
  tpinv[0] = 1;
  for (int i = 1; i <= m; i++) tpinv[i] = product(tpinv[i - 1], twoinv);
  build(1, 1, m);
  printf("%d\n", getans());
  for (int i = 1; i <= q; i++) {
    int j = curpos[pos[i]];
    update(1, 1, m, j, 0, 0, 0);
    j = newpos[i];
    curpos[pos[i]] = j;
    int val1 = b[i];
    int val2 = product(b[i], twoinv);
    update(1, 1, m, j, val1, val2, 1);
    printf("%d\n", getans());
  }
  return 0;
}
