#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-13;
const long double PI = acos(-1);
const int INF = (int)1e9;
const long long INFF = (long long)1e18;
const int mod = (int)1e9 + 7;
const int MXN = (int)2e5 + 7;
char s[MXN];
int cnt[MXN];
int num[MXN], num2[MXN], a[MXN];
bool check() {
  for (int i = 0; i < 1 << 6; i++) num2[i] = num[i];
  for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 1 << 6; j++) {
      if (j & (1 << i)) num2[j] += num2[j ^ (1 << i)];
    }
  }
  for (int i = 0; i < 1 << 6; i++) {
    int sum = 0;
    for (int j = 0; j < 6; j++)
      if (i & (1 << j)) sum += cnt[j];
    if (sum < num2[i]) return false;
  }
  return true;
}
char ans[MXN];
int main() {
  scanf("%s", s + 1);
  int l = strlen(s + 1);
  for (int i = 1; s[i]; i++) {
    cnt[s[i] - 'a']++;
    a[i] = (1 << 6) - 1;
  }
  int m;
  scanf("%d", &m);
  while (m--) {
    int p;
    scanf("%d %s", &p, s + 1);
    a[p] = 0;
    for (int i = 1; s[i]; i++) a[p] ^= (1 << (s[i] - 'a'));
  }
  for (int i = 1; i <= l; i++) {
    num[a[i]]++;
  }
  for (int i = 1; i <= l; i++) {
    num[a[i]]--;
    for (int j = 0; j < 6; j++) {
      if (!cnt[j] || !(a[i] & (1 << j))) continue;
      cnt[j]--;
      if (check()) {
        ans[i] = j + 'a';
        break;
      } else {
        cnt[j]++;
      }
    }
    if (!ans[i]) {
      puts("Impossible");
      return 0;
    }
  }
  printf("%s\n", ans + 1);
  return 0;
}
