#include <iostream>
#include <vector>

int main()
{
    int n;
    std::cin >> n;
    
    std::vector<int> tasks(n);
    for(int i=0; i<n; i++)
        std::cin >> tasks[i];
    
    std::vector<int> dp(24);
    for(int i=0; i<n; i++)
    {
        std::vector<int> newdp (24);
        for(int tool=0; tool<3; tool++)
        {
            for(int usemask = 0; usemask < 8; usemask++)
            {
                int old = dp[(tool << 3) + usemask];
                if(tasks[i] == tool)
                    newdp[(tool << 3) + usemask] = std::max(newdp[(tool << 3) + usemask], old+1);
                else
                    newdp[(tool << 3) + usemask] = std::max(newdp[(tool << 3) + usemask], old);
                if(tool != tasks[i] && !(usemask & (1<<tasks[i])))
                {
                    int newmask = usemask | (1<<tool);
                    newdp[(tasks[i] << 3) + newmask] = std::max(newdp[(tasks[i] << 3) + newmask], old + 1);
                }
            }
        }
        dp = newdp;
    }
    int best = 0;
    for(int i=0; i<24; i++)
        best = std::max(best, dp[i]);
    std::cout << best << std::endl;
}
