Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {

	sc := bufio.NewScanner(os.Stdin)
	sc.Scan()
	ma, _ := strconv.Atoi(sc.Text())

	sc.Scan()
	args := strings.Split(sc.Text(), " ")

	value := []int{}
	for _, v := range args {
		a, _ := strconv.Atoi(v)
		value = append(value, a)

	}
	ans(ma, value)

}

func ans(n int, value []int) {

	max := 0
	cnt := 0

	for i := 0; i < n; i++ {

		if value[i] == 1 {
			cnt++
		} else {
			if cnt > max {
				max = cnt
			}
			cnt = 0
		}
	}

	if cnt > max {
		max = cnt
	}

	fmt.Printf("%d\n", max+1)
}

C++: // #pragma GCC target("avx")  // CPU 処理並列化
// #pragma GCC optimize("O3")  // CPU 処理並列化
// #pragma GCC optimize("unroll-loops")  // 条件処理の呼び出しを減らす
// #define BEGIN_STACK_EXTEND(size) void * stack_extend_memory_ = malloc(size);void * stack_extend_origin_memory_;char * stack_extend_dummy_memory_ = (char*)alloca((1+(int)(((long long)stack_extend_memory_)&127))*16);*stack_extend_dummy_memory_ = 0;asm volatile("mov %%rsp, %%rbx\nmov %%rax, %%rsp":"=b"(stack_extend_origin_memory_):"a"((char*)stack_extend_memory_+(size)-1024));
// #define END_STACK_EXTEND asm volatile("mov %%rax, %%rsp"::"a"(stack_extend_origin_memory_));free(stack_extend_memory_);

#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<deque>
#include<stack>
#include<string>
#include<string.h>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#include<stdlib.h>
#include<cassert>
#include<time.h>
#include<bitset>
#include<numeric>
#include<unordered_set>
#include<unordered_map>
#include<complex>
using namespace std;
const long long mod=1000000007;
const long long inf=mod*mod;
const long long d2=(mod+1)/2;
const long double EPS=1e-20;
const double INF=1e+10;
const double PI=acos(-1.0);
const int C_SIZE = 3100000;
const int UF_SIZE = 3100000;
namespace{
	long long fact[C_SIZE];
	long long finv[C_SIZE];
	long long inv[C_SIZE];
	long long Comb(int a,int b){
	 	if(a<b||b<0)return 0;
	 	return fact[a]*finv[b]%mod*finv[a-b]%mod;
	}
	void init_C(int n){
		fact[0]=finv[0]=inv[1]=1;
		for(int i=2;i<n;i++){
			inv[i]=(mod-(mod/i)*inv[mod%i]%mod)%mod;
		}
		for(int i=1;i<n;i++){
			fact[i]=fact[i-1]*i%mod;
			finv[i]=finv[i-1]*inv[i]%mod;
		}
	}
	long long pw(long long a,long long b){
		if(a<0LL)return 0;
		if(b<0LL)return 0;
		long long ret=1;
		while(b){
			if(b%2)ret=ret*a%mod;
			a=a*a%mod;
			b/=2;
		}
		return ret;
	}
	long long pw_mod(long long a,long long b,long long M){
		if(a<0LL)return 0;
		if(b<0LL)return 0;
		long long ret=1;
		while(b){
			if(b%2)ret=ret*a%M;
			a=a*a%M;
			b/=2;
		}
		return ret;
	}
	int pw_mod_int(int a,int b,int M){
		if(a<0)return 0;
		if(b<0)return 0;
		int ret=1;
		while(b){
			if(b%2)ret=(long long)ret*a%M;
			a=(long long)a*a%M;
			b/=2;
		}
		return ret;
	}
	int ABS(int a){return max(a,-a);}
	long long ABS(long long a){return max(a,-a);}
	double ABS(double a){return max(a,-a);}
	int sig(double r) { return (r < -EPS) ? -1 : (r > +EPS) ? +1 : 0; }
	int UF[UF_SIZE];
	void init_UF(int n){
		for(int i=0;i<n;i++)UF[i]=-1;
	}
	int FIND(int a){
		if(UF[a]<0)return a;
		return UF[a]=FIND(UF[a]);
	}
	void UNION(int a,int b){
		a=FIND(a);b=FIND(b);if(a==b)return;
		if(UF[a]>UF[b])swap(a,b);
		UF[a]+=UF[b];UF[b]=a;
	}
}
// ここから編集しろ
int p[110];
int main(){
	int a;scanf("%d",&a);
	for(int i=0;i<a;i++)scanf("%d",p+i+1);
	int pr=0;
	int ret=0;
	for(int i=1;i<=a+1;i++){
		if(p[i]==0){
			ret=max(ret,i-pr);
			pr=i;
		}
	}
	printf("%d\n",ret);
}

C++: #include <iostream>
using namespace std;
int main(void)
{
    int N,i,j;
    int counter=0;
    int answer=0;
    cin>>N;
    int a[N];
    for(i=0;i<N;i++)
    {
        cin>>a[i];
    }
    for(j=0;j<N;j++)
    {
        counter++;
        if(a[j]==0)
        {
            if(counter>answer)
            {
                answer=counter;
            }
            counter=0;
        }
        if(a[j]==1)
        {
            if(counter>answer)
            {
                answer=counter;
            }
            if(j+1==N)
            {
                counter++;
                if(counter>answer)
                {
                    answer=counter;
                }
            }
        }
    }
    cout<<answer<<endl;
    return 0;
}

C++: #include <iostream>

using namespace std;

int main()
{
  int N;
  int A[100];
  int run_length = 0;
  int max_run_length = 0;
  
  cin >> N;

  for (int i = 0; i < N; i++) {
    cin >> A[i];
    if (A[i] == 0 && run_length) {
      if (run_length > max_run_length) {
        max_run_length = run_length;
      }
      run_length = 0;
    } else if (A[i] == 1) {
      run_length++;
    }
  }
  if (run_length > max_run_length) {
    max_run_length = run_length;
  }
  
  cout << max_run_length + 1  << endl;
}

C++: #include<iostream>
using namespace std;
int main() {
	int n; cin >> n;
	int cnt = 1, ans = 1;
	for (int i = 0; i < n; i++) {
		int k; cin >> k;
		if (k)cnt++;
		else {
			if (cnt > ans)ans = cnt;
			cnt = 1;
		}
	}if (cnt > ans)ans = cnt;
	cout << ans << endl;
	return 0;
}

C++: int main()
{
	//2.すごろく	
	int n;
	cin >> n;
	int A, _A = 1;
	int k = 0;
	int count[100];
	count[k] = 1;
	for (int i = 0; i < n; i++)
	{
		cin >> A;
		if (A == 1)
		{
			if (A == _A)
			{
				count[k]++;
			}
			else
			{
				k++;
				count[k] = 2;
			}
		}
		_A = A;
	}
	sort(count, count + k);
	cout << count[k] << endl;

	return 0;
}

C++: // すごろく 2018/12/27

#include <iostream>
using namespace std;

int main() {
    int N, S[100], val;
    bool previous = false; // 1個前が1かどうか
    int length = 0;
    int maxi = 0;

    cin >> N;
    for (int i=0; i<N; i++) {
        cin >> val;
        if (val) { // 1がでた
            if (previous) length++;
            else length = 1;
        } else if (previous) { // maxiを更新するかどうか？
            maxi = (maxi < length) ? length : maxi;
        }
        previous = (val == 1) ? true : false;
    }

    if (!maxi) // 全部0だった
        cout << N + 1 << '\n';
    else // 1が連続した最大回数+1
        cout << maxi + 1 << '\n';
    return 0;
}

C++: #include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
    int N;
    cin >> N;
    
    int count = 0,max = 0;
    for (int i = 0; i < N; i++) {
        int A;
        cin >> A;
        count += A;
        if (A == 0){
            if (max < count) max = count;
            count = 0;
        }
    }
         if (max < count) max = count;
         count = 0;
         
         cout << max+1 << endl;
         
    
    
    return 0;
}

C++: // http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0642



#include<iostream>
 using namespace std; //標準名前空間を使用


    int main(){

    int sugorokunomasu[1000] ;
    int N ;
    int saidairenzokusuucount ; // 1の最大連続数カウント
    int saidairenzokusuucountmax ; // 1の最大連続数の最大値

    cin >> N ;


            for (int i = 0; i <= N ; i = i + 1 ){
            　cin >> sugorokunomasu[i] ; //すごろくのマスの読み込み

                    if(sugorokunomasu[i] == 1){ // すごろくのマスに1が出てきた場合
                        saidairenzokusuucount =  saidairenzokusuucount + 1 ; //1の最大連続数カウントに1を+

                    }else{ //すごろくのマスに0が出てきた場合

                        if(saidairenzokusuucount > saidairenzokusuucountmax) // 1の最大連続数の最大値を更新されているかの判定
                        { 
                        saidairenzokusuucountmax = saidairenzokusuucount ; //更新されていれば、1の最大連続数の最大値を更新
                        }else{
                        //最大値を更新しない場合は何もしない
                        }

                    saidairenzokusuucount = 0 ; //1の最大連続数カウントをフラッシュして0に
                    
                    }

                


            }


    cout << saidairenzokusuucountmax + 1 << endl ;
    }