#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define READ_BUFSIZE ( 1024 )
#define READ_DELIMITER ( " " )

int count(char* pS, char c)
{
	int count = 0;
	for (int i = 0; i < strlen(pS); i++)
	{
		if (pS[i] == c)
			count++;
	}
	return(count);
}

int hantei(int N, char ps[6][7])
{
	int K = count(ps[0], 'o');
	if (K == N-1)
		return 1;

	int kachi[7] = { 0 };
	for (int i = 1; i < N; i++)
	{
		kachi[count(ps[i], 'o')] = 1;
	}

	int jun = 0;
	for (int j = K+1; j <= 6; j++)
	{
		if (kachi[j] == 1)
			jun++;
	}

	return(++jun);

}

void simulate(int N, char ps[6][7], int team, int shiai, int &junni)
{
	char p1[6][7] = { "" };
	char p2[6][7] = { "" };

	memcpy(p1, ps, 6 * 7);
	memcpy(p2, ps, 6 * 7);

	if (ps[team][shiai] == '-')
	{
		p1[team][shiai] = 'o';
		p1[shiai][team] = 'x';

		p2[team][shiai] = 'x';
		p2[shiai][team] = 'o';
	}

	if (shiai == N-1)
	{
		if (team == N-1)
		{
			//順位の判定をする
			int h = hantei(N, p1);
			if (h < junni)
				junni = h;

			h = hantei(N, p2);
			if (h < junni)
				junni = h;

			return;
		}
		shiai = 0;
		team++;

	}
	else
		shiai++;

	simulate(N, p1, team, shiai, junni);
	
	if (ps[team][shiai] == '-')
		simulate(N, p2, team, shiai, junni);

}

int main(int argc, char *argv[])
{

	int N = 0;
	scanf("%d", &N);

	char s[6][7] = { "" };
	int r[6][2] = { 0 }; //勝ち,残り

	for (int i = 0; i < N; i++)
	{
		scanf("%s", s[i]);
	}

	for (int j = 0; j < N; j++)
	{
		if (s[0][j] == '-') //K君未試合分
		{
			s[0][j] = 'o'; //K君が勝ったことにする
			s[j][0] = 'x';

		}
	}

	int junni = 6;
	simulate(N, s, 1, 0, junni);

	printf("%d\n", junni);



	return 0;

}