#include #include #include #include #include #define FOR(i,a,b) for(int i = a; i<=b; i++) #define FORD(i,a,b) for(int i = a; i>=b; i--) #define PII pair #define fi first #define se second #define MP make_pair using namespace std; int days[366]; int zac[3047]; bool pries(int r) { if ((r % 4 == 0 && r % 100 != 0) || (r % 400 == 0)) return 1; return 0; } void init() { zac[2010] = 4; //piatok FOR(r,2010,3001) { if (pries(r)) zac[r+1] = zac[r]+2; else zac[r+1] = zac[r]+1; zac[r+1] = zac[r+1] % 7; } FORD(r,2010,1500) { if (pries(r-1)) zac[r-1] = zac[r] + 5; else zac[r-1] = zac[r] + 6; zac[r-1] = zac[r-1] % 7; } FOR(r,1500,3001) zac[r]++; /* FOR(r,2005,2017) printf("%d %d\n",r, zac[r] ); */ } int vn(int r) { int gold, solar, lunar, p; gold = (r % 19) + 1; solar = (r - 1600) / 100 - (r - 1600) / 400; lunar = (((r - 1400) / 100) * 8 ) / 25; p = (3003 - (11 * gold) + solar - lunar) % 30; if (p == 29 || (p == 28 && gold > 11)) p--; return p; } int vrat_den(int d, int m) { if (m == 1) return d; if (m == 2) return 31 + d; if (m == 3) return 60 + d; if (m == 4) return 91 + d; if (m == 5) return 121 + d; if (m == 6) return 152 + d; if (m == 7) return 182 + d; if (m == 8) return 213 + d; if (m == 9) return 244 + d; if (m == 10) return 274 + d; if (m == 11) return 305 + d; return 335 + d; } int main() { init(); string id; while(cin >> id) { int inte[400][4]; int d1, m1, d2, m2; int med; int N = 0; do { scanf("%d.%d.",&d1,&m1); med = getchar(); if (med == '-') { scanf("%d.%d.",&d2,&m2); med = getchar(); } else { d2 = -1; m2 = -1; } inte[N][0] = d1; inte[N][1] = m1; inte[N][2] = d2; inte[N][3] = m2; N++; } while(med == ','); int rok; cin >> rok; int j = zac[rok]; FOR(d,0,365) { if (d == 59) { if (pries(rok)) { days[d] = j; j++; } else days[d] = 0; } else { days[d] = j; j++; } if (j == 8) j = 1; } /* FOR(d,0,365) printf("%d %d\n", d+1, days[d]); */ int svia[] = {0,121,128,186,187,271,301,321,358,359,360}; FOR(s,0,10) days[svia[s]] = -days[svia[s]]; int p = vn(rok); int s = p+81; int d; for(d=s; d<= 365; d++) if (days[d] == 1) break; days[d] = -days[d]; //printf("%d %d\n", d, days[d]); //N - pocet intervalov int sum = 0; vector ktore(366, false); FOR(i,0,N-1) { int d1, d2; if (inte[i][3] == -1) { d1 = vrat_den(inte[i][0], inte[i][1]); d2 = d1; } else { d1 = vrat_den(inte[i][0], inte[i][1]); d2 = vrat_den(inte[i][2], inte[i][3]); } FOR(d,d1-1,d2-1) ktore[d] = true; } /* FOR(d,0,365) if (ktore[d]) printf("%d\n", d); */ int size = id.size(); vector mam(366,false); FOR(i,0,size-1) { char z = id[i]; if (z >= '1' && z <= '7') { FOR(d,0,365) if (ktore[d] && abs(days[d]) == z - '0') mam[d] = 1; } else if (z == 't') { FOR(d,0,365) if (ktore[d] && (days[d] == 7 || days[d] < 0))mam[d] = 1; } else if (z == 'w') { FOR(d,0,365) if (ktore[d] && (days[d] >= 1 && days[d] <= 5)) mam[d] = 1; } else if (z == 'a') { FOR(d,1,365) { if (ktore[d] && ( (days[d-1] < 0 && days[d] >= 1 && days[d] <= 5) || (days[d-1] == 7 && abs(days[d]) >= 1 && abs(days[d]) <= 5) )) mam[d] = 1; } } } FOR(i,0,365) { //printf("%d %d %c\n", i+1, days[i], (mam[i]) ? '1' : '0'); sum += mam[i]; } printf("%d\n", sum); //aky je den 1.1. } return 0; }