#include <bits/stdc++.h>
using namespace std;
int n, m, cnt;
int bits[4000005];
int h[4000005], nxt[4000005], to[4000005], w[4000005], tot;
inline void ins(int x, int y, int z) {
  nxt[++tot] = h[x];
  to[tot] = y;
  w[tot] = z;
  h[x] = tot;
}
int vis[4000005], dis[4000005], que[4000005], l, r;
priority_queue<pair<int, pair<int, int> >, vector<pair<int, pair<int, int> > >,
               greater<pair<int, pair<int, int> > > >
    pq;
int id[4000005], iid[4000005], cs, qwq, ddis[4000005];
int val[4000005];
int main() {
  scanf("%d%d", &n, &m), cnt = n;
  for (int i = 1; i <= (m); ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    bits[i] = bits[i / 10] + 1;
    int s[8], I = i, t = 0;
    while (I) s[++t] = I % 10, I /= 10;
    int lst = x;
    for (int j = t; j >= (1); --j) {
      int nxt = j > 1 ? ++cnt : y;
      ins(lst, nxt, s[j]);
      lst = nxt;
    }
    lst = y;
    for (int j = t; j >= (1); --j) {
      int nxt = j > 1 ? ++cnt : x;
      ins(lst, nxt, s[j]);
      lst = nxt;
    }
  }
  que[l = r = 1] = 1, vis[1] = 1, dis[1] = 0;
  while (l <= r) {
    int u = que[l++];
    for (int i = h[u]; i; i = nxt[i])
      if (!vis[to[i]])
        vis[to[i]] = 1, dis[to[i]] = dis[u] + 1, que[++r] = to[i];
  }
  for (int i = 1; i <= (cnt); ++i) vis[i] = 0;
  pq.push(pair<int, pair<int, int> >(0, pair<int, int>(0, 1)));
  while (!pq.empty()) {
    pair<int, pair<int, int> > p = pq.top();
    pq.pop();
    int u = p.second.second, faz = p.second.first, d = p.first;
    if (vis[u]) continue;
    vis[u] = 1, val[u] = (val[faz] * 10ll + d % 10) % 1000000007;
    if (!qwq)
      id[u] = cs = 1, iid[qwq = 1] = u;
    else {
      int uu = iid[qwq];
      if (d > ddis[uu]) ++cs;
      id[u] = cs, iid[++qwq] = u;
    }
    for (int i = h[u]; i; i = nxt[i]) {
      int v = to[i];
      if (dis[v] != dis[u] + 1) continue;
      if (!ddis[v] || ddis[v] > id[u] * 10 + w[i]) {
        ddis[v] = id[u] * 10 + w[i];
        pq.push(pair<int, pair<int, int> >(ddis[v], pair<int, int>(u, v)));
      }
    }
  }
  for (int i = 2; i <= n; ++i) printf("%d\n", val[i]);
  return 0;
}
