#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
#define FastIO ios::sync_with_stdio(false)
#define read freopen("in.in","r",stdin)
#define write freopen("out.out","w",stdout)
typedef long long ll;
const int N = 2e5 + 5;
const int MOD = 1e9 + 7;
typedef pair<ll, ll> ii;
typedef long long ll;
double ebs = 1e-9;
vector<vector<pair<int, char>>>adjlist;
int vis[N], level[N], parent[N];
string lex[N];
struct Compare {
bool operator()(pair<string, int> const& p1, pair<string, int> const& p2)
{
if (p1.first.length() == p2.first.length())
return p1.first > p2.first;
return p1.first.length() > p2.first.length();
}
};
void bfs(int source, int dis) {
vis[source] = 1;
level[source] = 0;
lex[source] = "";
priority_queue< pair<string, int>, vector<pair<string, int>>, Compare>q;
q.push(make_pair("", source));
while (!q.empty()) {
int node = q.top().second;
q.pop();
if (node == dis)break;
for (int i = 0; i < adjlist[node].size(); i++)
{
int child = adjlist[node][i].first;
if (!vis[child]) {
parent[child] = node;
level[child] = level[node] + 1;
lex[child] = lex[node] + adjlist[node][i].second;
vis[child] = 1;
q.push(make_pair(lex[child], child));
}
}
}
}
void print(int dis) {
vector<int>res;
int node = dis;
while (node != -1) {
res.push_back(node);
node = parent[node];
}
if (res[0] == dis && res[res.size() - 1] == 1) {
for (int i = res.size() - 1; i >= 0; i--)
cout << res[i] << " ";
cout << endl;
}
else
cout << -1 << endl;
}
int main() {
FastIO;
#ifndef ONLINE_JUDGE
write; read;
#endif
int n, m; cin >> n >> m;
adjlist.resize(n + 1);
memset(parent, -1, sizeof parent);
memset(vis, 0, sizeof vis);
memset(level, 0, sizeof level);
for (int i = 0; i < n; i++)
lex[i] = "";
int a, b;
char c;
for (int i = 0; i < m; i++)
{
cin >> a >> b >> c;
adjlist[a].push_back({ b,c });
adjlist[b].push_back({ a,c });
}
bfs(1, n);
cout << level[n] << endl;
print(n);
cout << lex[n] << endl;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIEZhc3RJTyBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSkKI2RlZmluZSByZWFkIGZyZW9wZW4oImluLmluIiwiciIsc3RkaW4pCiNkZWZpbmUgd3JpdGUgZnJlb3Blbigib3V0Lm91dCIsInciLHN0ZG91dCkKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmNvbnN0IGludCBOID0gMmU1ICsgNTsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IGlpOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKZG91YmxlIGVicyA9IDFlLTk7CnZlY3Rvcjx2ZWN0b3I8cGFpcjxpbnQsIGNoYXI+Pj5hZGpsaXN0OwppbnQgdmlzW05dLCBsZXZlbFtOXSwgcGFyZW50W05dOwpzdHJpbmcgbGV4W05dOwpzdHJ1Y3QgQ29tcGFyZSB7Cglib29sIG9wZXJhdG9yKCkocGFpcjxzdHJpbmcsIGludD4gY29uc3QmIHAxLCBwYWlyPHN0cmluZywgaW50PiBjb25zdCYgcDIpCgl7CgkJaWYgKHAxLmZpcnN0Lmxlbmd0aCgpID09IHAyLmZpcnN0Lmxlbmd0aCgpKQoJCQlyZXR1cm4gcDEuZmlyc3QgPiBwMi5maXJzdDsKCQlyZXR1cm4gcDEuZmlyc3QubGVuZ3RoKCkgPiBwMi5maXJzdC5sZW5ndGgoKTsKCX0KfTsKdm9pZCBiZnMoaW50IHNvdXJjZSwgaW50IGRpcykgewoJdmlzW3NvdXJjZV0gPSAxOwoJbGV2ZWxbc291cmNlXSA9IDA7CglsZXhbc291cmNlXSA9ICIiOwoJcHJpb3JpdHlfcXVldWU8IHBhaXI8c3RyaW5nLCBpbnQ+LCB2ZWN0b3I8cGFpcjxzdHJpbmcsIGludD4+LCBDb21wYXJlPnE7CglxLnB1c2gobWFrZV9wYWlyKCIiLCBzb3VyY2UpKTsKCXdoaWxlICghcS5lbXB0eSgpKSB7CgkJaW50IG5vZGUgPSBxLnRvcCgpLnNlY29uZDsKCQlxLnBvcCgpOwoKCQlpZiAobm9kZSA9PSBkaXMpYnJlYWs7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBhZGpsaXN0W25vZGVdLnNpemUoKTsgaSsrKQoJCXsKCQkJaW50IGNoaWxkID0gYWRqbGlzdFtub2RlXVtpXS5maXJzdDsKCQkJaWYgKCF2aXNbY2hpbGRdKSB7CgkJCQlwYXJlbnRbY2hpbGRdID0gbm9kZTsKCQkJCWxldmVsW2NoaWxkXSA9IGxldmVsW25vZGVdICsgMTsKCQkJCWxleFtjaGlsZF0gPSBsZXhbbm9kZV0gKyBhZGpsaXN0W25vZGVdW2ldLnNlY29uZDsKCQkJCXZpc1tjaGlsZF0gPSAxOwoJCQkJcS5wdXNoKG1ha2VfcGFpcihsZXhbY2hpbGRdLCBjaGlsZCkpOwoJCQl9CgkJfQoJfQp9CnZvaWQgcHJpbnQoaW50IGRpcykgewoJdmVjdG9yPGludD5yZXM7CglpbnQgbm9kZSA9IGRpczsKCXdoaWxlIChub2RlICE9IC0xKSB7CgkJcmVzLnB1c2hfYmFjayhub2RlKTsKCQlub2RlID0gcGFyZW50W25vZGVdOwoJfQoJaWYgKHJlc1swXSA9PSBkaXMgJiYgcmVzW3Jlcy5zaXplKCkgLSAxXSA9PSAxKSB7CgkJZm9yIChpbnQgaSA9IHJlcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKCQkJY291dCA8PCByZXNbaV0gPDwgIiAiOwoJCWNvdXQgPDwgZW5kbDsKCX0KCWVsc2UKCQljb3V0IDw8IC0xIDw8IGVuZGw7Cn0KaW50IG1haW4oKSB7CglGYXN0SU87CiNpZm5kZWYgT05MSU5FX0pVREdFCgl3cml0ZTsgcmVhZDsKI2VuZGlmIAoJaW50IG4sIG07IGNpbiA+PiBuID4+IG07CglhZGpsaXN0LnJlc2l6ZShuICsgMSk7CgltZW1zZXQocGFyZW50LCAtMSwgc2l6ZW9mIHBhcmVudCk7CgltZW1zZXQodmlzLCAwLCBzaXplb2YgdmlzKTsKCW1lbXNldChsZXZlbCwgMCwgc2l6ZW9mIGxldmVsKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJCWxleFtpXSA9ICIiOwoJaW50IGEsIGI7CgljaGFyIGM7Cglmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykKCXsKCQljaW4gPj4gYSA+PiBiID4+IGM7CgkJYWRqbGlzdFthXS5wdXNoX2JhY2soeyBiLGMgfSk7CgkJYWRqbGlzdFtiXS5wdXNoX2JhY2soeyBhLGMgfSk7Cgl9CgliZnMoMSwgbik7Cgljb3V0IDw8IGxldmVsW25dIDw8IGVuZGw7CglwcmludChuKTsKCWNvdXQgPDwgbGV4W25dIDw8IGVuZGw7Cgp9