#include <bits/stdc++.h>
using namespace std;
char s[1000010], t[1000010];
int n, m;
int mask[1000010], a[1000010], b[1000010];
void add(int &a, int &b, int c) {
  a += c;
  b += c;
}
bool check() {
  for (int i = 0; i <= (1 << 6) - 1; i++) {
    int A = 0, B = 0;
    for (int j = 0; j <= 5; j++)
      if (i & (1 << j)) A += a[j];
    for (int j = 0; j <= (1 << 6) - 1; j++)
      if (j & i) B += b[j];
    if (B < A) return 0;
  }
  return 1;
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = 1; i <= n; i++) s[i] -= 'a', a[s[i]]++;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d", &x);
    scanf("%s", t + 1);
    y = strlen(t + 1);
    for (int j = 1; j <= y; j++) mask[x] |= (1 << (t[j] - 'a'));
  }
  for (int i = 1; i <= n; i++) {
    if (mask[i] == 0) mask[i] = ((1 << 6) - 1);
    b[mask[i]]++;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= 5; j++) {
      if ((mask[i] & (1 << j)) && a[j]) {
        add(a[j], b[mask[i]], -1);
        if (check()) {
          s[i] = j + 'a';
          break;
        }
        add(a[j], b[mask[i]], 1);
      }
      if (j == 5) {
        printf("Impossible\n");
        return 0;
      }
    }
  }
  printf("%s", s + 1);
  return 0;
}
