#include <bits/stdc++.h>
#define pb push_back
#define pii pair<int,int>
#define fi first
#define int long long
#define se second
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define TXT "color3"
#define endl cout<<"\n";
#define freo if(fopen(TXT".inp","r")){freopen(TXT".inp","r",stdin); freopen(TXT".out","w",stdout);} ///TEMPLATE MADE BY NIETTRAAN
using namespace std;
const int MXN = 1005;
vector<int> adj[MXN];
string orig, res;
int n, m;
bool vis[MXN];
vector<int> comp;
bool bfs_component(int start) {
comp.clear();
queue<int> q;
q.push(start);
vis[start] = 1;
comp.pb(start);
while(!q.empty()) {
int u = q.front(); q.pop();
for(int v : adj[u]) {
if(!vis[v]) {
vis[v] = 1;
q.push(v);
comp.pb(v);
}
}
}
// thử 3 màu gốc
for(char startColor : {'R','G','B'}) {
if (startColor == orig[start]) continue; // phải khác màu cũ
map<int,char> color;
queue<int> qq;
qq.push(start);
color[start] = startColor;
bool ok = true;
while(!qq.empty() && ok) {
int u = qq.front(); qq.pop();
for(int v : adj[u]) {
if(color.count(v)) {
if(color[v] == color[u]) {ok=false; break;}
} else {
// tìm màu cho v khác color[u] và khác orig[v]
bool found = false;
for(char c : {'R','G','B'}) {
if(c != color[u] && c != orig[v]) {
color[v] = c;
found = true;
break;
}
}
if(!found){ok=false; break;}
qq.push(v);
}
}
}
if(ok) {
for(auto &x : color) res[x.fi] = x.se;
return true;
}
}
return false;
}
void solve() {
cin >> n >> m;
cin >> orig;
orig = " " + orig;
res.resize(n+1,' ');
for(int i=1;i<=m;i++){
int u,v;cin>>u>>v;
adj[u].pb(v);
adj[v].pb(u);
}
for(int i=1;i<=n;i++){
if(!vis[i]){
if(!bfs_component(i)){
cout << "Impossible\n";
return;
}
}
}
for(int i=1;i<=n;i++) cout << res[i];
cout << "\n";
}
int32_t main(){
ios;
freo;
solve();
return 0;
}