#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
string s, ans = "";
int n, good[100010], numc[6];
pair<int, int> num[100];
void addNei(int pos, int val) {
  for (int i = 1; i <= (1 << 6) - 1; i++) {
    bool add = false;
    for (int j = 0; j < 6; j++)
      if ((i & (1 << j)) > 0 && (good[pos] & (1 << j))) add = true;
    if (add) num[i].first += val;
  }
}
void addCol(int col, int val) {
  for (int i = 1; i <= (1 << 6) - 1; i++)
    if ((i & (1 << col)) > 0) num[i].second += val;
}
bool check() {
  for (int i = 1; i <= (1 << 6) - 1; i++)
    if (num[i].first < num[i].second) return false;
  return true;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> s >> n;
  for (int i = 0; i < s.size(); i++) ++numc[s[i] - 'a'];
  for (int i = 0; i < s.size(); i++) good[i] = (1 << 6) - 1;
  int x;
  string y;
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    --x;
    good[x] = 0;
    for (int j = 0; j < y.size(); j++) good[x] |= (1 << (y[j] - 'a'));
  }
  for (int i = 0; i < s.size(); i++) {
    for (int j = 1; j <= (1 << 6) - 1; j++) {
      bool cont = false;
      for (int k = 0; k < 6; k++)
        if ((j & (1 << k)) > 0 && (good[i] & (1 << k)) > 0) cont = true;
      if (cont) ++num[j].first;
    }
  }
  for (int i = 1; i <= (1 << 6) - 1; i++)
    for (int j = 0; j < 6; j++)
      if ((i & (1 << j)) > 0) num[i].second += numc[j];
  for (int i = 0; i < s.size(); i++) {
    bool ok = false;
    addNei(i, -1);
    for (int j = 0; j < 6; j++) {
      if ((good[i] & (1 << j)) == 0 || numc[j] == 0) continue;
      addCol(j, -1);
      if (check()) ok = true;
      if (ok) {
        ans.push_back(j + 'a');
        --numc[j];
        break;
      }
      addCol(j, 1);
    }
    if (!ok) {
      puts("Impossible");
      return 0;
    }
  }
  cout << ans << endl;
  return 0;
}
