//把数字拆开
//一个数字若能被3整出,则它的各个位上的数字相加可以被3整出
//所以题目其实是求,数字的组合,使子串的各位相加可以被3整出
//一个数字,除以3,余数为0,1,2
//所以,可以把字符串直接当作它的余数串
//892213467
//202210101
//1.把0单独领出来,认为可以被3整出
//2.尽量每次分的越少越好
//3.现在只考虑1和2的情况
//111
//222
//1和2交替,一旦出现了既有1又有2,那么可以被3整出
#include <iostream>
#include <string>
//现在开始循环遍历
using namespace std;
int main()
{
string str;
cin >> str;
int leng = str.size();
int count = 0;//count用来统计可以整除3的个数
int num = 0;//用来统计当前数字的总和
int c1 = 0; int c2 = 0;
//c1和c2分别统计当前余数为1和余数
for(int i=0;i<leng;i++)
{
//str[i]为字符,str[i]-'0'为数字
int now = str[i] - '0';
if (now % 3 == 0)
{
count++;
c1 = 0;
c2 = 0;
num = 0;
}
else if (now % 3 == 1)
{
num+=str[i];
c1++;
}
else
{
num+=str[i];
c2++;
}
//再次判断能否组合成一个字符串
if ((num > 0 && num % 3 == 0) || (c1&&c2))
{
count++; c1 = 0;c2 = 0;num = 0;
}
}
cout << count << endl;
system("pause");
return 0;
}