#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
//動態數組實現多維向量點
class Point
{
private:
int *data;
int dimension;
public:
Point(int);
Point(int*,int);
Point operator+(const Point&);
Point operator-(const Point&);
Point& operator=(const Point&);
void print();
~Point();
};
Point::Point(int n)
{
dimension = n;
data = new int [n];
}
Point::Point(int *a,int n){
data=new int[n];
dimension=n;
for(int i=0;i<n;i++){
data[i]=a[i];
}
}
Point::~Point(){
delete[]data;
}
void Point::print(){
std::cout<<"(";
for(int i=0;i<dimension;++i){
if(i!=0)std::cout<<",";
std::cout<<data[i];
}
std::cout<<")\n";//等下根據輸出情況來看下是否需要輸出\n
}
Point& Point::operator=(const Point& p){
if(dimension!=p.dimension){
delete[]data;
dimension=p.dimension;
data=new int [dimension];
}
for(int i=0;i<dimension;i++){
data[i]=p.data[i];
}
return *this;
}
Point Point::operator +(const Point& p){
int d = max(p.dimension,dimension);
int* a=new int [d];
memset(a,0,d);
int t = min(dimension,p.dimension);
for(int i=0;i<t;++i){
a[i]=data[i]+p.data[i];
}
if(t < dimension){
for(int i=t;i<d;++i){
a[i] = data[i];
}
}else if(t < p.dimension){
for(int i=t;i<d;++i){
a[i] = p.data[i];
}
}
Point temp(a,d);
delete []a;
return temp;
}
Point Point::operator -(const Point& p){
int d = max(p.dimension,dimension);
int* a=new int [d];
memset(a,0,d);
int t = min(dimension,p.dimension);
for(int i=0;i<t;++i){
a[i]=data[i]-p.data[i];
}
if(t < dimension){
for(int i=t;i<d;++i){
a[i] = data[i];
}
}else if(t < p.dimension){
for(int i=t;i<d;++i){
a[i] = -p.data[i];
}
}
Point temp(a,d);
delete []a;
return temp;
}
int main(){
int n,m;
cin>>n;
int *temp1 = new int [n];
for(int i = 0 ; i < n ; i++)
cin>>temp1[i];
Point a(temp1,n);
a.print();
cin>>m;
int *temp2 = new int [m];
for(int i = 0 ; i < m ; i++)
cin>>temp2[i];
Point b(temp2,m);
b.print();
delete []temp1;
delete []temp2;
(a+b).print();
Point c = a-b;
c.print();
return 0;
}
//比較簡單,內附有測試main函數,可以說是非常良心了hhhhh(本肥宅得意地叉會腰)