//纯自己写的DFS,竟然一遍就成功了

#include <iostream>
#include <queue>
#include <algorithm>
#include <climits>
#include <cstring>
using namespace std;


int father[101];
int height[101];



void Initial()//每个点都作为根节点,高度都为0
{
    for(int i=0;i<101;i++)
    {
        father[i]=i;
        height[i]=0;
    }
}

int Find(int x)
{
    if(x==father[x])return x;
    return Find(father[x]);
}

void Union(int a,int b)
{
    a=Find(a);
    b=Find(b);
    if(a!=b)
    {
        if(height[a]>height[b])father[b]=a;
        else  if(height[a]<height[b])father[a]=b;
        else
         {
            father[b]=a;height[a]++;
         }
    }
}


struct Edge{
    
    int to;
    int length;
    bool operator<(const Edge& edge) const{
        return length<edge.length;
    }
    Edge(int t,int l)
    {
        to=t;
        length=l;
    }
};


bool visit[101];
vector<Edge> graph[101];

int ans;
void DFS(int f,int t,int a)
{
    if(f==t)
    {
        ans=a;
        return ;
    }

    for(int i=0;i<graph[f].size();i++)
    {
        int u=graph[f][i].to;
        int l=graph[f][i].length;
        if(visit[u])continue;
        else
         {
            visit[u]=true;
            DFS(u,t,a+l);
            visit[u]=false;
         }

    }
}




int main() {
    int n,m;
    while (cin >> n>> m) { 
        Initial();
        int d=1;
        for(int i=0;i<m;i++)
        {
            int a,b;cin>>a>>b;
            
            if(Find(a)!=Find(b))
            {
                Union(a,b);
                graph[a].push_back(Edge(b,d));
                graph[b].push_back(Edge(a,d));
            }
            d=d*2;
            d%=100000;
        }

        //已经得到最小生成树,存在了graph里,下面用DFS来找每个点的距离


        for(int i=1;i<n;i++)
        {
            if(Find(i)!=Find(0))
            {
                cout<<"-1"<<endl;
                continue;
            }
            memset(visit,false,sizeof(visit));
            visit[0]=true;

            ans=0;
            DFS(0,i,0);
            cout<<ans%100000<<endl;
            
        }
     
    }
}