/*피보나치 수열(Large) 메모이제이션
#include<stdio.h>
int memo[205] = { 0,1,1 };
int f(int n)
{
if (n <= 2)
{
return memo[n];
}
if (memo[n] != 0)
{
return memo[n]%10009;
}
return memo[n]= (f(n - 2) + f(n - 1))%10009;
}
int main()
{
int n;
scanf_s("%d", &n);
printf("%d", f(n));
return 0;
}*/
/*
#include<stdio.h>
int main()
{
int a, b,c,count,n;
scanf_s("%d %d", &a, &b);
if (b - a > 0)
{
c = b - a;
}
else
{
c = (b - a) * -1;
}
count = c / 10;
n = c % 10;
if (n > 0 && n <= 3)
{
count += n;
}
else if (n > 3 && n <= 7)
{
count += 1;
if (n - 5 < 0) {
count += (n - 5) * -1;
}
else {
count += n - 5;
}
}
else if (n>7&&n<=9)
{
count += (10-n)+1;
}
else
{
}
if (a == b) {
printf("0");
return 0;
}
printf("%d", count);
return 0;
}*/
/*
#include<stdio.h>
int max = 0;
int f()
{
}
int main()
{
int a[100005] = { 0 };
int n;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++) {
scanf_s("%d", &a[i]);
max += a[i];
}
printf("%d", max);
return 0;
}*/
/*
#include<stdio.h>
int main()
{
int i,j;
scanf_s("%d", &j);
int a = 0, b = 1;
int c;
for (i = 0; i < j; i++) {
c = b;
b = (a + b)% 100000007;
a = c;
}
printf("%d", b );
return 0;
}*/
/*
#include<stdio.h>
int main()
{
int a[100001] = { 0,0,0,2 };
int n;
scanf_s("%d", &n);
for (int i = 4; i <= n; i++)
{
a[i] = (2 * a[i - 3]) % 100000007;
}
printf("%d", a[n]);
return 0;
}*/
/*
#include<stdio.h>
int main() {
int a[10001] = { 0,1,2 };
int n;
scanf_s("%d", &n);
for (int i = 3; i <= n; i++)
{
a[i] = (a[i - 2] + a[i - 1]) % 100000007;
}
printf("%d", a[n]);
return 0;
}*/
//RGB ms
/*
#include<stdio.h>
int a[1005][3] = { 0 };
int sum = 0;
int f(int c, int n)
{
sum += a[1][c];
int d, e;
for (int i = 2; i <= n; i++) {
if (c == 0) {
d = 1;
e = 2;
}
else if (c == 1)
{
d = 0;
e = 2;
}
else
{
d = 0;
e = 1;
}
sum += (a[i][d] < a[i][e] ? a[i][d] : a[i][e]);
c = (a[i][d] < a[i][e] ? d : e);
}
return sum;
}
int main() {
int n;
int b = 10001;
int c;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int j = 0; j < 3; j++)
{
scanf_s("%d", &a[i][j]);
}
}
int x = f(0, n);
int y = f(1, n)-x;
int z = f(2, n)-y-x;
if (x < y && x < z)
{
printf("%d", x);
return 0;
}
if (y < x && y < z)
{
printf("%d", y);
return 0;
}
if (z < x && z < y)
{
printf("%d", z);
return 0;
}
}*/
//RGB
#include <stdio.h>
int n;
int c[1001][3];
int memo[1001][3] = { 0, };
int MIN(int a, int b) {
return a > b ? b : a;
}
int f(int now, int count) {
int a, b;
if (now == 0)
{
a = 1;
b = 2;
}
if (now == 1)
{
a = 0;
b = 2;
}
if (now == 2)
{
a = 0;
b = 1;
}
if (count == n - 1)
{
return c[count][now];
}
if (memo[count][now] != 0)
{
return memo[count][now];
}
else
{
return memo[count][now] = MIN(c[count][now] + f(a, count + 1), c[count][now] + f(b, count + 1));
}
}
int main() {
scanf_s("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
scanf_s("%d", &c[i][j]);
}
}
printf("%d", MIN(MIN(f(0, 0), f(1, 0)), f(2, 0)));
return 0;
}