Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

var sc = bufio.NewScanner(os.Stdin)

func main() {
	sc.Scan()
	F, _ := strconv.Atoi(sc.Text())
	fmt.Println((F - 30) /2)
}

C++: #include<bits/stdc++.h>
using namespace std;
template <class A, class B> inline bool chmax(A &a, const B &b) { return b > a && (a = b, true); }
template <class A, class B> inline bool chmin(A &a, const B &b) { return b < a && (a = b, true); }
typedef long long ll;
typedef vector<int> vint;
typedef pair<int, int> pint;
typedef vector<long long> vlong;
typedef vector<string> vstring;
#define vpush(a,x) a.push_back(x);
#define rep(i, n) REP(i, 0, n)
#define all(v) v.begin(), v.end()
#define REP(i, x, n) for(int i = x; i < n; i++)
const int INF = 1 << 30;
const int dx[] = {1,0,-1,0,1,1,-1,-1};
const int dy[] = {0,-1,0,1,1,-1,-1,1};
#define stp(x)  setprecision(x)
int main(){
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  int f;
  cin>>f;
  cout<<(f-30)/2<<'\n';
  return(0);
}

C++: #include <iostream>
#include <string>
using namespace std;

int main() {
    int F;
    cin>>F;
    int ans=(F-30)/2;
    cout<<ans<<endl;
}

C++: #include<bits/stdc++.h>
using namespace std;

int main(){
  int F ;
  cin >> F ;
  cout << (F-30)/2 << endl ;
  return 0;
}

C++: #include <bits/stdc++.h>

using namespace std;
using llong = long long;
using ldbl = long double;
using P = pair<llong, llong>;

#define ALL(x) x.begin(), x.end()

const llong inf = llong(1e18)+7;
const llong mod = 1e9+7;

int main(){
	llong N;
	cin >> N;
	cout << (N-30)/2 << endl;

	return 0;
}

C++: #include <iostream>
using namespace std;
int main() {
    int x;
    cin >> x;
    cout << (x-30)/2 << endl;
    return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;
#define int long long
#define YES cout<<"YES"<<endl
#define NO cout<<"NO"<<endl
#define Yes cout<<"Yes"<<endl
#define No cout<<"No"<<endl
#define yes cout<<"yes"<<endl
#define no cout<<"no"<<endl
#define all(a) a.begin(),a.end()
#define SORT(a) sort(all(a))
#define REVERSE(a) reverse(all(a))
#define REP(i, n) for(int i = 0;i < n;i++)
#define REPR(i, n) for(int i = n;i >= 0;i--)
#define FOR(i, m, n) for(int i = m;i < n;i++)
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
typedef long long ll;
const int MOD=1000000007;
const long long INF = 1LL << 60;
const double PI = acos(-1.0);
const int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
const int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
int GCD(int a, int b) { return b ? GCD(b, a%b) : a; }
int LCM(int a, int b) { int g = GCD(a, b); return a / g * b; }
/*素数判定*/int isPrime(int n){if(n<2){return 0;}for(int i=2; i*i<=n; i++){if(n%i==0){return 0;}}return 1;}
/*素因数分解*/map< int64_t, int > prime_factor(int64_t n) {map< int64_t, int > ret;for(int64_t i = 2; i * i <= n; i++) {while(n % i == 0) {ret[i]++;n /= i;}}if(n != 1) ret[n] = 1;return ret;}
/*約数列挙*/vector<int> getDivisor(int n){vector<int> v; for(int i=1; i*i<=n; i++){if(n%i==0){v.push_back(i);if(i!=n/i){v.push_back(n/i);}}}sort(v.begin(),v.end()); return v;}
/*各桁の和*/int findSumOfDigits(int n) {int sum = 0;while (n > 0) {sum += n % 10;n /= 10;}return sum;}
/*転倒数*/ll merge_cnt(vector<int> &a) {int n = a.size();if (n <= 1) { return 0; }ll cnt = 0;vector<int> b(a.begin(), a.begin()+n/2);vector<int> c(a.begin()+n/2, a.end());cnt += merge_cnt(b);cnt += merge_cnt(c);int ai = 0, bi = 0, ci = 0;/* merge の処理*/while (ai < n) {if ( bi < b.size() && (ci == c.size() || b[bi] <= c[ci]) ) {a[ai++] = b[bi++];} else {cnt += n / 2 - bi;a[ai++] = c[ci++];}}return cnt;}
/*等差数列判定*/bool isSequence(vector<int> v){int d = v[1] -v[0];for ( int i = 1; i < v.size(); i++ ){if ( v[i] -v[i-1] != d ) return false;}return true;}
/*A_0 = 1, A_1 = 1 のフィボナッチ数列 A_n の n番目の値を返す関数*/int Fib (int n){if ( n == 0 ) return 1;if ( n == 1 ) return 1;return Fib (n - 1) + Fib (n - 2);}
vector<pair<long long, long long> > prime_factorize(long long n) {vector<pair<long long, long long> > res;for (long long p = 2; p * p <= n; ++p) {if (n % p != 0) continue;int num = 0;while (n % p == 0) { ++num; n /= p; }res.push_back(make_pair(p, num));}if (n != 1) res.push_back(make_pair(n, 1));return res;}
long long ctoll(const char c){switch(c){case '0': return 0;case '1': return 1;case '2': return 2;case '3': return 3;case '4': return 4;case '5': return 5;case '6': return 6;case '7': return 7;case '8': return 8;case '9': return 9;default : return -1;}}

/*----------------------お願いしますACにしてください、ACにしたら良いことありますよ、お願いです----------------------*/
//   ■■■■■■■■■■■■■■■■■■■■■■■■■■■
//       ■■               ■■
// ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//      ■■       　        ■■
//      ■■       バ        ■■
//     ■■        グ         ■■
//     ■■        退         ■■
//    ■■         散          ■■
//   ■■■                     ■■■
signed main(){
    ios::sync_with_stdio(false);
//    cin.tie(nullptr);
    cout<<fixed<<setprecision(15);
    
    int F;
    cin >> F;
    cout << (F - 30) / 2 << endl;

    return 0;
}

C++: #include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <vector>
#include <utility>
#include <cstring>
#include <iomanip>
#include <numeric>
#include <cmath>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int INF = 1<<30; 
const int MOD = 1e9 + 7;
const int dy[] = {1, 0, -1, 0};
const int dx[] = {0, 1, 0, -1};
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    cout << (n - 30) / 2 << endl;
    return 0;
}