#include <bits/stdc++.h>
using namespace std;
int n, pw[600005], ipw[600005], a[600005], rt;
int Pow(int b, int k) {
  int r = 1;
  for (; k; k >>= 1, b = 1ll * b * b % 1000000007)
    if (k & 1) r = 1ll * r * b % 1000000007;
  return r;
}
int ch[600005][2], key[600005], sm[600005], sz[600005], is[600005], zs[600005],
    val[600005], tot;
void upd(int u) {
  sz[u] = sz[ch[u][0]] + sz[ch[u][1]] + 1;
  sm[u] =
      (sm[ch[u][0]] + sm[ch[u][1]] +
       1ll * (1ll * is[ch[u][1]] * ipw[sz[ch[u][0]] + 1] % 1000000007) *
           (zs[ch[u][0]] + 1ll * pw[sz[ch[u][0]] + 1] * val[u] % 1000000007) +
       1ll * ipw[sz[ch[u][0]] + 2] * val[u] % 1000000007 * zs[ch[u][0]]) %
      1000000007;
  is[u] = (is[ch[u][0]] + 1ll * ipw[sz[ch[u][0]] + 1] * is[ch[u][1]] +
           1ll * ipw[sz[ch[u][0]] + 2] * val[u]) %
          1000000007;
  zs[u] = (zs[ch[u][0]] + 1ll * pw[sz[ch[u][0]] + 1] * zs[ch[u][1]] +
           1ll * pw[sz[ch[u][0]] + 1] * val[u]) %
          1000000007;
}
void rot(int x, int &y) {
  int c = (ch[y][1] == x);
  ch[y][c] = ch[x][!c];
  ch[x][!c] = y;
  upd(y), upd(x);
  y = x;
}
void ins(int &u, int v) {
  if (!u)
    return (void)(u = ++tot, sz[u] = 1, sm[u] = 0,
                  key[u] = rand() << 15 | rand(), val[u] = v,
                  is[u] = 1ll * val[u] * ipw[2] % 1000000007,
                  zs[u] = 1ll * val[u] * pw[1] % 1000000007);
  int d = (val[u] <= v);
  ins(ch[u][d], v);
  upd(u);
  if (key[ch[u][d]] < key[u]) rot(ch[u][d], u);
}
void del(int &u, int v) {
  if (val[u] == v) {
    if (!ch[u][0] || !ch[u][1]) return (void)(u = ch[u][0] + ch[u][1]);
    int d = (key[ch[u][0]] > key[ch[u][1]]);
    rot(ch[u][d], u);
    del(ch[u][!d], v);
    upd(u);
    return;
  }
  int d = (val[u] < v);
  del(ch[u][d], v);
  upd(u);
}
int main() {
  scanf("%d", &n);
  pw[0] = ipw[0] = 1;
  ipw[1] = Pow(2, 1000000007 - 2);
  for (int i = (1), LIM = (n); i <= LIM; i++) scanf("%d", &a[i]);
  for (int i = (1), LIM = (n + 2); i <= LIM; i++)
    pw[i] = 1ll * pw[i - 1] * 2 % 1000000007,
    ipw[i + 1] = 1ll * ipw[i] * ipw[1] % 1000000007;
  for (int i = (1), LIM = (n); i <= LIM; i++) ins(rt, a[i]);
  printf("%d\n", (sm[rt] + 1000000007) % 1000000007);
  int q;
  scanf("%d", &q);
  for (int u, v; q--;) {
    scanf("%d%d", &u, &v);
    del(rt, a[u]);
    ins(rt, a[u] = v);
    printf("%d\n", (sm[rt] + 1000000007) % 1000000007);
  }
}
