/*
TASK:hexa
LANG:C++
*/
#include <stdio.h>
#include <stdlib.h>

struct point{int x, y;};

struct point list1[1048756];
struct point list2[1048756];
int nlist1, nlist2;

int cmp(const void *a, const void*b){
    if((*(struct point *)a).x==(*(struct point *)b).x)
     return (*(struct point *)a).y-(*(struct point *)b).y;
    return (*(struct point *)a).x-(*(struct point *)b).x;
     
}

int main(void){
    char com;
    struct point cc;
    cc.x=0;
    cc.y=0;
    int resin=1, resout=1;
    int pos=0, i;
    while(scanf("%c", &com)==1){
       if(com!='1'&&com!='2') continue; //ako ne e vyvedeno, moje da e nov red
       if(com=='2'){
          list1[nlist1++]=cc;
          if(cc.x%2==1) {
            if(pos==0) {
              cc.x;
              cc.y--;
            } else
            if(pos==1) {
              cc.x++;
              cc.y;
            } else
            if(pos==2) {
              cc.x;
              cc.y++;
            } else
            if(pos==3) {
              cc.x--;
              cc.y++;
            } else
            if(pos==4) {
              cc.x--;
              cc.y;
            } else
            if(pos==5) {
              cc.x--;
              cc.y--;
            }
          }
          else {
            if(pos==0) {
              cc.x++;
              cc.y--;
            } else
            if(pos==1) {
              cc.x++;
              cc.y;
            } else
            if(pos==2) {
              cc.x++;
              cc.y++;
            } else
            if(pos==3) {
              cc.x;
              cc.y++;
            } else
            if(pos==4) {
              cc.x--;
              cc.y;
            } else
            if(pos==5) {
              cc.x;
              cc.y--;
            }
          }
          pos=(pos-2)%6;
       }

       {
         if(cc.x%2==1) {
           if(pos==0) {
             list2[nlist2].x=cc.x;
             list2[nlist2].y=cc.y-1;
           } else
           if(pos==1) {
             list2[nlist2].x=cc.x+1;
             list2[nlist2].y=cc.y;
           } else
           if(pos==2) {
             list2[nlist2].x=cc.x;
             list2[nlist2].y=cc.y+1;
           } else
           if(pos==3) {
             list2[nlist2].x=cc.x-1;
             list2[nlist2].y=cc.y+1;
           } else
           if(pos==4) {
             list2[nlist2].x=cc.x-1;
             list2[nlist2].y=cc.y;
           } else
           if(pos==3) {
             list2[nlist2].x=cc.x-1;
             list2[nlist2].y=cc.y-1;
           }
         }
         else { //ako e chetno..
           if(pos==0) {
             list2[nlist2].x=cc.x+1;
             list2[nlist2].y=cc.y-1;
           } else
           if(pos==1) {
             list2[nlist2].x=cc.x+1;
             list2[nlist2].y=cc.y;
           } else
           if(pos==2) {
             list2[nlist2].x=cc.x+1;
             list2[nlist2].y=cc.y+1;
           } else
           if(pos==3) {
             list2[nlist2].x=cc.x;
             list2[nlist2].y=cc.y+1;
           } else
           if(pos==4) {
             list2[nlist2].x=cc.x-1;
             list2[nlist2].y=cc.y;
           } else
           if(pos==5) {
             list2[nlist2].x=cc.x;
             list2[nlist2].y=cc.y-1;
           }
         }
         nlist2++;
         pos=(pos==5?0:pos+1);
       }
    }
    //printf("%d %d\n", nlist1, nlist2);
    /*for(i=0;i<nlist1;i++)
       printf("%d . %d %d\n", i, list1[i].x, list1[i].y);*/
    qsort(list1, nlist1, sizeof(struct point), cmp);
    qsort(list2, nlist2, sizeof(struct point), cmp);
    for(i=1;i<nlist1;i++) if(cmp(list1+i, list1+i-1)!=0) resin++;
    for(i=1;i<nlist2;i++) if(cmp(list2+i, list2+i-1)!=0) {
       //printf("%d . %d %d -> %d\n", i, list2[i].x, list2[i].y, resout);
       resout++;
    }
    printf("%d %d\n", resout, resin);
    return 0;
}
