#include using namespace std; #define PB push_back #define ZERO (1e-10) #define INF int(1e9+1) #define CL(A,I) (memset(A,I,sizeof(A))) #define DEB printf("DEB!\n"); #define D(X) cout<<" "<<#X": "<B&&A-ZERO pll; typedef vector vi; typedef pair ii; typedef vector vii; #define IN(n) int n;scanf("%d",&n); #define FOR(i, m, n) for (int i(m); i < n; i++) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define FT(m, n) FOR(k, m, n) #define aa first #define bb second void ga(int N,int *A){F(N)scanf("%d",A+i);} #define MX 200005 vii g[MX]; int N,Q,C[MX],a,x,y,w; void dl(int a,int b,bool x=1){ F((int)g[a].size())if(g[a][i].aa==b)g[a][i]=g[a].back(),g[a].pop_back(); if(x)dl(b,a,0); } bool dfs(int u,int t,int x){ if(u==t)return 1; if(C[u]++)return 0; for(auto&h:g[u])if(h.bb<=x&&dfs(h.aa,t,x))return 1; return 0; } int go(int x,int y){ F(50)if(CL(C,0),dfs(x,y,i))return i; return -1; } int main(void){ scanf("%d%d",&N,&Q); F(Q){ scanf("%d%d%d",&a,&x,&y); if(!a)scanf("%d",&w),g[x].PB({y,w}),g[y].PB({x,w}); else if(a==1)dl(x,y); else printf("%d\n",go(x,y)); } return 0; }