The numbers of all offices in the new building of the Tax Office of IT City will have lucky numbers.

Lucky number is a number that consists of digits 7 and 8 only. Find the maximum number of offices in the new building of the Tax Office given that a door-plate can hold a number not longer than *n* digits.
The only line of input contains one integer *n* (1 ≤ *n* ≤ 55) — the maximum length of a number that a door-plate can hold.
none
2
6
1
2
3
14
5
62
12
8190
34
34359738366
43
17592186044414
49
1125899906842622
54
36028797018963966
55
72057594037927934
#include<bits/stdc++.h>
using namespace std;
#define str string
#define append push_back
#define vi vector<int>
#define vv vector<vector<long long>>
#define vl vector<long long>
#define ul unordered_map<int,vector<int>>
#define ub unordered_map<int,bool>
#define ui unordered_map<int,int>
#define ll long long
#define int long long
#define yes cout<<"YES"<<endl;
#define no cout<<"NO"<<endl;
#define endl '\n'
int prime_factorize(int n){
    if (n==1){return 1;}
    int root=sqrt(n);
    int count=1;
    for(int i=2;i<=n;i++){
        int count2=1;
        while (n%i==0){
            cout<<i<<' ';
            count2++;
            n/=i;
        }
        count*=count2;
    }
    cout<<endl;
    return count;
}
int unfairness(int n){
    int count=0;
    for(int i=0;i<60;i++){
        int power=(1ll<<i);
        if(n&(power)){count+=(1ll<<(i+1))-1;}
    }
    return count;
}
int max(int n,int m){if(n>m){return n;}return m;}
int min(int n,int m){if(n<m){return n;}return m;}
int factorial(int n){
    if (n == 0 or n == 1) 
        return 1; 
    return n * factorial(n - 1); 
} 
void dfs(int node,int s_node,ul &d,ub &ks,vector<bool> &visited,int count,int &maxi,bool &flag){
    if (visited[node-1]==true){count--;return;}
    visited[node-1]=true;
    if (ks[node] and node!=s_node){
        flag=true;
        maxi=max(maxi,count);}
    for(auto i:d[node]){
        dfs(i,s_node,d,ks,visited,count+1,maxi,flag);
    }
}
ll get(vector<int>&parent,int x){
        if (parent[x]!=x){
                parent[x] = get(parent,parent[x]);
        }
        return parent[x];
}
void union_(vector<int>&parent,vector<int>&size,int x_root ,int y_root){
        x_root=get(parent,x_root);
        y_root = get(parent,y_root);
        if (x_root==y_root){
                return ;
        }
        if (size[x_root]<size[y_root]){
            swap(y_root,x_root);
        }
        parent[y_root]=parent[x_root];
        size[x_root]+=size[y_root];
}
int lowbit(int n){
    return (n & (-n));
}
int product(vector<int>ls){
    int count=0;
    for(auto i:ls){
        count*=(i+1);
    }
    return count;
}
void print(vector<ll> ls){for(auto a:ls) cout<<a<<" ";cout<<endl;}
vector<int> input(long long n){vector<int>ls(n);for(ll i = 0 ; i < n ; i++){cin>>ls[i];}return ls;}
int arr[10000];
bool check(vector<int> a,vector<int>b){
    return a[0]<b[0];
}
int xortill_n(const int n){
    if (n%4==0){
        return n;
    }
    else if (n%4==1){
        return 1;
    }
    else if (n%4==2){
        return n+1;
    }
    return 0;
}
void solve(){
    int n;cin>>n;cout<<(1ll<<(n+1))-2<<endl;
}
signed main(){
    // int t;
    // cin>>t;
    // while (t--){
        solve();
    // }
}