/// Construct a palindrome Atcoder
/// Author: PmQwerty
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int MAXN = 1010;
const int INF = 1e9;
int n, m;
int dist[MAXN][MAXN];
vector<pair<int, char>> a[MAXN];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= m; i++){
int u, v;
char c;
cin >> u >> v >> c;
a[u].push_back({v, c});
a[v].push_back({u, c});
}
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
dist[i][j] = INF;
}
}
queue<pair<int, int>> f;
for (int u = 1; u <= n; u++){
f.push({u, u});
dist[u][u] = 0;
for (pair<int, char> v: a[u]){
if (dist[u][v.fi] == INF){
dist[u][v.fi] = dist[v.fi][u] = 1;
f.push({u, v.fi});
}
}
}
bool check = false;
while (!f.empty()){
pair<int, int> cur = f.front();
f.pop();
if ((cur.fi == 1 && cur.se == n) || (cur.se == 1 && cur.fi == n)){
check = true;
break;
}
int p = dist[cur.fi][cur.se] + 2;
for (pair<int, char> v1: a[cur.fi]){
for (pair<int, char> v2: a[cur.se]){
if (v1.se == v2.se && p < dist[v1.fi][v2.fi]){
dist[v1.fi][v2.fi] = dist[v2.fi][v1.fi] = p;
f.push({v1.fi, v2.fi});
}
}
}
}
cout << (check ? dist[1][n] : -1) << '\n';
}
Ly8vIENvbnN0cnVjdCBhIHBhbGluZHJvbWUgQXRjb2RlcgovLy8gQXV0aG9yOiBQbVF3ZXJ0eQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNQVhOID0gMTAxMDsKY29uc3QgaW50IElORiA9IDFlOTsKaW50IG4sIG07CmludCBkaXN0W01BWE5dW01BWE5dOwp2ZWN0b3I8cGFpcjxpbnQsIGNoYXI+PiBhW01BWE5dOwppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKXsKICAgICAgICAgaW50IHUsIHY7CiAgICAgICAgIGNoYXIgYzsKICAgICAgICAgY2luID4+IHUgPj4gdiA+PiBjOwogICAgICAgICBhW3VdLnB1c2hfYmFjayh7diwgY30pOwogICAgICAgICBhW3ZdLnB1c2hfYmFjayh7dSwgY30pOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKXsKICAgICAgICAgICAgICBkaXN0W2ldW2pdID0gSU5GOwogICAgICAgICB9CiAgICB9CiAgICBxdWV1ZTxwYWlyPGludCwgaW50Pj4gZjsKICAgIGZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKyl7CiAgICAgICAgZi5wdXNoKHt1LCB1fSk7CiAgICAgICAgZGlzdFt1XVt1XSA9IDA7CiAgICAgICAgZm9yIChwYWlyPGludCwgY2hhcj4gdjogYVt1XSl7CiAgICAgICAgICAgICBpZiAoZGlzdFt1XVt2LmZpXSA9PSBJTkYpewogICAgICAgICAgICAgICAgIGRpc3RbdV1bdi5maV0gPSBkaXN0W3YuZmldW3VdID0gMTsKICAgICAgICAgICAgICAgICBmLnB1c2goe3UsIHYuZml9KTsKICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBib29sIGNoZWNrID0gZmFsc2U7CiAgICB3aGlsZSAoIWYuZW1wdHkoKSl7CiAgICAgICAgIHBhaXI8aW50LCBpbnQ+IGN1ciA9IGYuZnJvbnQoKTsKICAgICAgICAgZi5wb3AoKTsKICAgICAgICAgaWYgKChjdXIuZmkgPT0gMSAmJiBjdXIuc2UgPT0gbikgfHwgKGN1ci5zZSA9PSAxICYmIGN1ci5maSA9PSBuKSl7CiAgICAgICAgICAgICBjaGVjayA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpbnQgcCA9IGRpc3RbY3VyLmZpXVtjdXIuc2VdICsgMjsKICAgICAgICAgZm9yIChwYWlyPGludCwgY2hhcj4gdjE6IGFbY3VyLmZpXSl7CiAgICAgICAgICAgICAgZm9yIChwYWlyPGludCwgY2hhcj4gdjI6IGFbY3VyLnNlXSl7CiAgICAgICAgICAgICAgICAgICBpZiAodjEuc2UgPT0gdjIuc2UgJiYgcCA8IGRpc3RbdjEuZmldW3YyLmZpXSl7CiAgICAgICAgICAgICAgICAgICAgICAgZGlzdFt2MS5maV1bdjIuZmldID0gZGlzdFt2Mi5maV1bdjEuZmldID0gcDsKICAgICAgICAgICAgICAgICAgICAgICBmLnB1c2goe3YxLmZpLCB2Mi5maX0pOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgfQogICAgY291dCA8PCAoY2hlY2sgPyBkaXN0WzFdW25dIDogLTEpIDw8ICdcbic7Cn0K