#include <bits/stdc++.h>
using namespace std;
long long fpm(long long b, long long e, long long m) {
  long long t = 1;
  for (; e; e >>= 1, b = b * b % m) e & 1 ? t = t * b % m : 0;
  return t;
}
template <class T>
inline bool chkmin(T &a, T b) {
  return a > b ? a = b, true : false;
}
template <class T>
inline bool chkmax(T &a, T b) {
  return a < b ? a = b, true : false;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class edge>
struct Graph {
  vector<vector<edge> > adj;
  Graph(int n) {
    adj.clear();
    adj.resize(n + 5);
  }
  Graph() { adj.clear(); }
  void resize(int n) { adj.resize(n + 5); }
  void add(int s, edge e) { adj[s].push_back(e); }
  void del(int s, edge e) {
    adj[s].erase(find((adj[s]).begin(), (adj[s]).end(), e));
  }
  int deg(int v) { return adj[v].size(); }
  vector<edge> &operator[](int t) { return adj[t]; }
};
const int maxn = 5500, maxk = 3300000, base = 4194304;
int st[base << 1 | 10], f[maxk], ufs[maxk], L[maxn], R[maxn];
char S[maxk], T[maxk];
int K;
void modify(int x, int v) {
  for (x += base; x; st[x] += v, x >>= 1)
    ;
}
int query(int x) {
  int t = 1;
  for (; t < base;)
    if (st[t << 1] >= x)
      t <<= 1;
    else
      x -= st[t << 1], t = t << 1 | 1;
  return t - base;
}
int find(int t) { return ufs[t] != t ? ufs[t] = find(ufs[t]) : t; }
void fill(int x, int v) { f[x] = v, ufs[x] = find(x + 1), modify(x, -1); }
int main() {
  ios_base::sync_with_stdio(false);
  int n;
  cin >> (S + 1) >> K >> n;
  ufs[K + 1] = K + 1;
  for (int i = 1; i <= K; ++i) ufs[i] = i, st[i + base] = 1;
  for (int i = base - 1; i; --i) st[i] = st[i << 1] + st[i << 1 | 1];
  for (int i = 1; i <= n; ++i) cin >> L[i] >> R[i], ++R[i];
  for (int i = n, y; i; --i)
    if (R[i] <= K && (y = query(R[i])) <= K) {
      for (int t = L[i] + 1, x = query(t); t < R[i] && y <= K; t += 2)
        fill(y, x), y = find(y + 1), x = find(x + 1), x = find(x + 1);
      for (int t = L[i] + 0, x = query(t); t < R[i] && y <= K; t += 2)
        fill(y, x), y = find(y + 1), x = find(x + 1), x = find(x + 1);
    }
  for (int i = 1, j = 1; i <= K; ++i) T[i] = f[i] ? T[f[i]] : S[j++];
  cout << T + 1 << endl;
  return 0;
}
