#include <bits/stdc++.h>   using namespace std;   const long double PI = acos(-1);   pair<long double, long double> sum(pair<long double, long double> a,                                      pair<long double, long double> b) {     return {a.first + b.first, a.second + b.second};   }   long double cross(pair<long double, long double> a,                     pair<long double, long double> b) {     return a.first * b.second - b.first * a.second;   }   pair<long double, long double> prod(long double k,                                       pair<long double, long double> a) {     return {k * a.first, k * a.second};   }   pair<long double, long double> com(vector<pair<long double, long double> > &v) {     auto i = v.begin(), end = v.end(), j = end - 1;     auto ss = v.begin();     pair<long double, long double> res{0, 0};     long double A = 0;     for (; i != end; j = i++) {       pair<long double, long double> a = *i, b = *j;       a.first -= ss->first;       a.second -= ss->second;       b.first -= ss->first;       b.second -= ss->second;       res = sum(res, prod(cross(b, a), sum(a, b)));       A += cross(b, a);     }     return {res.first / A / 3 + ss->first, res.second / A / 3 + ss->second};   }   long double dist(pair<long double, long double> a,                    pair<long double, long double> b) {     long double dx = a.first - b.first;     long double dy = a.second - b.second;     return sqrt(dx * dx + dy * dy);   }   int main() {     cin.sync_with_stdio(0);     cin.tie(0);     int n, q;     cout << setprecision(20);     cin >> n >> q;     vector<pair<long double, long double> > poly(n);     for (int i = 0; i < n; ++i) {       cin >> poly[i].first >> poly[i].second;     }     pair<long double, long double> c = com(poly);     vector<pair<long double, long double> > v(n);     for (int i = 0; i < n; ++i) {       v[i].first = dist(c, poly[i]);       v[i].second = atan2((poly[i].second - c.second), (poly[i].first - c.first));     }     bool first = 1;     pair<int, int> cur{0, 1};     pair<pair<long double, long double>, pair<long double, long double> > cc{         poly[0], poly[1]};     pair<long double, long double> center;     long double theta;     while (q--) {       int type;       cin >> type;       if (type == 1) {         int f, t;         cin >> f >> t;         --f;         --t;         int m;         pair<long double, long double> top;         if (f == cur.first) {           m = cur.second;           top = cc.second;         } else {           m = cur.first;           top = cc.first;         }         center = {top.first, top.second - v[m].first};         theta = PI / 2 - v[m].second;         pair<long double, long double> other = {             v[t].first * cos(theta + v[t].second) + center.first,             v[t].first * sin(theta + v[t].second) + center.second};         cur = {m, t};         cc = {top, other};         first = 0;       } else {         int t;         cin >> t;         --t;         if (first) {           cout << poly[t].first <<     << poly[t].second <<   n ;         } else {           cout << v[t].first * cos(theta + v[t].second) + center.first <<                    << v[t].first * sin(theta + v[t].second) + center.second <<   n ;         }       }     }   }