#include <bits/stdc++.h>
using namespace std;
string S;
int N, M;
int C[6];
int mask[101010];
int pat[101010][64];
string T;
void solve() {
  int i, j, k, l, r, x, y;
  string s;
  cin >> S;
  N = S.size();
  for (auto& c : S) C[c - 'a']++;
  for (i = 0; i < (N); i++) mask[i] = (1 << 6) - 1;
  cin >> M;
  for (i = 0; i < (M); i++) {
    cin >> x >> s;
    x--;
    mask[x] = 0;
    for (auto& c : s) mask[x] |= 1 << (c - 'a');
  }
  for (i = N - 1; i >= 0; i--) {
    for (x = 0; x < (64); x++) pat[i][x] = pat[i + 1][x];
    pat[i][mask[i]]++;
  }
  for (i = 0; i < (N); i++) {
    for (x = 0; x < (6); x++) {
      for (y = 0; y < (64); y++)
        if (y & (1 << x)) pat[i][y] += pat[i][y ^ (1 << x)];
    }
  }
  for (i = 0; i < (N); i++) {
    for (j = 0; j < (6); j++)
      if (C[j] && (mask[i] & (1 << j))) {
        C[j]--;
        int m;
        for (m = 0; m < (64); m++) {
          int tot = 0;
          for (x = 0; x < (6); x++)
            if (m & (1 << x)) tot += C[x];
          if (tot < pat[i + 1][m]) break;
        }
        if (m == 64) {
          T += 'a' + j;
          break;
        }
        C[j]++;
      }
    if (j == 6) return (void)printf("Impossible");
  }
  cout << T << endl;
}
int main(int argc, char** argv) {
  string s;
  int i;
  if (argc == 1) ios::sync_with_stdio(false), cin.tie(0);
  for (i = 0; i < (argc - 1); i++) s += argv[i + 1], s += '\n';
  for (i = 0; i < (s.size()); i++) ungetc(s[s.size() - 1 - i], stdin);
  cout.tie(0);
  solve();
  return 0;
}
