#include <bits/stdc++.h>
using namespace std;
const int MAXN = 4e3+10;
const int inf=0x3f3f3f3f;
int n,m;
vector <int> E1[MAXN],E2[MAXN];
vector <pair <int,int> > G[MAXN],E;
int dis[MAXN],vis[MAXN],cnt[MAXN];
void bfs(int s,vector <int> E[],bool F[]) {
    queue <int> Q;
    Q.push(s);
    F[s]=true;
    while(!Q.empty()) {
        int u=Q.front();
        Q.pop();
        for(int v : E[u]) 
            if(!F[v]) {
                F[v]=true;
                Q.push(v);
            }
    }
}
bool A[MAXN],B[MAXN];
bool spfa(int s) {
    for(int i=1;i<=n;i++) 
        dis[i]=inf,vis[i]=0;
    
    queue <int> Q;
    Q.push(s);
    dis[s]=0,vis[s]=1,cnt[s]++;
    
    while(!Q.empty()) {
        int u=Q.front();
        Q.pop();
        vis[u]=0;
        for(auto [v,val] : G[u]) 
            if(dis[v]>dis[u]+val) {
                dis[v]=dis[u]+val;
                if(!vis[v]) {
                    vis[v]=1;
                    Q.push(v);
                    cnt[v]++;
                    if(cnt[v]>n+1) return false;
                }
            }
    }
    return true;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n>>m;
    for(int i=1;i<=m;i++) {
        int u,v;
        cin>>u>>v;
        E.push_back({u,v});
        E1[u].push_back(v);
        E2[v].push_back(u);
    }
    bfs(1,E1,A);
    bfs(n,E2,B);
    if(!A[n]) {
        cout<<-1<<'\n';
        return 0;
    }
    
    for(auto [u,v] : E) {
        if(A[u] && B[v]) 
            G[u].push_back({v,9});
            G[v].push_back({u,-1});
    }
    
    if(!spfa(1)) cout<<-1<<'\n';
    else {
        cout<<n<<" "<<m<<'\n';
        for(auto [u,v] : E) {
            cout<<u<<" "<<v<<" ";
            if(A[u] && B[v]) cout<<dis[v]-dis[u]<<'\n';
            else cout<<1<<'\n';
        }
    }
    
    return 0;
}