#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
const int MOD = 1e9 + 7;
int dp[MAXN * 10], tot;
bool vis[MAXN * 10];
vector<int> E[MAXN * 10][10], tmp;
void add(int u, int v, int i) {
  tmp.clear();
  while (i) {
    tmp.push_back(i % 10);
    i /= 10;
  }
  reverse(tmp.begin(), tmp.end());
  int sz = tmp.size();
  int last = u;
  for (int i = 0; i < sz; i++) {
    int id = (i == sz - 1) ? v : ++tot;
    E[last][tmp[i]].push_back(id);
    last = id;
  }
}
vector<int> Q[MAXN * 10];
void bfs() {
  int t = 0;
  Q[t++].push_back(1);
  vis[1] = true;
  for (int i = 0; i < t; i++) {
    for (int j = 0; j < 10; j++) {
      bool ex = false;
      for (int u : Q[i]) {
        for (int v : E[u][j]) {
          if (!vis[v]) {
            ex = true;
            vis[v] = true;
            Q[t].push_back(v);
            dp[v] = (10LL * dp[u] + j) % MOD;
          }
        }
      }
      if (ex) t++;
    }
  }
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  tot = n;
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    add(u, v, i);
    add(v, u, i);
  }
  bfs();
  for (int i = 2; i <= n; i++) printf("%d\n", dp[i]);
  return 0;
}
