#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,z,w;
int head[7004],e[40005],nxt[40005],w1[40005],w2[40005],idx;
double totans=-0.1;
void add(int u,int v,int s1,int s2){
e[idx]=v;
w1[idx]=s1;
w2[idx]=s2;
nxt[idx]=head[u];
head[u]=idx;
idx++;
return;
}
bool vis[114514];
int sm1[7004];
int sm2[7004];
queue<int>q;
double spfa(int st){
memset(sm1,0,sizeof sm1);
memset(sm2,0,sizeof sm2);
memset(vis,0,sizeof(vis));
double r=-0.1;
q.push(st);
vis[st]=1;
int tmp;
while(q.size()){
tmp=q.front();
q.pop();
for(int i=head[tmp];i!=-1;i=nxt[i]){
if(e[i]==st){
r=max(r,(double)(sm1[tmp]+w1[i])/(double)(sm2[tmp]+w2[i]));
continue;
}
if(vis[e[i]])continue;
q.push(e[i]);
vis[e[i]]=1;
if(sm1[e[i]]*(sm2[tmp]+w2[i])<=(sm1[tmp]+w1[i])*sm2[e[i]]){
sm1[e[i]]=sm1[tmp]+w1[i];
sm2[e[i]]=sm2[tmp]+w2[i];
}
}
}
return r;
}
int main(){
memset(head,-1,sizeof(head));
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d %d %d %d",&x,&y,&z,&w);
add(x,y,z,w);
}
for(int i=1;i<=n;i++)totans=max(totans,spfa(i));
if(totans!=-0.1)printf("%.1lf",totans);
else printf("-1");
return 0;
}