foo.cc:14:10: error: 'int y1' redeclared as different kind of entity
14 | int n,x1,y1,x2,y2;
| ^~
In file included from /usr/include/features.h:461,
from /usr/include/x86_64-linux-gnu/c++/9/bits/os_defines.h:39,
from /usr/include/x86_64-linux-gnu/c++/9/bits/c++config.h:528,
from /usr/include/c++/9/iostream:38,
from foo.cc:1:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: note: previous declaration 'double y1(double)'
221 | __MATHCALL (y1,, (_Mdouble_));
| ^~~~~~~~~~
foo.cc: In function 'int main()':
foo.cc:17:12: error: no match for 'operator>>' (operand types are 'std::basic_istream<char>::__istream_type' {aka 'std::basic_istream<char>'} and 'double(double) throw ()' {aka 'double(double)'})
17 | cin>>n>>x1>>y1>>x2>>y2;
| ~~~~~~~~~~^~~~
| | |
| | double(double) throw () {aka double(double)}
| std::basic_istream<char>::__istream_type {aka std::basic_istream<char>}
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:120:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
120 | operator>>(__istream_type& (*__pf)(__istream_type&))
| ^~~~~~~~
/usr/include/c++/9/istream:120:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&)' {aka 'std::basic_istream<char>& (*)(std::basic_istream<char>&)'} [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:124:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<char>]' <near match>
124 | operator>>(__ios_type& (*__pf)(__ios_type&))
| ^~~~~~~~
/usr/include/c++/9/istream:124:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&)' {aka 'std::basic_ios<char>& (*)(std::basic_ios<char>&)'} [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:131:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
131 | operator>>(ios_base& (*__pf)(ios_base&))
| ^~~~~~~~
/usr/include/c++/9/istream:131:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'std::ios_base& (*)(std::ios_base&)' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:168:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
168 | operator>>(bool& __n)
| ^~~~~~~~
/usr/include/c++/9/istream:168:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: warning: the address of 'double y1(double)' will never be NULL [-Waddress]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
foo.cc:17:14: error: cannot bind non-const lvalue reference of type 'bool&' to an rvalue of type 'bool'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:172:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char; _Traits = std::char_traits<char>]' <near match>
172 | operator>>(short& __n);
| ^~~~~~~~
/usr/include/c++/9/istream:172:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'short int' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(short int)y1' to 'short int&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:175:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
175 | operator>>(unsigned short& __n)
| ^~~~~~~~
/usr/include/c++/9/istream:175:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'short unsigned int' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(short unsigned int)y1' to 'short unsigned int&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:179:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char; _Traits = std::char_traits<char>]' <near match>
179 | operator>>(int& __n);
| ^~~~~~~~
/usr/include/c++/9/istream:179:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'int' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(int)y1' to 'int&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:182:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
182 | operator>>(unsigned int& __n)
| ^~~~~~~~
/usr/include/c++/9/istream:182:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'unsigned int' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(unsigned int)y1' to 'unsigned int&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:186:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
186 | operator>>(long& __n)
| ^~~~~~~~
/usr/include/c++/9/istream:186:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'long int' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(long int)y1' to 'long int&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:190:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
190 | operator>>(unsigned long& __n)
| ^~~~~~~~
/usr/include/c++/9/istream:190:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'long unsigned int' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(long unsigned int)y1' to 'long unsigned int&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:195:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
195 | operator>>(long long& __n)
| ^~~~~~~~
/usr/include/c++/9/istream:195:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'long long int' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(long long int)y1' to 'long long int&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:199:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
199 | operator>>(unsigned long long& __n)
| ^~~~~~~~
/usr/include/c++/9/istream:199:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'long long unsigned int' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(long long unsigned int)y1' to 'long long unsigned int&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:235:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>
235 | operator>>(void*& __p)
| ^~~~~~~~
/usr/include/c++/9/istream:235:7: note: conversion of argument 1 would be ill-formed:
foo.cc:17:14: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'void*' [-fpermissive]
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
| |
| double (*)(double) throw () {aka double (*)(double)}
foo.cc:17:14: error: cannot bind rvalue '(void*)y1' to 'void*&'
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:214:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]'
214 | operator>>(float& __f)
| ^~~~~~~~
/usr/include/c++/9/istream:214:25: note: no known conversion for argument 1 from 'double(double) throw ()' {aka 'double(double)'} to 'float&'
214 | operator>>(float& __f)
| ~~~~~~~^~~
/usr/include/c++/9/istream:218:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]'
218 | operator>>(double& __f)
| ^~~~~~~~
/usr/include/c++/9/istream:218:26: note: no known conversion for argument 1 from 'double(double) throw ()' {aka 'double(double)'} to 'double&'
218 | operator>>(double& __f)
| ~~~~~~~~^~~
/usr/include/c++/9/istream:222:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]'
222 | operator>>(long double& __f)
| ^~~~~~~~
/usr/include/c++/9/istream:222:31: note: no known conversion for argument 1 from 'double(double) throw ()' {aka 'double(double)'} to 'long double&'
222 | operator>>(long double& __f)
| ~~~~~~~~~~~~~^~~
/usr/include/c++/9/istream:259:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]'
259 | operator>>(__streambuf_type* __sb);
| ^~~~~~~~
/usr/include/c++/9/istream:259:36: note: no known conversion for argument 1 from 'double(double) throw ()' {aka 'double(double)'} to 'std::basic_istream<char>::__streambuf_type*' {aka 'std::basic_streambuf<char>*'}
259 | operator>>(__streambuf_type* __sb);
| ~~~~~~~~~~~~~~~~~~^~~~
In file included from /usr/include/c++/9/string:56,
from /usr/include/c++/9/bits/locale_classes.h:40,
from /usr/include/c++/9/bits/ios_base.h:41,
from /usr/include/c++/9/ios:42,
from /usr/include/c++/9/ostream:38,
from /usr/include/c++/9/iostream:39,
from foo.cc:1:
/usr/include/c++/9/bits/basic_string.tcc:1466:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)'
1466 | operator>>(basic_istream<_CharT, _Traits>& __in,
| ^~~~~~~~
/usr/include/c++/9/bits/basic_string.tcc:1466:5: note: template argument deduction/substitution failed:
foo.cc:17:14: note: mismatched types 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>' and 'double(double) throw ()' {aka 'double(double)'}
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
In file included from /usr/include/c++/9/istream:991,
from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/bits/istream.tcc:931:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT&)'
931 | operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
| ^~~~~~~~
/usr/include/c++/9/bits/istream.tcc:931:5: note: template argument deduction/substitution failed:
foo.cc:17:14: note: deduced conflicting types for parameter '_CharT' ('char' and 'double(double) throw ()' {aka 'double(double)'})
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:756:5: note: candidate: 'template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned char&)'
756 | operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
| ^~~~~~~~
/usr/include/c++/9/istream:756:5: note: template argument deduction/substitution failed:
foo.cc:17:14: note: cannot convert 'y1' (type 'double(double) throw ()' {aka 'double(double)'}) to type 'unsigned char&'
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:761:5: note: candidate: 'template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char&)'
761 | operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
| ^~~~~~~~
/usr/include/c++/9/istream:761:5: note: template argument deduction/substitution failed:
foo.cc:17:14: note: cannot convert 'y1' (type 'double(double) throw ()' {aka 'double(double)'}) to type 'signed char&'
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
In file included from /usr/include/c++/9/istream:991,
from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/bits/istream.tcc:963:5: note: candidate: 'template<class _CharT2, class _Traits2> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT2*)'
963 | operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
| ^~~~~~~~
/usr/include/c++/9/bits/istream.tcc:963:5: note: template argument deduction/substitution failed:
foo.cc:17:14: note: deduced conflicting types for parameter '_CharT2' ('char' and 'double(double) throw ()' {aka 'double(double)'})
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:803:5: note: candidate: 'template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned char*)'
803 | operator>>(basic_istream<char, _Traits>& __in, unsigned char* __s)
| ^~~~~~~~
/usr/include/c++/9/istream:803:5: note: template argument deduction/substitution failed:
foo.cc:17:14: note: cannot convert 'y1' (type 'double(double) throw ()' {aka 'double(double)'}) to type 'unsigned char*'
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:808:5: note: candidate: 'template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char*)'
808 | operator>>(basic_istream<char, _Traits>& __in, signed char* __s)
| ^~~~~~~~
/usr/include/c++/9/istream:808:5: note: template argument deduction/substitution failed:
foo.cc:17:14: note: cannot convert 'y1' (type 'double(double) throw ()' {aka 'double(double)'}) to type 'signed char*'
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
In file included from /usr/include/c++/9/iostream:40,
from foo.cc:1:
/usr/include/c++/9/istream:980:5: note: candidate: 'template<class _Istream, class _Tp> typename std::enable_if<std::__and_<std::__not_<std::is_lvalue_reference<_Tp> >, std::__is_convertible_to_basic_istream<_Istream>, std::__is_extractable<typename std::__is_convertible_to_basic_istream<_Tp>::__istream_type, _Tp&&, void> >::value, typename std::__is_convertible_to_basic_istream<_Tp>::__istream_type>::type std::operator>>(_Istream&&, _Tp&&)'
980 | operator>>(_Istream&& __is, _Tp&& __x)
| ^~~~~~~~
/usr/include/c++/9/istream:980:5: note: template argument deduction/substitution failed:
/usr/include/c++/9/istream: In substitution of 'template<class _Istream, class _Tp> typename std::enable_if<std::__and_<std::__not_<std::is_lvalue_reference<_Tp> >, std::__is_convertible_to_basic_istream<_Istream>, std::__is_extractable<typename std::__is_convertible_to_basic_istream<_Tp>::__istream_type, _Tp&&, void> >::value, typename std::__is_convertible_to_basic_istream<_Tp>::__istream_type>::type std::operator>>(_Istream&&, _Tp&&) [with _Istream = std::basic_istream<char>&; _Tp = double (&)(double)]':
foo.cc:17:14: required from here
/usr/include/c++/9/istream:980:5: error: no type named 'type' in 'struct std::enable_if<false, std::basic_istream<char>&>'
In file included from foo.cc:12:
/usr/include/c++/9/bitset:1470:5: note: candidate: 'template<class _CharT, class _Traits, long unsigned int _Nb> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, std::bitset<_Nb>&)'
1470 | operator>>(std::basic_istream<_CharT, _Traits>& __is, bitset<_Nb>& __x)
| ^~~~~~~~
/usr/include/c++/9/bitset:1470:5: note: template argument deduction/substitution failed:
foo.cc:17:14: note: mismatched types 'std::bitset<_Nb>' and 'double(double) throw ()' {aka 'double(double)'}
17 | cin>>n>>x1>>y1>>x2>>y2;
| ^~
foo.cc:20:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
20 | scanf("%d%d%d%d",&xi1,&yi1,&xi2,&yi2);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~