#include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using dat = pair; template< typename T > struct edge{ int from,to; T cost; edge(int from,int to, T cost):from(from),to(to),cost(cost){}; edge &operator=(const int& x){ to = x; return *this; } }; template< typename T > struct graph{ int n; vector>> e; graph(int n):n(n),e(n){} void add_edge(int from,int to,T cost){ e[from].emplace_back(from,to,cost); } vector> &operator[](int i) { return e[i]; } }; template< typename T > vector> warshallfloyd(graph& g,T const inf = (T)1e9){ int n = g.n; vector> dist(n,vector(n,inf)); for(int i = 0;i e:g[i]){ dist[i][e.to] = e.cost; } } for(int k = 0;k0) return 1; if(da*dd-db*dc<0) return -1; if(da*db+dc*dd<0) return 2; if(da*da+db*db>n>>m; vector> x(2,vector(n)),y(2,vector(n)); for(int i = 0;i>x[j][i]>>y[j][i]; vector> d; for(int i = 0;i> s; sort(d.begin(),d.end()); for(int i = 0;i g(al); for(int i = 0;i(g); cout<>i>>j>>k>>l; i--;j--;k--;l--; dat a = {x[j][i],y[j][i]}; dat b = {x[l][k],y[l][k]}; int ni = lower_bound(d.begin(),d.end(),a) - d.begin(); int nj = lower_bound(d.begin(),d.end(),b) - d.begin(); cout<