#include <bits/stdc++.h>
using namespace std;
#define TASK "FILE"
#define ll long long
#define endl '\n'
#define el cout << '\n'
#define pii pair<int, int>
#define pll pair<ll, ll>
#define fi first
#define se second
#define pb push_back
#define SZ(v) (int)((v).size())
#define ms(A, n) memset((A), (n), sizeof((A)))
#define ALL(v) (v).begin(), (v).end()
#define FOR(i, a, b) for(int i = (a); i <= (b); i++)
#define FORD(i, a, b) for(int i = (a); i >= (b); i--)
#define FORX(x, v) for(auto x : (v))
#define MASK(x) (1 << (x))
#define BIT(i, x) (((x) >> (i)) & 1)
#define _TANHNV_ signed main()
template <class X, class Y>
bool maximize(X &x, const Y &y){
return (x < y) ? (x = y), 1 : 0;
}
template <class X, class Y>
bool minimize(X &x, const Y &y){
return (x > y) ? (x = y), 1 : 0;
}
const int maxn = 1e6 + 5;
const ll MOD = 1e9 + 7;
const int inf = 2e9;
const ll INF = 2e18;
const int LOG = 19;
/* END OF TEMPLATE */
int n, m;
vector<pii> adj[maxn];
struct edge{int u, v, id;};
pii canh[maxn];
vector<pii> Amst[maxn];
bool in[maxn];
int h[maxn];
pii par[maxn];
int ans[maxn];
struct DSU{
int n;
vector<int> root;
void init(int _n = 0){
n = _n;
root.assign(n + 2, 0);
FOR(u, 1, n){
root[u] = u;
}
}
int getRoot(int u){return (u == root[u]) ? u : root[u] = getRoot(root[u]);}
bool unite(int u, int v){
u = getRoot(u);
v = getRoot(v);
if(u == v) return 0;
if(h[u] > h[v]) swap(u, v);
root[v] = u;
return 1;
}
} dsu;
void dfs(int u, int p){
FORX(e, Amst[u]){
int v = e.fi, id = e.se;
if(v == p) continue;
h[v] = h[u] + 1;
par[v] = {u, id};
dfs(v, u);
}
}
void inp(){
cin >> n >> m;
FOR(i, 1, m){
int u, v; cin >> u >> v;
if(u > v) swap(u, v);
canh[i] = {u, v};
}
}
void sol(){
dsu.init(n);
FOR(id, 1, m){
int u = canh[id].fi, v = canh[id].se;
if(dsu.unite(u, v)){
in[id] = 1;
Amst[u].pb({v, id});
Amst[v].pb({u, id});
}
}
dfs(1, 1);
DSU cc;
cc.init(n);
FOR(id, 1, m){
int u = canh[id].fi, v = canh[id].se;
if(!in[id]){
ans[id] = id;
int ru = cc.getRoot(u), rv = cc.getRoot(v);
while(ru != rv){
if(h[ru] > h[rv]) swap(ru, rv);
cc.unite(par[rv].fi, rv);
ans[par[rv].se] = id;
rv = cc.getRoot(rv);
}
}
}
FOR(i, 1, m) cout << ((ans[i] == 0) ? -1 : ans[i]) << " ";
}
_TANHNV_{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(TASK".inp", "r")){
freopen(TASK".inp", "r", stdin);
freopen(TASK".out", "w", stdout);
}
inp();
sol();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgVEFTSyAiRklMRSIKCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgZWwgY291dCA8PCAnXG4nCiNkZWZpbmUgcGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgcGxsIHBhaXI8bGwsIGxsPgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgU1oodikgKGludCkoKHYpLnNpemUoKSkgCiNkZWZpbmUgbXMoQSwgbikgbWVtc2V0KChBKSwgKG4pLCBzaXplb2YoKEEpKSkKI2RlZmluZSBBTEwodikgKHYpLmJlZ2luKCksICh2KS5lbmQoKQojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IoaW50IGkgPSAoYSk7IGkgPD0gKGIpOyBpKyspCiNkZWZpbmUgRk9SRChpLCBhLCBiKSBmb3IoaW50IGkgPSAoYSk7IGkgPj0gKGIpOyBpLS0pCiNkZWZpbmUgRk9SWCh4LCB2KSBmb3IoYXV0byB4IDogKHYpKQoKI2RlZmluZSBNQVNLKHgpICgxIDw8ICh4KSkKI2RlZmluZSBCSVQoaSwgeCkgKCgoeCkgPj4gKGkpKSAmIDEpCiNkZWZpbmUgX1RBTkhOVl8gc2lnbmVkIG1haW4oKQoKdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFk+CmJvb2wgbWF4aW1pemUoWCAmeCwgY29uc3QgWSAmeSl7CiAgICByZXR1cm4gKHggPCB5KSA/ICh4ID0geSksIDEgOiAwOyAKfQp0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4KYm9vbCBtaW5pbWl6ZShYICZ4LCBjb25zdCBZICZ5KXsKICAgIHJldHVybiAoeCA+IHkpID8gKHggPSB5KSwgMSA6IDA7IAp9Cgpjb25zdCBpbnQgbWF4biA9IDFlNiArIDU7CmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBpbmYgPSAyZTk7CmNvbnN0IGxsIElORiA9IDJlMTg7CmNvbnN0IGludCBMT0cgPSAxOTsKCi8qIEVORCBPRiBURU1QTEFURSAqLwoKaW50IG4sIG07CnZlY3RvcjxwaWk+IGFkalttYXhuXTsKc3RydWN0IGVkZ2V7aW50IHUsIHYsIGlkO307CnBpaSBjYW5oW21heG5dOwp2ZWN0b3I8cGlpPiBBbXN0W21heG5dOwpib29sIGluW21heG5dOwppbnQgaFttYXhuXTsKcGlpIHBhclttYXhuXTsKaW50IGFuc1ttYXhuXTsKCnN0cnVjdCBEU1V7CiAgICBpbnQgbjsKICAgIHZlY3RvcjxpbnQ+IHJvb3Q7CiAgICB2b2lkIGluaXQoaW50IF9uID0gMCl7CiAgICAgICAgbiA9IF9uOwogICAgICAgIHJvb3QuYXNzaWduKG4gKyAyLCAwKTsKICAgICAgICBGT1IodSwgMSwgbil7CiAgICAgICAgICAgIHJvb3RbdV0gPSB1OwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgZ2V0Um9vdChpbnQgdSl7cmV0dXJuICh1ID09IHJvb3RbdV0pID8gdSA6IHJvb3RbdV0gPSBnZXRSb290KHJvb3RbdV0pO30KCiAgICBib29sIHVuaXRlKGludCB1LCBpbnQgdil7CiAgICAgICAgdSA9IGdldFJvb3QodSk7CiAgICAgICAgdiA9IGdldFJvb3Qodik7CiAgICAgICAgaWYodSA9PSB2KSByZXR1cm4gMDsKICAgICAgICBpZihoW3VdID4gaFt2XSkgc3dhcCh1LCB2KTsKICAgICAgICByb290W3ZdID0gdTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KfSBkc3U7Cgp2b2lkIGRmcyhpbnQgdSwgaW50IHApewogICAgRk9SWChlLCBBbXN0W3VdKXsKICAgICAgICBpbnQgdiA9IGUuZmksIGlkID0gZS5zZTsKICAgICAgICBpZih2ID09IHApIGNvbnRpbnVlOwogICAgICAgIGhbdl0gPSBoW3VdICsgMTsKICAgICAgICBwYXJbdl0gPSB7dSwgaWR9OwogICAgICAgIGRmcyh2LCB1KTsKICAgIH0KfQoKdm9pZCBpbnAoKXsKICAgIGNpbiA+PiBuID4+IG07CiAgICBGT1IoaSwgMSwgbSl7CiAgICAgICAgaW50IHUsIHY7IGNpbiA+PiB1ID4+IHY7CiAgICAgICAgaWYodSA+IHYpIHN3YXAodSwgdik7CiAgICAgICAgY2FuaFtpXSA9IHt1LCB2fTsKICAgIH0KfQoKdm9pZCBzb2woKXsKICAgIGRzdS5pbml0KG4pOwogICAgRk9SKGlkLCAxLCBtKXsKICAgICAgICBpbnQgdSA9IGNhbmhbaWRdLmZpLCB2ID0gY2FuaFtpZF0uc2U7CiAgICAgICAgaWYoZHN1LnVuaXRlKHUsIHYpKXsKICAgICAgICAgICAgaW5baWRdID0gMTsKICAgICAgICAgICAgQW1zdFt1XS5wYih7diwgaWR9KTsKICAgICAgICAgICAgQW1zdFt2XS5wYih7dSwgaWR9KTsKICAgICAgICB9CiAgICB9CiAgICBkZnMoMSwgMSk7CgogICAgRFNVIGNjOwogICAgY2MuaW5pdChuKTsKICAgIEZPUihpZCwgMSwgbSl7CiAgICAgICAgaW50IHUgPSBjYW5oW2lkXS5maSwgdiA9IGNhbmhbaWRdLnNlOwogICAgICAgIGlmKCFpbltpZF0pewogICAgICAgICAgICBhbnNbaWRdID0gaWQ7CiAgICAgICAgICAgIGludCBydSA9IGNjLmdldFJvb3QodSksIHJ2ID0gY2MuZ2V0Um9vdCh2KTsKICAgICAgICAgICAgd2hpbGUocnUgIT0gcnYpewogICAgICAgICAgICAgICAgaWYoaFtydV0gPiBoW3J2XSkgc3dhcChydSwgcnYpOwogICAgICAgICAgICAgICAgY2MudW5pdGUocGFyW3J2XS5maSwgcnYpOwogICAgICAgICAgICAgICAgYW5zW3Bhcltydl0uc2VdID0gaWQ7CiAgICAgICAgICAgICAgICBydiA9IGNjLmdldFJvb3QocnYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIEZPUihpLCAxLCBtKSBjb3V0IDw8ICgoYW5zW2ldID09IDApID8gLTEgOiBhbnNbaV0pIDw8ICIgIjsKfQoKX1RBTkhOVl97CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmKGZvcGVuKFRBU0siLmlucCIsICJyIikpewogICAgICAgIGZyZW9wZW4oVEFTSyIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihUQVNLIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpbnAoKTsKICAgIHNvbCgpOwogICAgcmV0dXJuIDA7Cn0K