#include <iostream>
#include <ctime>
using namespace std;
void int_and_frac(float input, int &integer, float &fraction){
integer = (int) input;
fraction = input - integer;
}
int highest(int k){
int n=0;
int pot=1;
while(pot*2<k){
pot*=2;
n++;
}
return n;
}
bool zad8(float a, float b, float c){
if(a+b>c && a+c>b && b+c>a){
return 1;
}
return 0;
}
void zad9(float &a, float &b){
float tmp=a;
a = b;
b = tmp;
}
void copy_array(int arr[], int count, int dest[]){
for(int i = 0; i<count; i++){
dest[i] = arr[i];
}
}
/*int main()
{
int arr1[] = {1,2,3,4,5};
int count = sizeof(arr1) / sizeof(arr1[0]);
int arr2[count];
copy_array(arr1, count, arr2);
for (int i = 0; i < count; ++i) {
cout<<arr2[i]<<" ";
cout<<endl;
}
return 0;
}
*/
int factorial(int n){
int ilo=1;
for( int i = 1; i<=n; i++){
ilo*=i;
}
return ilo;
}
void fibseq_loop(int count,unsigned int dest[]){
dest[0] = 1;
dest[1] = 1;
for (int i=2; i<count; i++){
dest[i] = dest[i-1] + dest[i-2];
}
}
int fibreq(int a){
if(a==1 || a==2){
return 1;
}
return fibreq(a-1)+fibreq(a-2);
}
void zad13(float arr[],int size, int a, int b){
for(int i = 0; i < size; i++){
if(arr[i]< a || arr[i]> b){
arr[i] = 0;
}
}
}
int nwd(int a, int b){
int c;
while(b != 0){
c = a % b;
a = b;
b = c;
}
return a;
}
int nww(int a, int b){
return (a*b)/nwd(a,b);
}
int wl(char str[]){
int counter = 1;
for(int i = 0; str[i]; i++){
if(str[i] == ' ')
counter++;
}
return counter;
}
//int main()
//{
// char str[1024];
// std::cin.get(str, 1023);
// std::cout<<wl(str)<<std::endl;
//}
int rand1(int a, int b, int m, int n){
if(n==0)
return time(0)%m;
return (a*rand1(a,b,m,n-1)+b)%m;
}
//int main(){
// for(int i=0;i<50;i++){
// std::cout<<rand1(403,43,12,i)<<' ';
// }
// return 0;
//}
unsigned int req(unsigned int a, unsigned int b){
if(b==0)
return a;
if (b>a)
return req(b,a);
return a -b + req(a - 1, b) + req(a, b - 1);
}
int main(){
std::cout<<req(3,0)<<std::endl;
}