1 #include<cmath>
2 #include<queue>
3 #include<cstdio>
4 #include<cstring>
5 #include<iostream>
6 #include<algorithm>
7 #define MAXN 300005
8 #define MAXM 400010
9 #define P 100003
10
11 using namespace std;
12
13 int dis[MAXN];
14 int ans[MAXN];
15 int INQ[MAXN];
16 int head[MAXN];
17 int n,m,cnt;
18
19 queue<int>Q;
20
21 struct edge
22 {
23 int to,next;
24 }edge[MAXM];
25
26 inline void add(int u,int v)
27 {
28 edge[++cnt].to=v;
29 edge[cnt].next=head[u];
30 head[u]=cnt;
31 }
32
33 inline void SPFA()
34 {
35 memset(INQ,0,sizeof(INQ)); memset(ans,0,sizeof(ans));
36 Q.push(1); INQ[1]=1; ans[1]=1; dis[1]=0;
37 while(!Q.empty())
38 {
39 int u=Q.front(); Q.pop(); INQ[u]=0;
40 for (int i=head[u];i;i=edge[i].next)
41 {
42 int v=edge[i].to;
43 if (dis[v]>dis[u]+1)
44 {
45 dis[v]=dis[u]+1;
46 ans[v]=ans[u];
47 if (!INQ[v])
48 {
49 Q.push(v);
50 INQ[v]=1;
51 }
52 }
53 else if (dis[v]==dis[u]+1) ans[v]=(ans[v]+ans[u])%P;
54 }
55 } return ;
56 }
57
58 inline void solve()
59 {
60 memset(head,0,sizeof(head)); memset(dis,0x7f,sizeof(dis));
61 scanf("%d%d",&n,&m); cnt=0;
62 for (int i=1,x,y;i<=m;i++) scanf("%d%d",&x,&y),add(x,y),add(y,x);
63 SPFA(); for (int i=1;i<=n;i++) printf("%d\n",ans[i]); return ;
64 }
65
66 int main()
67 {
68 solve();
69 return 0;
70 }