/*input
2
a b
a b abcd
a b abc
0
*/
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long int ull;
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define pb push_back
#define mp make_pair
#define pq priority_queue
#define fi first
#define se second
#define INF 0x3f3f3f3f
#define NEGINF 0xC0C0C0C0
#define LINF 0x3f3f3f3f3f3f3f3fLL
#define EPS 1e-10
#define PI 2 * acos(0)
#define NULO -1
#define endl '\n'
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
int cmp(double x, double y = 0, double tol = EPS){ return (x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1; }
map<string, int> mapa;
int idx;
int insere(string s){
if(mapa.find(s)!=mapa.end())return mapa[s];
return mapa[s]=idx++;
}
int main(){
string o,d,a,b,c;
int n,origem, destino;
while(scanf("%d ",&n) and n){
vector< vector<pair<int,string> > > adj(n*2+10,vector<pair<int, string> >());
idx=0;
cin>>o>>d;
mapa.clear();
origem=insere(o);
destino=insere(d);
rep(i,0,n){
cin>>a>>b>>c;
adj[insere(a)].pb(mp(insere(b),c));
adj[insere(b)].pb(mp(insere(a),c));
//cout<<a<<b<<" ";
//printf("%d %d\n",insere(b),insere(a));
}
int dist[4005][26];
rep(i,0,4005)
rep(j,0,26)
dist[i][j]=1<<30;
//memset(dist,1<<30,sizeof dist);
rep(i,0,26)
dist[origem][i]=0;
pq<pair<int,char>,vector<pair<int,char> >, greater<pair<int,char> > > q;
q.push(mp(origem,o[0]));
while(!q.empty()){
pair<int,char> front=q.top(); q.pop();
int v = front.fi;
char cx = front.se;
rep(i,0,adj[v].size()){
pair<int,string> aux = adj[v][i];
int u = aux.fi;
char c = aux.se[0];
if(c == cx) continue;
if(dist[u][c-'a']>=dist[v][cx-'a']+aux.se.size()){
//printf("%d\n",u);
dist[u][c-'a']=dist[v][cx-'a']+aux.se.size();
q.push(mp(u,c));
}
}
}
int ans=1<<30;
rep(i,0,26)
ans=min(ans,dist[destino][i]);
if(ans==1<<30)printf("impossivel\n");
else printf("%d\n",ans);
}
return 0;
}
LyppbnB1dAoyCmEgYgphIGIgYWJjZAphIGIgYWJjCjAKKi8KCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGw7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LGludD4gaWk7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgdmVjdG9yPGlpPiB2aWk7CgojZGVmaW5lIHJlcChpLGEsbikgZm9yIChpbnQgaT1hO2k8bjtpKyspCiNkZWZpbmUgcGVyKGksYSxuKSBmb3IgKGludCBpPW4tMTtpPj1hO2ktLSkKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksKHgpLmVuZCgpCiNkZWZpbmUgc3ooeCkgKChpbnQpKHgpLnNpemUoKSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwcSBwcmlvcml0eV9xdWV1ZQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgSU5GICAgIDB4M2YzZjNmM2YKI2RlZmluZSBORUdJTkYgMHhDMEMwQzBDMAojZGVmaW5lIExJTkYgICAweDNmM2YzZjNmM2YzZjNmM2ZMTAojZGVmaW5lIEVQUyAxZS0xMAojZGVmaW5lIFBJIDIgKiBhY29zKDApCiNkZWZpbmUgTlVMTyAtMQojZGVmaW5lIGVuZGwgJ1xuJwoKY29uc3QgbGwgbW9kPTEwMDAwMDAwMDc7CmxsIHBvd21vZChsbCBhLGxsIGIpIHtsbCByZXM9MTthJT1tb2Q7IGFzc2VydChiPj0wKTsgZm9yKDtiO2I+Pj0xKXtpZihiJjEpcmVzPXJlcyphJW1vZDthPWEqYSVtb2Q7fXJldHVybiByZXM7fQoKaW50IGNtcChkb3VibGUgeCwgZG91YmxlIHkgPSAwLCBkb3VibGUgdG9sID0gRVBTKXsgcmV0dXJuICh4IDw9IHkgKyB0b2wpID8gKHggKyB0b2wgPCB5KSA/IC0xIDogMCA6IDE7IH0KCm1hcDxzdHJpbmcsIGludD4gbWFwYTsKaW50IGlkeDsKCmludCBpbnNlcmUoc3RyaW5nIHMpewoJaWYobWFwYS5maW5kKHMpIT1tYXBhLmVuZCgpKXJldHVybiBtYXBhW3NdOwoJcmV0dXJuIG1hcGFbc109aWR4Kys7Cn0KCmludCBtYWluKCl7CglzdHJpbmcgbyxkLGEsYixjOwoJaW50IG4sb3JpZ2VtLCBkZXN0aW5vOwoJd2hpbGUoc2NhbmYoIiVkICIsJm4pIGFuZCBuKXsKCQl2ZWN0b3I8IHZlY3RvcjxwYWlyPGludCxzdHJpbmc+ID4gPiBhZGoobioyKzEwLHZlY3RvcjxwYWlyPGludCwgc3RyaW5nPiA+KCkpOwoJCWlkeD0wOwoJCWNpbj4+bz4+ZDsKCQltYXBhLmNsZWFyKCk7CgkJb3JpZ2VtPWluc2VyZShvKTsKCQlkZXN0aW5vPWluc2VyZShkKTsKCQlyZXAoaSwwLG4pewoJCQljaW4+PmE+PmI+PmM7CgkJCWFkaltpbnNlcmUoYSldLnBiKG1wKGluc2VyZShiKSxjKSk7CgkJCWFkaltpbnNlcmUoYildLnBiKG1wKGluc2VyZShhKSxjKSk7CgkJCS8vY291dDw8YTw8Yjw8IiAiOwoJCQkvL3ByaW50ZigiJWQgJWRcbiIsaW5zZXJlKGIpLGluc2VyZShhKSk7CgkJfQoKCQlpbnQgZGlzdFs0MDA1XVsyNl07CgkJcmVwKGksMCw0MDA1KQoJCQlyZXAoaiwwLDI2KQoJCQkJZGlzdFtpXVtqXT0xPDwzMDsKCQkvL21lbXNldChkaXN0LDE8PDMwLHNpemVvZiBkaXN0KTsKCQlyZXAoaSwwLDI2KQoJCQlkaXN0W29yaWdlbV1baV09MDsJCgkJcHE8cGFpcjxpbnQsY2hhcj4sdmVjdG9yPHBhaXI8aW50LGNoYXI+ID4sIGdyZWF0ZXI8cGFpcjxpbnQsY2hhcj4gPiA+IHE7CgkJcS5wdXNoKG1wKG9yaWdlbSxvWzBdKSk7CgkJd2hpbGUoIXEuZW1wdHkoKSl7CgkJCXBhaXI8aW50LGNoYXI+IGZyb250PXEudG9wKCk7IHEucG9wKCk7CgkJCWludCB2ID0gZnJvbnQuZmk7CgkJCWNoYXIgY3ggPSBmcm9udC5zZTsKCQkJcmVwKGksMCxhZGpbdl0uc2l6ZSgpKXsKCQkJCXBhaXI8aW50LHN0cmluZz4gYXV4ID0gYWRqW3ZdW2ldOwoJCQkJaW50IHUgPSBhdXguZmk7CgkJCQljaGFyIGMgPSBhdXguc2VbMF07CgkJCQlpZihjID09IGN4KSBjb250aW51ZTsKCQkJCWlmKGRpc3RbdV1bYy0nYSddPj1kaXN0W3ZdW2N4LSdhJ10rYXV4LnNlLnNpemUoKSl7CgkJCQkJLy9wcmludGYoIiVkXG4iLHUpOwoJCQkJCWRpc3RbdV1bYy0nYSddPWRpc3Rbdl1bY3gtJ2EnXSthdXguc2Uuc2l6ZSgpOwoJCQkJCXEucHVzaChtcCh1LGMpKTsKCQkJCX0KCQkJfQoJCX0KCQlpbnQgYW5zPTE8PDMwOwoJCXJlcChpLDAsMjYpCgkJCWFucz1taW4oYW5zLGRpc3RbZGVzdGlub11baV0pOwoJCWlmKGFucz09MTw8MzApcHJpbnRmKCJpbXBvc3NpdmVsXG4iKTsKCQllbHNlIHByaW50ZigiJWRcbiIsYW5zKTsJCgl9CgkJCgoKcmV0dXJuIDA7Cn0=