#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int LOG = 17;
struct node {
  node *up[LOG];
  int by = -1;
  int len = 0;
  node *go[10];
  vector<int> verts;
  node(node *par, int edge = -1) {
    fill(up, up + LOG, nullptr);
    up[0] = par;
    by = edge;
    for (int i = 1; i < LOG; i++) {
      if (!up[i - 1]) break;
      up[i] = up[i - 1]->up[i - 1];
    }
    if (par) {
      len = par->len + 1;
    }
    fill(go, go + 10, nullptr);
  }
};
bool is_less(const node *a, const node *b) {
  if (!a || !b) return a != nullptr;
  if (a->len != b->len) {
    return a->len < b->len;
  }
  auto v = a, u = b;
  for (int i = LOG - 1; i >= 0; i--) {
    if (v->up[i] == u->up[i]) continue;
    v = v->up[i];
    u = u->up[i];
  }
  return v->by < u->by;
}
node *add(node *n, int edge) {
  int p = 1;
  while (edge / p >= 10) p *= 10;
  while (p) {
    int k = edge / p % 10;
    if (!n->go[k]) {
      n->go[k] = new node(n, k);
    }
    n = n->go[k];
    p /= 10;
  }
  return n;
}
int main() {
  ios::sync_with_stdio(false);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  vector<vector<pair<int, int>>> graph(n + 1);
  vector<bool> used(n + 1);
  vector<node *> in_node(n + 1, nullptr);
  vector<int> ans(n + 1);
  for (int i = 1; i <= m; i++) {
    int u, v;
    cin >> u >> v;
    graph[u].push_back({v, i});
    graph[v].push_back({u, i});
  }
  node *root = new node(nullptr);
  root->verts.push_back(1);
  in_node[1] = root;
  queue<pair<node *, int>> Q;
  Q.push({root, 0});
  while (!Q.empty()) {
    node *n = Q.front().first;
    int path = Q.front().second;
    Q.pop();
    for (int v : n->verts) {
      if (used[v]) continue;
      ans[v] = path;
      used[v] = true;
      for (auto p : graph[v]) {
        int u = p.first;
        node *cur = add(n, p.second);
        if (is_less(cur, in_node[u])) {
          in_node[u] = cur;
          cur->verts.push_back(u);
        }
      }
    }
    for (int i = 0; i < 10; i++) {
      if (n->go[i] == nullptr) continue;
      Q.push({n->go[i], ((long long)path * 10 + i) % MOD});
    }
  }
  for (int i = 2; i <= n; i++) {
    cout << ans[i] << '\n';
  }
}
