#include <iostream>#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <cstdlib>#include <queue>#include <vector>#define mp make_pair#define pa pair<int,int>#define fi first#define se second#define inf 0x3f3f3f3f#define M 2005#define pb push_back
using namespace std;
vector<int> q[M][M];
int from[M][2],d[M][2],cnt[M][M];
struct data
{
int v,k;
};
int tot,v[M],ans[M],inq[M],n,m,D[M],a[M][M],h[M];
struct edge
{
int y,ne;
}e[M*100];
void Addedge(int x,int y)
{
e[++tot].y=y; e[tot].ne=h[x]; h[x]=tot;
}
void bfs(int s)
{
for (int i=1;i<=n;i++) from[i][0]=from[i][1]=-1; d[s][0]=d[s][1]=from[s][1]=from[s][0]=0; queue<pa> q; for (int i=h[s];i;i=e[i].ne) { int y=e[i].y; from[y][0]=y; d[y][0]=1; q.push(mp(y,0)); } while (!q.empty()) { pa x=q.front(); q.pop(); for (int i=h[x.fi];i;i=e[i].ne) { int y=e[i].y; if (from[y][0]==-1) { from[y][0]=from[x.fi][x.se]; d[y][0]=d[x.fi][x.se]+1; q.push(mp(y,0)); } else if (from[y][1]==-1&&!a[y][s]&&from[y][0]!=from[x.fi][x.se]) { from[y][1]=from[x.fi][x.se]; d[y][1]=d[x.fi][x.se]+1; q.push(mp(y,1)); } } } for (int i=h[s];i;i=e[i].ne) { int y=e[i].y; for (int j=h[y];j;j=e[j].ne) if (e[j].y!=s&&from[e[j].y][0]==y) ans[y]+=(d[e[j].y][1]-d[e[j].y][0]); }
}
void Prepare()
{
for (int i=1;i<=n;i++) for (int j=h[i];j;j=e[j].ne) for (int k=h[i];k;k=e[k].ne) if (e[j].y!=e[k].y) cnt[e[j].y][e[k].y]++;
}
int main()
{
scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); Addedge(x,y); Addedge(y,x); a[x][y]=a[y][x]=1; } Prepare(); for (int i=1;i<=n;i++) if (count(cnt[i]+1,cnt[i]+1+n,1)) bfs(i); for (int i=1;i<=n;i++) printf("%d\n",ans[i]/2); return 0;
}