#include <iostream>
#include <vector>
#include <deque>
#include <utility>
#include <stack>
#include <queue>
#include <algorithm>
#define el '\n'
#define ll long long
using namespace std ;
int main()
{
/*==============================================*/
//! odd and even problem with array
//! You are given an array of size n print
//! the number of even numbers and the even numbers and
//! the number of odd numbers and the odd numbers
// int n = 10 ;
// int a[n] ;
// for ( int i = 0 ; i < n ; i ++ )
// cin >> a[i] ;
// int even_counter = 0 , odd_counter = 0 ;
// int even_nums[n] , odd_nums[n] ;
// for ( int i = 0 ; i < n ; i ++ )
// {
// if ( a[i] % 2 == 0 )
// {
// even_nums[i] = a[i] ;
// even_counter ++ ;
// }
// else
// {
// odd_nums[i] = a[i] ;
// odd_counter ++ ;
// }
// }
// cout << even_counter << ' ' << odd_counter << el ;
// for ( int i = 0 ; i < even_counter ; i ++ ) cout << even_nums[i] << ' ' ;
// cout << el ;
// for ( int i = 0 ; i < odd_counter ; i ++ ) cout << odd_nums[i] << ' ' ;
/*==============================================*/
//? What is the vector ?
//! vecor = arry with dynamic size
//? How to declare vector ?
//? vector < data type > name ;
// vector < int > v = { 1 , 2 , 3 , 4 , 5 } ;
// for ( int i = 0 ; i < 5 ; i ++ )
// cout << v[i] << ' ' ;
// vector < string > v2 (3) ;
// for ( int i = 0 ; i < 3 ; i ++ ) cin >> v2[i] ;
// for ( int i = 0 ; i < 3 ; i ++ ) cout << v2[i] << ' ' ;
//? vector built-in functions :
//! 1 second = 1e8
// for ( int i = 0 ; i < 5 ; i ++ ) cout << "Hi" << el ; O(5)
// cout << "ramy" << el ; O(1) ;
// 1 <= n <= 1e8
// vector < int > v (n) ; O(log(n) ) ;
//? push_back() O(1)
// vector < int > v ;
// ll n = 5 ;
// for ( int i = 0 ; i < n ; i ++ )
// {
// int x ; cin >> x ;
// v.push_back(x) ;
// }
// for ( int i = 0 ; i < n ; i ++ )
// {
// cout << v[i] << ' ' ;
// }
//? pop_back() O(1)
// vector < int > v = { 1 , 4 , 5 , 12 , 3 } ;
// for ( int i = 0 ; i < 5 ; i ++ )
// cout << v[i] << ' ' ;
// cout << el ;
// v.pop_back() ;
// for ( int i = 0 ; i < 4 ; i ++ )
// cout << v[i] << ' ' ;
// cout << el ;
// v.pop_back() ;
// for ( int i = 0 ; i < 3 ; i ++ )
// cout << v[i] << ' ' ;
// cout << el ;
// v.pop_back() ;
// for ( int i = 0 ; i < 2 ; i ++ )
// cout << v[i] << ' ' ;
// cout << el ;
// v.pop_back() ;
// for ( int i = 0 ; i < 1 ; i ++ )
// cout << v[i] << ' ' ;
// cout << el ;
// v.pop_back() ;
// for ( int i = 0 ; i < 0 ; i ++ )
// cout << v[i] << ' ' ;
// cout << el ;
// v.pop_back() ;
//? size() , empty() O(1)
// vector < int > v = { 1 , 4 , 5 , 12 , 3 } ;
// if ( v.size() != 0 ) v.pop_back() ;
// vector < int > v2 ;
// if ( !v.empty() ) cout << " THE vector is empty " << el ;
//? front() , back() O(1)
// vector < int > v = { 1 , 4 , 5 , 12 , 3 } ;
// ll n = 5 ;
// vector < int > v2( n , -1 ) ;
// for ( int i = 0 ; i < n ; i ++ ) cout << v2[i] << ' ' ;
// cout << el ;
// cout << v[0] << ' ' << v[4] << el ;
// cout << v.front() << ' ' << v.back() << el ;
//? begin() , end() --> O(1) , sort() O( n * log n ) and reverse() O(n)
// vector size = 1e8 --> 1e8 * 26
// vector < int > v = { 1 , 4 , 5 , 12 , 3 } ;
// cout << v[v.size()] << el ;
// cout << *( v.begin() + 2 ) << ' ' << * ( v.end() - 1 ) << el ;
// sort ( v.begin() , v.end() , greater <int>() ) ;
// for ( int i = 0 ; i < v.size() ; i ++ )
// cout << v[i] << ' ' ;
// cout << el ;
// reverse ( v.begin() , v.end() ) ;
// for ( int i = 0 ; i < v.size() ; i ++ )
// cout << v[i] << ' ' ;
//? insert() O(n) , erase() O(n)
// vector < int > v = { 1 , 4 , 5 , 12 , 3 } ;
// v.insert( v.begin() + 3 , 5 ) ;
// for ( int i = 0 ; i < v.size() ; i ++ ) cout << v[i] << ' ' ;
// cout << el ;
// v.erase ( v.begin() ) ;
// v.erase ( v.begin() + 1 , v.begin() + 3 ) ;
// for ( int i = 0 ; i < v.size() ; i ++ ) cout << v[i] << ' ' ;
//? unique() O ( n * log n + n + n )
// vector < int > v = { 1 , 1 , 1 , 2 ,5 , 2 , 7 , 9 , 1 , 2 } ;
// sort ( v.begin() , v.end() ) ;
// for ( int i = 0 ; i < v.size() ; i ++ ) cout << v[i] << ' ' ;
// cout << el ;
// v.erase ( unique ( v.begin() , v.end() ) , v.end() ) ;
// for ( int i = 0 ; i < v.size() ; i ++ ) cout << v[i] << ' ' ;
// cout << el ;
//? + advantage O(N)
// vector < int > v = { 1 , 1 , 1 , 1 }, v2 = { 1 , 1 , 1 } ;
// for ( int i = 0 ; i < v.size() ; i ++ ) cout << v[i] << ' ' ;
// cout << el ;
// // v = v2 ;
// for ( int i = 0 ; i < v.size() ; i ++ ) cout << v[i] << ' ' ;
// cout << el ;
//? odd and even problem with vector
//! O ( n + n + n ) O (3n) = O(n)
// ll n ; cin >> n ;
// vector < int > v (n) ;
// for ( int i = 0 ; i < n ; i ++ ) cin >> v[i] ;
// vector < int > even , odd ;
// for ( int i = 0 ; i < n ; i ++ )
// {
// if ( v[i] % 2 == 0 )
// {
// even.push_back(v[i]) ;
// }
// else
// odd.push_back(v[i]) ;
// }
// cout << even.size() << el ;
// for ( int i = 0 ; i < even.size() ; i ++ ) cout << even[i] << ' ' ;
// cout << el ;
// cout << odd.size() << el ;
// for ( int i = 0 ; i < odd.size() ; i ++ ) cout << odd[i] << ' ' ;
// cout << el ;
/*==============================================*/
//* What is the deque ?
//! deque = v + push_front() + pop_front()
//! O(1)
//* How to declare deque ?
// deque < int > dq ;
// for ( int i = 0 ; i < 5 ; i ++ )
// {
// ll x ; cin >> x ;
// dq.push_back(x) ;
// }
// for ( int i = 0 ; i < 5 ; i ++ )
// {
// ll x ; cin >> x ;
// dq.push_front(x) ;
// }
// //* deque built-in functions :
// //* push_front() and pop_front()
// sort ( dq.rbegin() , dq.rend() ) ;
// cout << dq.size() << el ;
// dq.pop_front() ;
// cout << dq.size() << el ;
// dq.pop_back() ;
// cout << dq.size() << el ;
// for ( int i = 0 ; i < dq.size() ; i ++ ) cout << dq[i] << ' ' ;
// deque < int > dq2 = dq ;
// for ( int i = 0 ; i < dq2.size() ; i ++ ) cout << dq2[i] << ' ' ;
/*==============================================*/
//TODO what is the pair ?
//TODO How to declare pair ?
// pair < string , int > p ;
// p = { "Ahmed" , 5000 } ;
// pair < int , int > p2 = { 1 , 3 } ;
// pair < string , char > p3 ;
// p3 = make_pair( "mohamed" , 'A' ) ;
//TODO pair built-in functions ?
//TODO first , second ?
//! O(1)
// cout << p.first << ' ' << p.second << el ;
//TODO pair of pairs ?
// pair < string , pair < double , char > > p = { "Ahmed" , { 3.77 , 'A' }} ;
// cout << p.first << ' ' << p.second.first << ' ' << p.second.second << el ;
//TODO pair + vector ?
// for ( int i = 0 ; i < 5 ; i ++ )
// {
// cin >> v[i].first >> v[i].second ;
// }
// cout << el ;
// for ( int i = 0 ; i < 5 ; i ++ )
// cout << v[i].first << ' ' << v[i].second << el ;
// sort ( v.rbegin() , v.rend() ) ;
// for ( int i = 0 ; i < 5 ; i ++ )
// cout << v[i].first << ' ' << v[i].second << el ;
// cout << el ;
// ahmed 2000
// ramy 2000
// mohamed 3000
// ali 4000
// khaled 5000
//TODO compare function ?
// vector < pair < string , int > > v(5) ;
// for ( int i = 0 ; i < 5 ; i ++ ) cin >> v[i].first >> v[i].second ;
// cout << el ;
// sort ( v.begin() , v.end() , cmp ) ;
// for ( int i = 0 ; i < 5 ; i ++ ) cout << v[i].first << ' ' << v[i].second << el ;
// cout << el ;
/*==============================================*/
//! break :)
/*==============================================*/
//? What is the stack ?
//? How to declare stack ?
// stack < int > st ;
// ll n = 5 ;
// for ( int i = 0 ; i < n ; i ++ )
// {
// ll x ; cin >> x ;
// st.push( x ) ;
// }
// cout << st.size() << el ;
// while ( !st.empty())
// {
// cout << st.top() << el ;
// st.pop() ;
// }
// cout << st.size() << el ;
//? stack built-in functions :
//? push() , pop() , top()
/*==============================================*/
//* What is the queue ?
//* How to declare queue ?
// queue < int > q ;
// ll n = 5 ;
// for ( int i = 0 ; i < n ; i ++ )
// {
// ll x ; cin >> x ;
// q.push(x) ;
// }
// cout << q.size() << el ;
// cout << q.front() << ' ' << q.back() << el ;
// while ( !q.empty() )
// {
// cout << q.front() << el ;
// q.pop() ;
// }
// cout << q.size() << el ;
//* queue built-in functions :
//* push() and pop()
//* back() and front()
/*==============================================*/
//TODO what is the priority_queue ?
//TODO How to declare priority_queue ?
// priority_queue < int > pq ;
// priority_queue < int , vector < int > , greater<int> > pq2 ;
// ll n = 5 ;
// for ( int i = 0 ; i < 5 ; i ++ )
// {
// ll x ; cin >> x ;
// pq.push(x) ;
// pq2.push(x) ;
// }
// while (!pq.empty())
// {
// cout << pq.top() << ' ' ;
// pq.pop() ;
// }
// cout << el ;
// while (!pq2.empty())
// {
// cout << pq2.top() << ' ' ;
// pq2.pop() ;
// }
//TODO priority_queue built-in functions ?
//TODO push() , pop() , top()
//! O(log(n))
/*==============================================*/
//* problems
//* https://c...content-available-to-author-only...s.com/group/DtRtk7NkHg/contest/590124/problem/I
//* https://c...content-available-to-author-only...s.com/group/DtRtk7NkHg/contest/590124/problem/H
}