Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma comment(linker, "/STACK:16777216")
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- #include<stdlib.h>
- #include<ctype.h>
- #include<assert.h>
- #include<iostream>
- #include<vector>
- #include<stack>
- #include<queue>
- #include<set>
- #include<map>
- #include<string>
- #include<utility>
- #include<algorithm>
- #include<list>
- using namespace std;
- #define CLR(a) memset(a,0,sizeof(a))
- #define SET(a) memset(a,-1,sizeof(a))
- #define pb push_back
- #define SZ(a) ((long)a.size())
- #define ALL(a) a.begin(),a.end()
- #define FOREACH(i, c) for( __typeof( (c).begin() ) i = (c).begin(); i != (c).end(); ++i )
- #define AREA2(x1,y1,x2,y2,x3,y3) ( x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2) )
- #define SQR(x) ((x)*(x))
- #define STR string
- #define IT iterator
- #define ff first
- #define ss second
- #define MP make_pair
- #define EPS 1e-9
- #define INF 1000000007
- #define chk(a,k) ((bool)(a&(1<<(k))))
- #define set0(a,k) (a&(~(1<<(k))))
- #define set1(a,k) (a|(1<<(k)))
- typedef long long Long;
- typedef vector<long> Vl;
- typedef vector<double> VD;
- typedef vector<Long> VL;
- typedef pair<long,long> Pll;
- typedef pair<Long,Long> PLL;
- inline long FastMax(long x, long y) { return (((y-x)>>(32-1))&(x^y))^y; }
- inline long FastMin(long x, long y) { return (((y-x)>>(32-1))&(x^y))^x; }
- long IR[] = { 0,-1,0,1,-1,-1,1,1 };
- long IC[] = { 1,0,-1,0,1,-1,-1,1 };
- #define MAX 107
- #define MOD 1000000007
- Long L[7],R[7];
- int main( void )
- {
- Long i,j,s,Icase,k = 0;
- freopen("text1.txt","r",stdin );
- cin>>Icase;
- while( Icase-- ){
- for( i=0;i<4;i++ ){
- cin>>L[i]>>R[i];
- //ans = ( ans*(R[i]-L[i]+1 ) )%MOD;
- }
- Long ans = 0;
- for( s=0;s<16;s++ ){
- Long c = 0,nt[4] = { 0,1,2,3 };
- for( i=0;i<4;i++ ){
- if( !chk( s,i ) ) continue;
- c++;
- nt[i] = (i+1)%4;
- }
- if( c==3 ) continue;
- bool vi[4] = {0};
- Long tot = 1;
- for( i=0;i<4;i++ ){
- if( vi[i] ) continue;
- //c++;
- Long l = L[i],r = R[i];
- vi[i] = true;
- while( nt[i]!=i ){
- i = nt[i];
- if( vi[i] ) break;
- vi[i] = true;
- l = max( l,L[i] );
- r = min( r,R[i] );
- }
- tot = ( tot*max( 0LL, r-l+1 ) )%MOD;
- }
- if( c&1 ) ans -= tot;
- else ans += tot;
- ans %= MOD;//cout<<ans<<endl;
- }
- ans = ( ans+MOD ) %MOD;
- cout<<ans<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement