#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
void InitGraph( int n ,int **Graph) {
for( int i = 1; i <= n; i++ )
for( int j = 1; j <= n; j++ )
Graph[i][j] = 0;
}
void InsertEdge( int i, int j ,int **Graph) {
Graph[i][j] = 1;
Graph[j][i] = 1;
}
double BFS( int curNode, int n ,int **Graph, int* visit) {
queue<int> visNode;
visit[curNode] = 1;
visNode.push( curNode );
int count = 1;
for( int level = 0; level < 6; level++ ) {
vector<int> vec;
while( !visNode.empty() ) {
int node = visNode.front();
vec.push_back( node );
visNode.pop();
}
for( int i = 0; i < vec.size(); i++ ) {
int node = vec[i];
for( int i = 1; i <= n; i++ ) {
if( !visit[i] && Graph[node][i] == 1 ) {
visNode.push( i );
visit[i] = 1;
count++;
}
}
}
}
double rate = (double)count / (double)n;
return rate * 100.0;
}
int main() {
int nodenum, routenum;
cin>>nodenum>>routenum;
int *visit = new int [nodenum+1];
int **Graph = new int* [nodenum+1];
for (int i = 1; i <= nodenum; i++)
{
Graph[i] = new int[nodenum+1];
}
InitGraph(nodenum, Graph);
int a, b;
for( int i = 0; i < routenum; i++ ) {
cin>>a>>b;
InsertEdge( a, b ,Graph);
}
for( int i = 1; i <= nodenum; i++ ) {
memset(visit, 0, sizeof(visit[0])*(nodenum+1));
double r = BFS(i, nodenum ,Graph, visit);
printf("%d: %.2lf%%\n", i, r);
}
return 0;
}