#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;   }   