#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll m=200010,inf=10000000000000,n,s,t,tot,ans[2005];
ll l,r=1000,mid,u[2005],v[2005],w1[2005],w2[2005];
ll dep[10010],cur[10010],deg[10005];
struct node{
ll v,w,id,wt;
};
vector<node>e[10010];
vector<int>g[10005],h[10005];
bool vis[100005];
bool bfs()
{
memset(dep,-1,sizeof(dep));
queue<ll>q;
q.push(s);
dep[s]=0;
while(!q.empty()){
ll f=q.front();
q.pop();
for(int i=0;i<e[f].size();i++){
ll v=e[f][i].v;
if(dep[v]==-1&&e[f][i].w){
dep[v]=dep[f]+1;
q.push(v);
}
}
}
memset(cur,0,sizeof(cur));
return(dep[t]!=-1);
}
ll dfs(ll u,ll liu){
if(u==t){
return liu;
}
for(int i=cur[u];i<e[u].size();i++){
cur[u]=i;
ll v=e[u][i].v;
if(dep[v]==dep[u]+1&&e[u][i].w){
ll f=dfs(v,min(e[u][i].w,liu));
if(f){
e[u][i].w-=f;
e[v][e[u][i].id].w+=f;
return f;
}
else
dep[v]=-1;
}
}
return 0;
}
ll dinic(){
ll r=0,flow;
while(bfs()){
while(flow=dfs(s,inf)){
r+=flow;
}
}
return r;
}
void add(ll u,ll v,ll w){
ll ui=e[u].size();
ll vi=e[v].size();
e[u].push_back({v,1,vi,1});
e[v].push_back({u,0,ui,0});
}
bool check(ll mid){
for(int i=0;i<=n+m;i++){
e[i].clear();
}
s=0;
t=n+m+1;
for(int i=1;i<=m;i++){
if(w1[i]>mid&&w2[i]>mid){
return 0;
}
add(s,i,1);
if(w1[i]<=mid){
add(i,m+u[i],1);
}
if(w2[i]<=mid){
add(i,m+v[i],1);
}
}
for(int i=1;i<=n;i++){
add(m+i,t,deg[i]/2);
}
return (dinic()==m);
}
void dfs2(int u){
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(vis[h[u][i]]){
continue;
}
vis[h[u][i]]=1;
cout<<h[u][i]<<" ";
dfs2(v);
// ans[++tot]=h[u][i];
}
}
void write(){
cout<<l<<"\n";
check(l);
for(int i=1;i<=m;i++){
for(int j=0;j<e[i].size();j++){
if(e[i][j].w==0&&e[i][j].wt){
if(e[i][j].v==u[i]+m){
g[u[i]].push_back(v[i]);
h[u[i]].push_back(i);
}
if(e[i][j].v==v[i]+m){
g[v[i]].push_back(u[i]);
h[v[i]].push_back(i);
}
}
}
}
dfs2(1);
// for(int i=tot;i;i--){
// cout<<ans[i]<<" ";
// }
return;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u[i]>>v[i]>>w1[i]>>w2[i];
deg[u[i]]++;
deg[v[i]]++;
// l=min(l,min(w1[i],w2[i]));
// r=max(r,max(w1[i],w2[i]));
}
l=1,r=1000;
for(int i=1;i<=n;i++){
if(deg[i]&1){
cout<<"NIE";
return 0;
}
}
while(l<r){
mid=(l+r)/2;
if(check(mid)){
r=mid;
}
else{
l=mid+1;
}
}
write();
return 0;
}