#include<iostream> #include<fstream> #include<cmath> #define in cin #define out cout using namespace std; const int Nmax = 50001; int A[Nmax],V[Nmax]; int B[Nmax]; int N,n,M; void refr(int ind){ int has=V[n*ind]; for(int i=n*ind;i<n*(ind+1);i++){ if(V[i]!=has){ B[ind]=-1; return; } } B[ind]=has; } void lazy(int ind){ if(B[ind]!=-1) for(int i=n*ind;i<n*(ind+1);i++) V[i]=B[ind]; B[ind]=-1; } void Update(int x,int y,int val){ if(A[x]==A[y]){ lazy(A[x]); for(int i=x;i<=y;i++) V[i]=val; refr(A[x]); return; } lazy(A[x]); lazy(A[y]); for(int i=x;A[i]==A[x];i++) V[i]=val; for(int i=y;A[i]==A[y];i--) V[i]=val; for(int i=A[x]+1;i<=A[y]-1;i++) B[i]=val; refr(A[x]); refr(A[y]); } int Val(int a){ return ( B[A[a]]==-1 ? V[a] : B[A[a]] ); } int Right(int x,int val){ int i; for(i=x;A[i]==A[x];i++) if(val!=Val(i)) return i-1; for(i=A[x]+1;B[i]==val;i++); for(i=n*i;val==Val(i);i++); return i-1; } int Left(int x,int val){ int i; for(i=x;A[i]==A[x];i--) if(val!=Val(i)) return i+1; for(i=A[x]-1;B[i]==val;i--); for(i=n*(i+1);val==Val(i);i--); return i+1; } void Query(int a){ out<<Val(a)<<' '; out<<Left(a,Val(a))<<' '; out<<Right(a,Val(a))<<' '; out<<'\n'; } int main(){ #ifndef ONLINE_JUDGE ifstream in("test.in"); ofstream out("test.out"); #endif in>>N>>M; n=sqrt(N); for(int i=0;i<=N+1;i++) A[i]=i/n; V[0]=V[N+1]=-1; B[A[0]]=B[A[N+1]]=-1; for(;M;--M){ int t,x,y,z; in>>t; if(t==1){ in>>x>>y>>z; Update(x,y,z); } if(t==2){ in>>x; Query(x); } } return 0; }