#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int ret = 0, f = 0;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = 1;
    c = getchar();
  }
  while (isdigit(c)) {
    ret = ret * 10 + c - 48;
    c = getchar();
  }
  if (f) return -ret;
  return ret;
}
const int N = 1e6 + 5;
const int mod = 1e9 + 7;
int n, m, cnt, h, t, dis[N];
vector<int> E[N][10], Q[N];
void add(int u, int v, int w) {
  int ls = v;
  for (; w >= 10; w /= 10) E[++cnt][w % 10].push_back(ls), ls = cnt;
  E[u][w].push_back(ls);
}
void bfs(int s) {
  for (int i = 1; i <= cnt; i++) dis[i] = mod;
  h = 0, t = 1, Q[t].push_back(s), dis[s] = 0;
  while (h < t) {
    vector<int>& u = Q[++h];
    for (int i = 0; i < 10; i++) {
      ++t;
      for (int j = 0; j < u.size(); j++) {
        int p = u[j];
        for (int k = 0; k < E[p][i].size(); k++) {
          int v = E[p][i][k];
          if (dis[v] == mod) {
            dis[v] = (1ll * 10 * dis[p] + i) % mod;
            Q[t].push_back(v);
          }
        }
      }
      if (!Q[t].size()) t--;
    }
  }
}
signed main() {
  n = read(), m = read(), cnt = n;
  for (int i = 1; i <= m; i++) {
    int x = read(), y = read();
    add(x, y, i), add(y, x, i);
  }
  bfs(1);
  for (int i = 2; i <= n; i++) printf("%d\n", dis[i]);
}
