#include <bits/stdc++.h>
using namespace std;
clock_t __stt;
inline void TStart() { __stt = clock(); }
inline void TReport() {
  printf("\nTaken Time : %.3lf sec\n",
         (double)(clock() - __stt) / CLOCKS_PER_SEC);
}
template <typename T>
T MIN(T a, T b) {
  return a < b ? a : b;
}
template <typename T>
T MAX(T a, T b) {
  return a > b ? a : b;
}
template <typename T>
T ABS(T a) {
  return a > 0 ? a : (-a);
}
template <typename T>
void UMIN(T &a, T b) {
  if (b < a) a = b;
}
template <typename T>
void UMAX(T &a, T b) {
  if (b > a) a = b;
}
const int bc = 6, mc = 64;
int n, m, subcnt[mc], chcnt[mc], avai[100005];
char s[100005], tmp[10];
int main() {
  int i, j, k;
  scanf("%s", s);
  n = strlen(s);
  scanf("%d", &m);
  fill(avai, avai + n, mc - 1);
  while (m--) {
    scanf("%d%s", &j, tmp);
    k = strlen(tmp);
    avai[--j] = 0;
    for (i = 0; i < k; ++i) {
      avai[j] += (1 << (tmp[i] - 'a'));
    }
  }
  for (i = 0; i < n; ++i) {
    for (j = 0; j < mc; ++j) {
      if ((avai[i] & j) == avai[i]) {
        ++subcnt[j];
      }
      if ((1 << (s[i] - 'a')) & j) {
        ++chcnt[j];
      }
    }
  }
  for (i = 0; i < n; ++i) {
    for (j = 0; j < bc; ++j) {
      if (!(avai[i] & (1 << j))) continue;
      s[i] = 'a' + j;
      for (k = 0; k < mc; ++k) {
        if ((avai[i] & k) == avai[i]) {
          --subcnt[k];
        }
        if ((1 << j) & k) {
          --chcnt[k];
        }
      }
      for (k = 0; k < mc; ++k) {
        if (chcnt[k] < subcnt[k]) break;
      }
      if (k == mc) break;
      for (k = 0; k < mc; ++k) {
        if ((avai[i] & k) == avai[i]) {
          ++subcnt[k];
        }
        if ((1 << j) & k) {
          ++chcnt[k];
        }
      }
    }
    if (j == bc) {
      printf("Impossible\n");
      return 0;
    }
  }
  printf("%s\n", s);
  return 0;
}
