#pragma warning(disable:4786) 
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <fstream>
#include <numeric>
#include <utility>

using namespace std;

class parti
{
public:
	parti(){n=0;
                A[0].clear();
                A[1].clear();                
	};
     void  operator()(float mp)
	{
           if(n%2)A[1].push_back(mp);
           else A[0].push_back(mp);          
          n+=1;           
	}
public:
    vector<float> A[2]; int n;
};

void result(parti P,float s[2])
{
     float a,b,c,d; 
     vector<float> A[2]; 
     A[0]=P.A[0];A[1]=P.A[1];
	//a.sum_first=0;a.sum_first_square=0;a.sum_product=0;a.sum_second=0;
     a=accumulate(A[0].begin(),A[0].end(),0.00);       
     b=accumulate(A[1].begin(),A[1].end(),0.00);       
     c=inner_product(A[0].begin(),A[0].end(),A[1].begin(),0.00);       
     d=inner_product(A[0].begin(),A[0].end(),A[0].begin(),0.00);       
     
     
//cout <<"sum:"<<b.sum_first<<" "<<b.sum_first_square<<" "<<b.sum_product;
	//cout <<" "<<b.sum_second<<" "<<mp.size()<<endl;
     s[0]=(a*b-A[1].size()*c)/(a*a-A[1].size()*d);
     s[1]=(b-s[0]*a)/A[1].size();   
}
int main()
{ 
        cout<<"please input some pairs of numbers:\n";         
	istream_iterator <float> ii(cin);
	istream_iterator<float> eos;
	vector<float>	b;
        float c[2];
        parti C;
	copy(ii,eos,back_inserter(b));
        parti R=for_each(b.begin(),b.end(),parti());   
        result(R,c);
        cout <<"Y = "<<c[1]<<" + "<<c[0]<<"X\n";
	return 0;
} 

