#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
    if (b == 0) {
        return a;
    } else {
        return gcd(b, a % b);
    }
}
long long gcd_vec(vector<long long> const &A) { // N個の要素に対する最大公約数
    int size = (int)A.size();
    long long ret = A[0];
    for (int i = 1; i < size; i++) {
        ret = gcd(ret, A[i]);
    }
    return ret;
}
long long lcm2(long long a, long long b) {
    long long d = gcd(a, b);
    return a / d * b;
}
long long lcm(const vector<long long> &vec) {
    long long l = vec[0];
    for (int i = 0; i < vec.size() - 1; i++) {
        l = lcm2(l, vec[i + 1]);
    }
    return l;
}
long long int mypow(long long int a,long long int b){
    long long int i=0,ans;
    for(i=0;i<b;i++)
    {
        if(i==0)
        {
            ans=a;
        }
        else
        {
            ans*=a;
        }
    }
    return ans;   
}
struct UnionFind{
    int n;
    vector<int> par; // 親の番号
    vector<int> siz; // サイズを表している。

    // 初期化する。parは自身を指す（iotaは 0 ~ nまでの数字を順に入れていく）
    // size(siz) は最初はすべて１
    UnionFind(int n) : n(n){
        par.resize(n);
        iota(par.begin(),par.end(),0);
        siz.assign(n,1);
    }

    // 頂点の親を求める。
    // 再帰関数を使っており、経路圧縮もしている。
    int root(int x){
        // ここは親の処理。
        if (par[x] == x){
            return x;
        }

        //経路圧縮をしながら値を返す。
        // par[x] = root(par[x]);
        // return par[x];
        // と同じ意味。
        return par[x] = root(par[x]);
    }

    // unite :: a と bを同じグループに入れる。
    // もし初めから同じなら何もしない。
    void unite(int a,int b){
        int ra = root(a);
        int rb = root(b);

        if(ra == rb){
            return;
        }

        // サイズの大きい方にサイズの小さいほうを合成するので、swapしている。
        if (siz[ra] < siz[rb]){
            swap(ra,rb);
        }
        // サイズが大きい方に小さいのを合体
        // 小さいほうの親は大きい方の親になる。
        siz[ra] += siz[rb];
        par[rb] = ra;
    }

    //　同じグループかどうか判定するには、親が一緒かどうかをみたらよい
    bool same(int x,int y){
        return root(x) == root(y);
    }

    // 頂点が含まれるグループの頂点を求める。
    int get_size(int x){
        return siz[root(x)];
    }
};
    long long int facctorialMethod(int k){
    long long int sum = 1;
    for (int i = 1; i <= k; ++i)
    {
        sum *= i;
    }
    return sum;
}
#define PI 3.14159265359
int main()
{
	[[maybe_unused]]long long int i=0,j=0,k,n,m=0;
    set<long long int>st;
    [[maybe_unused]]double qw;
    string s,s1;
    cin >> s;
    for(i=0;i<9;i++)
    {
        if(s[i]=='Z' && s[i+1]=='O' && s[i+2]=='N' && s[i+3]=='e')
        {
            m++;
        }
    }
    cout << m;
}
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization ("unroll-loops")
#include<bits/stdc++.h>
#define pb push_back
#include <iomanip>
#define mp make_pair
#define ll long long
#define vll vector <ll>
#define pll pair <ll,ll>
#define sll set <ll>
#define msll multiset <ll>
#define mll map <ll,ll>
#define mod 1000000007
ll prime[1000001];
using namespace std;
//// FOR SINGLE TO KNOW FOR PRIME
int Prime(int a)
{
    for(int i=2;i<=a/2;++i)
    {
        if(a%i==0)
        {
            return 0;
        }
    }
    return 1;
}
//// FOR PRIMES TILL A VALUE
void sieve()
{   for(int i=2;i<=1000000;i++)
    prime[i]=1;
    int maxn=1000000;
    for(int i=2;i*i<=maxn;i++)
    {
        if(prime[i]==1)
        {
            for(int j=i;j*j<=maxn;j+=i)
            {
                prime[j]=0;
            }
        }
    }
}
void fibo(ll a[],ll n)
{
    ll x=0;
    ll y=1;
    a[0]=0;
    a[1]=1;
    for(ll i=2;i<n;++i)
    {
        a[i]=(x+y)%10;
        x=y;
        y=a[i];
    }
}
/*ll f(ll w[],ll a[][2],ll i,ll y)
{
    for(ll j=0;j<y;++j)
    {
        if(a[i][2]<=w[j])
        {
            cout<<a[i][2];
            return w[j];
        }
    }
    return w[y-1];
}*/
/*ll s(ll v[],ll a[][2],ll i,ll x)
{
    for(ll j=0;j<x;++j)
    {
        if(a[i][1]>=v[j])
        {
            cout<<" "<<a[i][1]<<" ";
            return v[j];
        }
    }
    return v[0];
}*/
bool binarySearch(vector <ll> arr, int l, int r, int x) 
{ 
    if (r >= l) { 
        int mid = l + (r - l) / 2; 
        if (arr[mid] == x) 
            return 1; 
        if (arr[mid] > x) 
            return binarySearch(arr, l, mid - 1, x); 
        return binarySearch(arr, mid + 1, r, x); 
    } 
    return 0; 
}
 
//////// FOR FAST POWER
/*ll poop[5000];
memset(poop,-1,sizeof(poop));
ll po(ll n,ll x)
{
    if(poop[x]!=0)
    {
        return poop[x];
    }
    if(x==1)
    {
        return poop[x]=n%mod;
    }
    if(x%2)
    {
        return poop[x]=(n*((po(n,x/2))%mod)*((po(n,x/2))%mod))%mod;
    }
    else
    {
        return poop[x]=(((po(n,x/2))%mod)*((po(n,x/2))%mod))%mod;
    }
}*/
/*ll v[3001],cont[3001],f[3001],n,c,k,x,y,z,t,l,v;
//memset(f,0,sizeof(f));
ll fact(ll a)
{
    if(a==0||a==1)
    {
        return 1;
    }
    if(f[a]!=0)
    {
        return f[a];
    }
    return f[a]=a*fact(a-1);
}*/
/*ll solve(ll k,ll t,ll i)
{
    if(i<0||k==0)
    {
        return t;
    }
    if((v[i]<=k)&&(cont[i]>2))
    {
        return min(solve(k,t,i),solve(k-val[i],t-fact(count[i])/(6*fact(count[i-3]))))
    }
    else
    {
        return solve()
    }
}*/
/*ll s[200001],x,a[200001];
void bs(ll low,ll high)
{
    ll mid=(low+high)/2;
    if(s[mid]==x)
    {
        cout<<mid+1<<" "<<a[mid];
    }
    else if((x<s[mid])&&(x>=s[mid-1]))
    {
        cout<<mid<<" "<<x-s[mid-1];
    }
    else if(x>s[mid])
    {
        return bs(mid+1,high);
    }
    else
    {
        return bs(low,mid-1);
    }
}*/
/*vector<ll>v[100001],vis(100001,0),d(100001,0);
void dfs(ll n)
{
    vis[n]=1;
    for(auto x:v[n])
    {
        if(!vis[x])
        {
            d[x]=d[n]+1;
            dfs(x);
        }
    }
}*/
ll vis[1000][1000],dis[1000][1000],di[1000][1000],dx[]={0,1,1,1,0,-1,-1,-1},dy[]={-1,-1,0,1,1,1,0,-1},n,m;
char s[1000][1000];
bool check(ll a,ll b)
{
    if(a>=0&&b>=0&&a<n&&b<m)
    {
        return true;
    }
    return false;
}
int main()
{
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout)
    ll t,k,b,c,ans,r,e,a,f,g,u,d;
    //cin>>t;
    //while(t--)
    {
        string x;
        cin>>x;
        n=x.size();
        k=0;
        for(ll i=0;i<n-3;++i)
        {
            if(x[i]=='Z'&&x[i+1]=='O'&&x[i+2]=='N'&&x[i+3]=='e')
            {
                i+=3;
                k++;
            }
        }
        cout<<k;
    }
    return 0;
}
