#include <iostream> #include <vector> #include <climits> using namespace std; vector<int> parents; int find(int x) { return x == parents[x] ? x : parents[x] = find(parents[x]); } int main() { int n, m; cin >> n >> m; parents.resize(n); for (int i = 0; i < n; i++) parents[i] = i; vector<vector<int>> grid(n, vector<int>(n, INT_MAX)); for (int i = 0, len = 1; i < m; i++, len = len * 2 % 100000) { int a, b; cin >> a >> b; if (find(a) != find(b)) { parents[find(a)] = find(b); grid[a][b] = grid[b][a] = len; } } for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (grid[i][k] != INT_MAX && grid[k][j] != INT_MAX &&grid[i][k] + grid[k][j] < grid[i][j]) grid[i][j] =grid[i][k] +grid[k][j]; } } } for (int i = 1; i < n; i++) { if (grid[0][i] == INT_MAX) cout << -1 << endl; else cout << grid[0][i] % 100000 << endl; } return 0; }