#include <bits/stdc++.h>
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const long long inf = 1e17 + 7;
const long double PI = cos(0), eps = 1e-6;
const long long max_n = 1e4 + 5;
bool eq(long double a, long double b) { return fabsl(a - b) < eps; }
bool ls(long double a, long double b) { return a < b && !eq(a, b); }
bool lseq(long double a, long double b) { return a < b || eq(a, b); }
struct Point {
  long double x, y;
  Point() : x(), y() {}
  Point(long double x, long double y) : x(x), y(y) {}
  Point operator+(const Point& a) const { return Point(x + a.x, y + a.y); }
  Point operator-(const Point& a) const { return Point(x - a.x, y - a.y); }
  Point operator*(const long double k) const { return Point(x * k, y * k); }
  Point operator/(const long double k) const { return Point(x / k, y / k); }
  long double operator%(const Point& a) const { return x * a.x + y * a.y; }
  long double operator*(const Point& a) const { return x * a.y - y * a.x; }
  long double len() const { return sqrt(*this % *this); }
  Point ort() const { return Point(-y, x); }
  Point norm() const { return *this / len(); }
  Point rot(const long double ca, const long double sa) const {
    return *this * ca + ort() * sa;
  }
  Point rot(const long double ang) const { return rot(cos(ang), sin(ang)); }
};
long double angle(Point a, Point b) {
  long double res = acos(a % b / a.len() / b.len());
  if (ls(a * b, 0)) res = -res;
  return res;
}
long double square(Point a, Point b) { return a * b / 2; }
long long n, q;
Point st[max_n];
Point c;
Point find_centroid(Point a, Point b) { return (a + b) / 3; }
Point find_centroid() {
  Point res;
  long double sum = 0;
  for (long long i = 0; i < n; i++) {
    long long ne = (i + 1) % n;
    long double mass = square(st[i] - st[0], st[ne] - st[0]);
    sum += mass;
    res = res + (find_centroid(st[i] - st[0], st[ne] - st[0]) + st[0]) * mass;
  }
  res = res / sum;
  return res;
}
void scan() {
  cin >> n >> q;
  for (long long i = 0; i < n; i++) cin >> st[i].x >> st[i].y;
  c = find_centroid();
  for (long long i = 0; i < n; i++) st[i] = st[i] - c;
}
long double ang = 0;
Point fisting(long long v) { return st[v].rot(ang) + c; }
void solve() {
  scan();
  long long ver[]{0, 1};
  while (q--) {
    long long que;
    cin >> que;
    if (que == 1) {
      long long f, t;
      cin >> f >> t;
      f--;
      t--;
      long long d = (ver[0] == f ? 0 : 1);
      ver[d] = t;
      d = ver[1 - d];
      c = fisting(d);
      c.y -= st[d].len();
      ang = angle(st[d], Point(0, 1));
    } else {
      long long v;
      cin >> v;
      v--;
      Point res = fisting(v);
      cout << res.x << " " << res.y << endl;
    }
  }
}
signed main() {
  cin.tie(0);
  cout.tie(0);
  ios_base::sync_with_stdio(0);
  cout.precision(10);
  solve();
}
