#include <bits/stdc++.h>
using namespace std;
int n;
char s[100001];
char sx[100001];
int sum[1 << 6];
int m;
int setx[100001];
int cnt[6];
char ans[100001];
void read_data() {
  scanf(" %s ", s);
  n = strlen(s);
  cin >> m;
  int ix;
  for (int i = 0; i < n; i++) setx[i] = (1 << 6) - 1;
  for (int k = 0; k < m; k++) {
    scanf("%d %s", &ix, sx);
    ix--;
    setx[ix] = 0;
    for (int l = 0; l < strlen(sx); l++) setx[ix] |= 1 << (sx[l] - 'a');
  }
}
bool check() {
  for (int j = 1; j < (1 << 6); j++)
    if (sum[j] > 0) {
      int all_cnt = 0;
      for (int l = 0; l < 6; l++)
        if (j >> l & 1) all_cnt += cnt[l];
      if (sum[j] > all_cnt) return false;
    }
  return true;
}
bool deal() {
  memset(cnt, 0, sizeof(cnt));
  for (int i = 0; i < n; i++) cnt[s[i] - 'a']++;
  memset(sum, 0, sizeof(sum));
  for (int i = 0; i < n; i++)
    for (int j = 1; j < (1 << 6); j++)
      if ((setx[i] & j) == setx[i]) sum[j]++;
  if (!check()) return false;
  for (int i = 0; i < n; i++) {
    for (int j = 1; j < (1 << 6); j++)
      if ((setx[i] & j) == setx[i]) sum[j]--;
    bool flag = false;
    for (int l = 0; l < 6; l++)
      if (setx[i] >> l & 1 && cnt[l] > 0) {
        cnt[l]--;
        if (check()) {
          ans[i] = 'a' + l;
          flag = true;
          break;
        }
        cnt[l]++;
      }
    if (!flag) return false;
  }
  return true;
}
int main() {
  read_data();
  if (!deal()) {
    cout << "Impossible" << endl;
  } else {
    cout << ans << endl;
  }
  return 0;
}
