public class Solution {
int mon[] = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
boolean isYear(int year){
if((year%4==0&&year%100!=0)||year%400==0)return true;
return false;
}
boolean check(int y1, int m1, int d1, int y2, int m2, int d2){
if(y2<y1) return false;
else if(y1 == y2 && m2 <m1) return false;
else if(y1 == y2 && m2 ==m1 && d2<d1) return false;
return true;
}
public int workdays_between (int y1, int m1, int d1, int y2, int m2, int d2) {
// write code here
if(!check(y1, m1, d1, y2, m2, d2))return 0;
long days = 0;
for (int i = 1; i < y1; i++) {
if(isYear(i))days+=366;
else days+=365;
}
for (int i = 1; i < m1; i++) {
if(i==2&&isYear(y1))days+=29;
else days+=mon[i];
}
days+=d1;
long res = 0;
if(y2>y1){
for (int i = y1+1; i < y2; i++) {
if(isYear(i))res+=366;
else res+=365;
}
if(m1 == 2&&isYear(y1)) res += 29 - d1;
else res += mon[m1]-d1;
for (int i = m1+1; i <= 12 ; i++) {
if(i==2&&isYear(y1))res+=29;
else res+=mon[i];
}
for (int i = 1; i < m2 ; i++) {
if(i==2&&isYear(y2))res+=29;
else res+=mon[i];
}
res += d2;
}else {
if(m2>m1){
if(m1 == 2&&isYear(y1)) res += 29 - d1;
else res += mon[m1]-d1;
for (int i = m1+1; i < m2; i++) {
if(i==2&&isYear(y1))res+=29;
else res+=mon[i];
}
res += d2;
}else{
res += d2 -d1;
}
}
int ans = 0;
int w =(int) days%7;
//System.out.println(w+" "+isYear(2016)+" "+res);
int r =0;
if(w!=1){
if(w==0) r = 1;
else r = 7 - w + 1;
}
if(res>=r){
if(w!=1&&r>=2) ans += r - 2;
res -= r;
ans += res - (res/7)*2 ;
if(res%7>5)ans-=1;
}else {
int t = 6-w;
if(t>=res) ans+=res;
else ans +=t;
}
return ans;
}
}