#include <iostream>
#include <vector>
#include <string>
#include <cstdlib> 

class largeNumber{
public:
	// constructor
	largeNumber(void);
	// constructor
	largeNumber(const std::string& a);
	// deconstructor
	~largeNumber(void);

	// wrapper of std::string
	char operator[](unsigned int i) const {
		return rawString[i];
	}
	unsigned int length() const {
		return (unsigned int)rawString.length();
	}

	// align the string
	void alignDigits(std::string& leftString, std::string& rightString) const;
	// add operation
	const largeNumber operator +(const class largeNumber& right) const;
	// add operation
	largeNumber& operator +=(const largeNumber& right){
		*this = *this + right;
		return *this;
	}
	// substitution
	largeNumber& operator =(const largeNumber& a){
		rawString = a.rawString;
		return *this;
	}

	std::string getString() const {
		return rawString;
	}

private:
	// container of the actual index/key/value
	std::string rawString;
};

std::ostream& operator << (std::ostream& out, const largeNumber& right);

largeNumber::largeNumber(void)
{
}


largeNumber::~largeNumber(void)
{
}

largeNumber::largeNumber(const std::string& a){
	rawString = a;
	bool hasNonNumberCharacter = false;
	for(unsigned int i = 0;i < rawString.length();i++){
		if(rawString[i] < '0' || '9' < rawString[i]){
			hasNonNumberCharacter = true;
			break;
		}
	}
	if(hasNonNumberCharacter){
		rawString = '0';
	}
}

void largeNumber::alignDigits(std::string& leftString, std::string& rightString) const {
	unsigned int maxLength = leftString.length() < rightString.length() ? rightString.length() : leftString.length(); // get the length of longest string

	int offset = (int)maxLength - (int)leftString.length();
	while(offset >= 0){
		leftString.insert(leftString.begin(), '0');
		offset--;
	}
	offset = (int)maxLength - (int)rightString.length();
	while(offset >= 0){
		rightString.insert(rightString.begin(), '0');
		offset--;
	}
	return;
}

const largeNumber largeNumber::operator +(const class largeNumber& right) const {
	std::string leftString = rawString;
	std::string rightString = right.rawString;
	alignDigits(leftString, rightString);

	char carryUp = 0;
	int i =0;
	for(i = leftString.length()-1;i > 0;i--){
		char a = leftString[i] - '0';
		char b = rightString[i] - '0';
		char c = a + b + carryUp;
		if(10 <= c){
			carryUp = 1;
			c -= 10;
		}else{
			carryUp = 0;
		}
		leftString[i] = c + '0';
	}
	if(carryUp == 1){
		// When carry up happens at the MSB
		leftString[0] = carryUp + '0';
	}else{
		// else
		leftString.erase(0,1);
	}
	return largeNumber(leftString);
}

std::ostream& operator << (std::ostream& out, const largeNumber& right)
{
	out << right.getString();
	return out;
}

std::vector<class largeNumber> fibonacci;

class largeNumber simpleFibonacciNumber2(int i)
{
	if(fibonacci.empty())
	{
		fibonacci.push_back(largeNumber("0"));
	}
	if(fibonacci.size() == 1)
	{
		fibonacci.push_back(largeNumber("1"));
	}
	if(fibonacci.size() == 2)
	{
		fibonacci.push_back(largeNumber("1"));
	}
	if(i <= 0)
	{
		return largeNumber("0");
	}
	if((unsigned int)i < fibonacci.size())
	{
		return fibonacci[i];
	}
	for(unsigned int j = fibonacci.size()-1;j < (unsigned int)i;j++)
	{
		class largeNumber p = fibonacci[fibonacci.size()-1];
		class largeNumber q = fibonacci[fibonacci.size()-2];
		fibonacci.push_back(p+q);
	}
	return fibonacci[i];
}

class largeNumber solveMayoiDoro(int n)
{
	class largeNumber retValue("0");
	for(int i = 1;i <= n;i += 2)
	{
		retValue += simpleFibonacciNumber2(i+2);
	}
	return retValue;
}

int main(int argc, char **argv)
{
	using namespace std;
	std::string stub;
	cin >> stub;
	int i = atoi(stub.c_str());

	cout << solveMayoiDoro(i) << endl;

	return 0;
}
